有关hive到hbase的问题

monwx1rj  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(293)

我看到一个外部配置单元表存储了hbase的数据:

CREATE EXTERNAL TABLE  IF NOT EXISTS ods.demo_table(
    rowkey String COMMENT 'rowkey of hbase',
    ....
    )
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = "info:...") TBLPROPERTIES("hbase.table.name" = "...", "hbase.mapred.output.outputtable" = "...")
;

我有几个问题:
这个表的hdfs路径是什么?
这个Hive是外部的 create 句子不包括 location 以及hdfs路径 /user/hive/warehouse/ods.db/demo_table 不存在。那么在哪里可以找到这个表的数据文件呢?
此外,如果存在 HBaseStorageHandler ,在哪里查找和更改?配置文件?
hbase如何知道此表链接到配置单元(其hbase create语句不包含此类信息)以及位置在哪里?
感谢您的帮助。

omvjsjqw

omvjsjqw1#

配置单元hbase集成我们在使用hbasestoragehandler创建配置单元表的同时,通过定义架构和Map表/cf在无sql表(hbase)的基础上创建sql Package 表(配置单元)。
配置单元表只是hbase表的 Package 器,所有实际数据仍然存储在hbase表中。
1.这个表的hdfs路径是什么?
您需要转到hbase-site.xml以查找hbase表的位置。

<property>
      <name>hbase.rootdir</name>
      <value>hdfs://nn:8020/apps/hbase</value>
 </property>

hbase表的默认位置是/apps/hbase,如果您的hbase表是在默认名称空间中创建的,那么

bash$ hadoop fs -ls /apps/hbase/data/data/default/<table_name>/

(或)
如果hbase表是在特定的名称空间中创建的,那么

bash$ hadoop fs -ls /apps/hbase/data/data/<name_space_name>/<table_name>/

列出目录中的文件后,就可以看到位于目录中的hfiles,其中包含所有hbase表数据。
如果我们使用createexternaltable语句,那么该表由hbase管理,在创建配置单元表之前,hbase表需要存在。
如果我们使用CREATETABLE语句,那么表由配置单元管理,配置单元在hbase中创建表,并且表应该在hbase中之前存在。
存储处理程序构建为一个独立的模块hive-hbase-handler-x.y.z.jar,您将在hive-client-lib目录中找到这个jar。
2.>hbase如何知道此表链接到配置单元(其hbase create语句不包含此类信息)以及位置在哪里?
因为配置单元表使用hbastoragehandler指向hbase表,并使用架构读取hbase数据。在创建配置单元表时,我们定义在hbase中指向哪个表/cf。
有关更多详细信息,请参阅有关hbase配置单元集成的链接。

相关问题