企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
如果使用的 HBase 与 Hive 版本是 CDH5.14.2,不需要做配置即可使用,如果采用 Apache 的版本,可能需要自己整合 HBase 一些 Jar 包到 Hive 的 lib 目录中,这个可以查找相关资料。<br/> **案例:** 目标:建立 Hive 表,关联到 HBase 表,插入数据到 Hive 表,然后分别在Hive和HBase中查看。 **1. 在 Hive 中创建表,同时关联到 HBase** ``` (1)Hive 中只支持 select 和 insert,不支持 HBase 中的版本控制; (2)如果在Hive创建一个Hive内部表,并关联到Hbase中,如果Hbase不存在对应的表,则在Hive中会自动创建; (3)如果在Hive创建一个Hive外部表,则先要在Hbase中创建对应的表; ``` ```sql (1)在Hive中创建外部表 create external table test_db.customer( row_key string, -- 默认将Hive表的第一个字段作为HBase表的rowkey perinfo_name string, order_numb string, order_date string, addr_city string, addr_state string ) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties -- 默认将Hive表的第一个字段作为Hbase的Rowkey(:key) -- 或者说Hbase的Rowkey会作为Hive表的第一个字段 ('hbase.columns.mapping'=':key,perinfo:name,order:numb,order:date,addr:city,addr:state') -- 关联到Hbase中test_db数据库的customer表 tblproperties("hbase.table.name"="test_db:customer"); (2)在Hbase中创建customer表 create 'test_db:customer', {NAME=>"perinfo"}, {NAME=>"order"}, {NAME=>"addr"} ``` **2. 向Hive表插入数据** ```sql insert into table test_db.customer values ('r0001','zhangsan','1121','2018-05-31','toronto','ON'); ``` **3. 查看** ```sql (1)在Hive中查看 0: jdbc:hive2://hadoop101:10000> select * from test_db.customer; +-------------------+------------------------+----------------------+----------------------+---------------------+----------------------+--+ | customer.row_key | customer.perinfo_name | customer.order_numb | customer.order_date | customer.addr_city | customer.addr_state | +-------------------+------------------------+----------------------+----------------------+---------------------+----------------------+--+ | r0001 | zhangsan | 1121 | 2018-05-31 | toronto | ON | +-------------------+------------------------+----------------------+----------------------+---------------------+----------------------+--+ (2)在Hbase中查看 hbase(main):012:0> scan 'test_db:customer' ROW COLUMN+CELL r0001 column=addr:city, timestamp=1615974910826, value=toronto r0001 column=addr:state, timestamp=1615974910826, value=ON r0001 column=order:date, timestamp=1615974910826, value=2018-05-31 r0001 column=order:numb, timestamp=1615974910826, value=1121 r0001 column=perinfo:name, timestamp=1615974910826, value=zhangsan ``` **4. 在hdfs上查看** ```sql -- Hive在hdfs的目录,只创建了一个空目录customer /home/hadoop/hive/warehouse/customer hbase(main):016:0> flush 'test_db:customer' -- Hbase在hdfs的目录,806d28b7719e493d87d8a9666cd48ce5是一个文件,不是目录 -- 数据存储在Hbase中 /hbase/data/default/customer/5bec2b2ee986c917cff39f6c77e2099c/addr/806d28b7719e493d87d8a9666cd48ce5 ``` 当建立映射后,无论是在Hive,或者Hbase都可以对customer进行任何操作。