Hive与HBase整合文档
Hive与HBase整合文档
- Hive整合HBase配置
- 拷贝hbase 相关jar包
将hbase 相关jar包拷贝到hive lib目录下
hbase-client-0.98.13-hadoop2.jar
hbase-common-0.98.13-hadoop2.jar
hbase-server-0.98.13-hadoop2.jar
hbase-common-0.98.13-hadoop2-tests.jar
hbase-protocol-0.98.13-hadoop2.jar
htrace-core-2.04.jar
hive-hbase-handler-1.0.0.jar
zookeeper-3.4.5.jar
file:///home/hadoop/app/hive/lib/hbase-client-2.2.2.jar, file:///home/hadoop/app/hive/lib/hbase-common-2.2.2.jar, file:///home/hadoop/app/hive/lib/hbase-common-2.2.2-tests.jar, file:///home/hadoop/app/hive/lib/hbase-protocol-2.2.2.jar, file:///home/hadoop/app/hive/lib/hbase-server-2.2.2.jar |
- 修改hive-site.xml配置文件
将上述jar包添加到hive-site.xml配置的hive.aux.jars.path属性中。
修改hive.zookeeper.quorum属性
添加hbase.zookeeper.quorum属性,此属性hive-site.xml之前不存在。
- 修改hive-env.sh配置文件
同默认配置文件中copy一份hive-env.sh文件
修改hive-env.sh配置文件
- 启动Hive
上述配置完成之后,通过bin/hive命令启动hive
如果出现以上输出信息,说明hive整合hbase成功。
- Hive整合HBase后使用
2.1 准备测试数据
(1)测试数据文件
创建测试文件course.csv
第一列为课程名称,第二列为课程分数
(2)数据加载到HDFS
在hdfs文件系统中创建hive-hbase目录,并加载测试数据。
查看hdfs文件目录
创建/hive-hbase/course目录
将course.csv文件上传至/hive-hbase/course目录下
(3)创建Hive数据库
进入Hive Shell 客户端创建库course
(4)创建Hive表
进入Hive Shell 客户端创建外部表。
create external table if not exists course.testcourse(cname string,score int) row format delimited fields terminated by '\t' stored as textfile location '/hive-hbase/course';
(5)查看hive表数据
select * from course.testcourse;
从查询语句的执行结果可以看出,Hive表中的数据和hdfs上的数据一致。
2.2 创建Hive内部表
create table 建表语句声明
course.hbase_testcourse 所创建的Hive表名称
(cname string,score int) 所创建Hive表字段
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 指定使用Hive Storage Handlers
WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,cf:score") 指定HBase表与Hive表字段映射关系。
TBLPROPERTIES("hbase.table.name" = "hbase_testcourse"); 指定HBase表名
内部表创建语句如下:
create table course.hbase_testcourse(cname string,score int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,cf:score") TBLPROPERTIES("hbase.table.name" = "hbase_testcourse", "hbase.mapred.output.outputtable" = "hbase_testcourse");
- 查看Hive中所创建的表
进入Hive Shell 客户端执行
hive> use course;
hive> show tables;
- 查看HBase 中所创建的表
进入HBase Shell 客户端执行
bin/hbase shell
2.3 加载数据
创建完内部表,可以通过Hive支持的insert overwrite 方式将一个表的数据导入HBase。
下面是对应的执行语句:
insert overwrite table course.hbase_testcourse select cname,score from course.testcourse;
2.4 执行查询
加载完数据后,需要验证一下加载结果是否存在问题,验证一下总记录数。
select count(*) from course.hbase_testcourse;
2.5 创建外部表
创建外部表适用于该表在HBase中已经存在,但在Hive中并没有相关信息。此时可以通过创建外部表的方式,为HBase现有表提供SQL查询条件。而内部表适用于Hive和HBase都没有相关表的情况。
- 创建HBase表
进入HBase Shell客户端执行建表命令
create 'hbase_test',{ NAME => 'cf'}
- 插入数据
执行以下命令插入数据
put 'hbase_test', 'hadoop','cf:score', '95'
put 'hbase_test', 'storm','cf:score', '96'
put 'hbase_test', 'spark','cf:score', '97'
- 查看数据
执行扫描表操作
scan 'hbase_test'
- 创建Hive外部表
进入Hive Shell 客户端,创建外部表course.hbase_test,建表命令如下所示:
create external table course.hbase_test(cname string,score int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,cf:score") TBLPROPERTIES("hbase.table.name" = "hbase_test", "hbase.mapred.output.outputtable" = "hbase_test");
备注:创建外部表和创建内部表的命令基本一致,唯一的区别就是:创建内部表使用create table,创建外部表使用create external table。
- Hive 查看数据
执行Hive命令查询HBase 表中的数据。
select * from hbase_test;
通过创建外部表可以成功从Hive 查询HBase表中的数据。