有关Hive到HBase的问题

时间:2018-07-27 07:09:56

标签: hadoop hive hbase

我看到一个外部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" = "...")
;

我有几个问题:

  1. 此表的HDFS路径是什么?

此Hive外部create句子不包含location,并且HDFS路径/user/hive/warehouse/ods.db/demo_table不存在。那么在哪里可以找到该表的数据文件呢?

此外,是否存在HBaseStorageHandler的默认路径,在哪里可以找到和更改它?配置文件?

  1. HBase如何知道此表已链接到Hive(其HBase创建语句不包含此类信息)以及位置在哪里?

感谢您的帮助。

1 个答案:

答案 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表数据。

  1. 如果我们使用 create external table语句,则该表由 HBase 和HBase表必须先存在,然后才能创建 蜂巢表。

  2. 如果我们使用 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链接。