概述
hbase与hive集成
官方部署使用参考资料:
官方文档步骤在hive的官网上:
1、拷贝jar包或创建jar包的软连接
hive作为一个客户端访问hbase需要hbase相同jar包的依赖支持
创建软连接,hive作为hbase的客户端需要访问hbase,需要相关jar包依赖
软连接类似于快捷方式,删除软连接不会删除原文件
针对Apache版本:
export HBASE_HOME=/opt/modules/hbase-0.98.6-hadoop2
export HIVE_HOME=/opt/modules/apache-hive-0.13.1-bin
ln -s $HBASE_HOME/lib/hbase-common-0.98.6-hadoop2.jar $HIVE_HOME/lib/hbase-common-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/hbase-server-0.98.6-hadoop2.jar $HIVE_HOME/lib/base-server-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/hbase-client-0.98.6-hadoop2.jar $HIVE_HOME/lib/hbase-client-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/hbase-protocol-0.98.6-hadoop2.jar $HIVE_HOME/lib/hbase-protocol-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/hbase-it-0.98.6-cdh5.3.3.jar $HIVE_HOME/lib/hbase-it-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/htrace-core-2.04.jar $HIVE_HOME/lib/htrace-core-2.04.jar
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-0.98.6-hadoop2.jar $HIVE_HOME/lib/hbase-hadoop2-compat-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-0.98.6-hadoop2.jar $HIVE_HOME/lib/hbase-hadoop-compat-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/high-scale-lib-1.1.1.jar $HIVE_HOME/lib/high-scale-lib-1.1.1.jar
针对CDH版本:
export HBASE_HOME=/opt/modules/hbase-0.98.6-cdh5.3.6
export HIVE_HOME=/opt/modules/hive-0.13.1-cdh5.3.6
ln -s $HBASE_HOME/lib/hbase-common-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-common-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-client-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-client-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-protocol-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-protocol-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-it-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-it-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/htrace-core-2.04.jar $HIVE_HOME/lib/htrace-core-2.04.jar
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-hadoop2-compat-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/high-scale-lib-1.1.1.jar $HIVE_HOME/lib/high-scale-lib-1.1.1.jar
注意:全部一起复制粘贴执行时,注意最后一条创建软连接的命令有没有执行!!!!
2、修改hive-site.xml
声明zookeeper的地址,根据自己的集群有几个声明几个;
hive分析的数据在hbase里,hive关联hbase需要联系zookeeper
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.134.101</value>
</property>
3、测试
利用Hive的分析功能接口,将hbase表数据映射到hive表中,使用hql分析HBase表数据
实现思路:
HBase中已经存储一张student信息表
去Hive中创建外部表关联映射hbase中的这张student表
1)创建外部关联表
在hbase中表数据已经存在的情况下要求创建一个外部表
创建内部表会报错
CREATE EXTERNAL TABLE hive_hbase_student(
id int,
name string,
age string
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age")
TBLPROPERTIES ("hbase.table.name" = "student4");
说明:
第一个key是固定格式,默认为hbase的rowkey,不需要指定列簇;
其他字段会与hive表的字段顺序一一对应映射;
hive字段的名称可以与hbase中列的名称不一致
hive可以只映射出hbase表中的部分列
2)验证:
>select * from hive_hbase_student ;
总结:
如果第一步jar包的软连接没有创建好此时会报找不到某些类的错误
一般我们创建hive与hbase表映射表都是外部表,在hive中删除外部表时hbase中表不会被同步删除;
如果创建的是内部表,所关联的hbase中的表不能提前存在
当在hive端执行完建表命令后(创建内部表)在hbase的关联表及列簇会同步生成
内部表情况下在hive端删除hive表的同时会直接删除hbase中的对应的关联表
hive与hbase外部关联后,数据实际存放在hbase表中
在Hive表的hdfs存储路径下面:
/user/hive/warehouse/hive_hbase_table 没有数据
在Hbase表的hdfs存储路径下面:
/hbase/data/default/xyz 有数据,实际存放点
CREATE TABLE hive_hbase_student1(
id int,
name string,
sex string
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info1:name,info1:sex")
TBLPROPERTIES ("hbase.table.name" = "student2");
------------------------------------------------------------------
思考:
关联映射后向hive表中加入数据后hbase表中是否会同步数据,能否通过hive作为接口向hbase表中插入数据?
测试:
1)向hive_hbase_student表中load加载数据
$ vi student1.txt //新建测试数据
10004 tom1 male 20
10005 mary1 female 18
10006 lio1 male 21
> load data local inpath '/opt/modules/student1.txt' into table hive_hbase_student ;
//报错:非本地表不能使用load加载数据
2)向hive_hbase_student表中inster插入数据
CREATE TABLE temp1(
id int,
name string,
sex string,
age string
)
row format delimited fields terminated by 't';
CREATE TABLE temp1(
id int,
name string,
age string
)
row format delimited fields terminated by 't';
> load data local inpath '/opt/modules/hbase-0.98.6-cdh5.3.6/data/student1.tsv' into table temp1 ;
> insert into table hive_hbase_student select * from temp1 ;
验证:
> select * from hive_hbase_student
> scan 'student'
结论:
数据插入成功,可以通过hive作为接口向hbase表中插入数据
最后
以上就是饱满小刺猬为你收集整理的hbase与hive集成的全部内容,希望文章能够帮你解决hbase与hive集成所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复