一、配置
1、整合工具类
(1)、版本问题
- 我使用的是Hive-0.14.0和hbase-0.98.8
hive-Hbase-handler-0.14.0.jar
这个版本是跟着hive的
(2)、根据hive版本确定hbase版本
①、在maven仓库找到对应的依赖添加到pom.xml,例如:
1 | <dependency> |
- 在下载好的jar包/META-INF/maven/DEPENDENCIES中,找到hbase的版本
例如:hive-Hbase-handler-0.14.0.jar指明hbase的版本是0.98.3
- 我用的是0.98.8,小的版本差异不影响
(2)、jar包导入
把下载到的hive-hbase-handler-0.14.0.jar放到hive的lib目录下。
2、设置环境变量
修改$HIVE_HOME/conf/hive-env.sh文件中的最后一行,内容如下:1
export HIVE_AUX_JARS_PATH=/usr/local/hive-0.14.0/lib/hive-hbase-handler-0.14.0.jar:/usr/local/hbase-0.98.8-hadoop2/lib/hbase-client-0.98.8-hadoop2.jar:/usr/local/hbase-0.98.8-hadoop2/lib/zookeeper-3.4.6.jar
上述路径,根据自身情况配置
二、使用hive创建hbase表
1、开启hbase、hive
2、命令
1 | CREATE TABLE hivetohbase1(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' |
上述:属性”hbase.columns.mapping”的值中间不能有任何空格。
二、使用hive向hbase表插入数据
只支持insert插入,不支持load data插入。
1、命令
1 | insert into table hivetohbase(表名) select * from (其他表); |
或
1 | insert into table hivetohbase(表名) values(...); |
三、使用hive关联已存在的hbase表
1、hbase表的数据
1 | hbase(main):008:0> scan 'test1' |
2、第一次建表
1 | hive> create external table hbasetest1(id int, home string, school string) row format delimited fields terminated by ',' |
查询:1
2
3
4hive> select * from hbasetest1;
OK
NULL NULL shiyan
NULL NULL sanyuan
- 问题:id和name没有显示。
- 发现:上面的建表语句”hbase.columns.mapping”属性的值写错了,把home写成了name.
3、第二次建表
1 | hive> create external table hbasetest1two(id int, home string, school string) row format delimited fields terminated by ',' |
查询:
1 | hive> select * from hbasetest1two; |
- 问题:id没有显示。
- 发现:上面的建表语句,hive表中的id是int型,而hbase表中rowkey是string类型,不匹配所以报错。
3、第三次建表
1 | hive> create external table hbasetest1three(id string, home string, school string) row format delimited fields terminated by ',' |
查询:
1 | hive> select * from hbasetest1three; |
成功~
四、注意
- 使用hive创建hbase表,表中的数据时在hbase中存储的,hive中没有
证实:HDFS中/user/hive/warehouse/该表 中没有任何数据
- 使用hive关联已存在的hbase表,用的是外部表,数据更不在hive中