我看到一个外部Hive表存储了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" = "...")
;
我有几个问题:
此Hive外部create
句子不包含location
,并且HDFS路径/user/hive/warehouse/ods.db/demo_table
不存在。那么在哪里可以找到该表的数据文件呢?
此外,是否存在HBaseStorageHandler
的默认路径,在哪里可以找到和更改它?配置文件?
感谢您的帮助。
答案 0 :(得分:1)
Hive-HBase集成中,我们通过定义架构并映射表/ cf,在没有sql表(hbase)的基础上创建 sql包装表(hive)。使用HBaseStorageHandler创建Hive表。
Hive表只是hbase表的包装,所有实际数据仍存储在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>/
一旦您在目录中列出了文件,便可以看到目录中的Hfile,其中将包含所有hbase表数据。
如果我们使用 create external table语句,则该表由 HBase 和HBase表必须先存在,然后才能创建 蜂巢表。
如果我们使用 create table语句,则该表由Hive管理 和蜂巢在HBase中创建表,并且该表在之前应存在 HBase。
存储处理程序是作为独立模块hive-hbase-handler-x.y.z.jar构建的,您可以在hive-client lib目录中找到此jar。
2.> HBase如何知道该表已链接到Hive(其HBase 创建句子不包含此类信息),其中 位置?
当配置单元表使用HbaseStoragehandler指向HBase表并使用架构读取HBase数据时。 在创建配置单元表时,我们正在定义要在HBase中指向哪个表/ cf。
有关更详细的信息,请参阅有关HBase-Hive集成的this链接。