前置准备
这里需要大家预先安装 Hadoop(2.7.7)集群、Hive(2.3.6)、HBase(1.4.13)。
一、Hive读取HBase中的数据
1.1 先在HBase上创建一张表hbase_hive(方便测试使用默认命名空间default)
hbase(main):025:0> create 'hbase_hive','info'
1.2 向hbase_hive表中插入两条测试数据
hbase(main):031:0> put 'hbase_hive','user001','info:name','xiaokang'
hbase(main):032:0> put 'hbase_hive','user001','info:age',18
hbase(main):033:0> put 'hbase_hive','user002','info:name','xiaokang1'
hbase(main):034:0> put 'hbase_hive','user002','info:age',19
1.3 在Hive中创建外部表hive_user并关联到HBase的hbase_hive
create external table hive_user(userid string,name string,age int) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,info:name,info:age") tblproperties("hbase.table.name" = "hbase_hive");
1.4 读取测试
hive (default)> select * from hive_user limit 0,1;
OK
hive_user.userid hive_user.name hive_user.age
user001 xiaokang 18
Time taken: 0.989 seconds, Fetched: 1 row(s)
1.5 向HBase的hbase_hive表中再添加一条数据进行读取测试
hbase(main):033:0> put 'hbase_hive','user003','info:name','xiaokang2'
hbase(main):034:0> put 'hbase_hive','user003','info:age',20
hive (default)> select * from hive_user;
OK
hive_user.userid hive_user.name hive_user.age
user001 xiaokang 18
user002 xiaokang1 19
user003 xiaokang2 20
Time taken: 0.471 seconds, Fetched: 3 row(s)
二、Hive写入数据到HBase中
2.1 先在HBase上创建一张表from_hive(数据导入到此表中)
hbase(main):025:0> create 'from_hive','info'
2.2 在Hive中创建外部表hive_user_hbase并关联到HBase的from_hive
create external table hive_user_hbase(userid string,name string,age int) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,info:name,info:age") tblproperties("hbase.table.name" = "from_hive");
2.3 创建临时表(用于将数据写入到hive_user_hbase)
create temporary table tmp_user(userid string,name string,age int) row format delimited fields terminated by '\t';
2.4 向临时表中加载数据
load data local inpath '/home/xiaokang/user.txt' into table tmp_user;
#查询验证数据是否加载成功
hive (default)> select * from tmp_user;
OK
tmp_user.userid tmp_user.name tmp_user.age
user111 xiaokang 18
user222 xiaokang 19
user333 xiaokang 20
user444 xiaokang 21
Time taken: 0.379 seconds, Fetched: 4 row(s)
2.5 写入数据
hive (default)> insert into table hive_user_hbase select * from tmp_user;
2.6 在HBase中验证数据是否写入
#扫描全表(大数据量的情况下不推荐,会造成机器崩溃)
hbase(main):041:0> scan 'from_hive'
ROW COLUMN+CELL
user111 column=info:age, timestamp=1585814173216, value=18
user111 column=info:name, timestamp=1585814173216, value=xiaokang
user222 column=info:age, timestamp=1585814173216, value=19
user222 column=info:name, timestamp=1585814173216, value=xiaokang
user333 column=info:age, timestamp=1585814173216, value=20
user333 column=info:name, timestamp=1585814173216, value=xiaokang
user444 column=info:age, timestamp=1585814173216, value=21
user444 column=info:name, timestamp=1585814173216, value=xiaokang
4 row(s) in 0.0320 seconds