当前位置:首页 > PHP教程 > PHP总结归纳

Hive入门3–Hive与HBase的整合

开场白: hive与hbase的整合功能的实现是利用两者本身对外的api接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类 (hive storage handlers), 大致意思如图所示: 口水: 对 hive_hbase-handler.jar 这个东东还有点兴趣,有空来磋磨一下。

开场白:
hive与hbase的整合功能的实现是利用两者本身对外的api接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类 (hive storage handlers), 大致意思如图所示:

口水:
对 hive_hbase-handler.jar 这个东东还有点兴趣,有空来磋磨一下。

一、2个注意事项:
1、需要的软件有 hadoop、hive、hbase、zookeeper,hive与hbase的整合对hive的版本有要求,所以不要下载.0.6.0以前的老版本,hive.0.6.0的版本才支持与hbase对接,因此在hive的lib目录下可以看见多了hive_hbase-handler.jar这个jar包,他是hive扩展存储的handler ,hbase 建议使用 0.20.6的版本,这次我没有启动hdfs的集群环境,本次所有测试环境都在一台机器上。

2、运行hive时,也许会出现如下错误,表示你的jvm分配的空间不够,错误信息如下:
invalid maximum heap size: -xmx4096m
the specified size exceeds the maximum representable size.
could not create the java virtual machine.

解决方法:
/work/hive/bin/ext# vim util/exechivecmd.sh 文件中第33行
修改,
hadoop_heapsize=4096

hadoop_heapsize=256

另外,在 /etc/profile/ 加入 export $hive_home=/work/hive

二、启动运行环境
1启动hive
hive –auxpath /work/hive/lib/hive_hbase-handler.jar,/work/hive/lib/hbase-0.20.3.jar,/work/hive/lib/zookeeper-3.2.2.jar -hiveconf hbase.master=127.0.0.1:60000
加载 hive需要的工具类,并且指向hbase的master服务器地址,我的hbase master服务器和hive运行在同一台机器,所以我指向本地。

2启动hbase
/work/hbase/bin/hbase master start

3启动zookeeper
/work/zookeeper/bin/zkserver.sh start

三、执行
在hive中创建一张表,相互关联的表
create table hbase_table_1(key int, value string) stored by 'org.apache.hadoop.hive.hbase.hbasestoragehandler' with serdeproperties ("hbase.columns.mapping" = ":key,cf1:val") tblproperties ("hbase.table.name" = "xyz");

在运行一个在hive中建表语句,并且将数据导入
建表
create table pokes (foo int, bar string);
数据导入
load data local inpath '/work/hive/examples/files/kv1.txt' overwrite into table pokes;

在hive与hbase关联的表中 插入一条数据
insert overwrite table hbase_table_1 select * from pokes where foo=98;
运行成功后,如图所示:

插入数据时采用了mapreduce的策略算法,并且同时向hbase写入,如图所示:

在hbase shell中运行 scan 'xyz' 和describe "xyz" 命令,查看表结构,运行结果如图所示:

xyz是通过hive在hbase中创建的表,刚刚在hive的建表语句中指定了映射的属性 "hbase.columns.mapping" = ":key,cf1:val" 和 在hbase中建表的名称 "hbase.table.name" = "xyz"

在hbase在运行put命令,插入一条记录
put 'xyz','10001','cf1:val','www.javabloger.com'

在hive上运行查询语句,看看刚刚在hbase中插入的数据有没有同步过来,
select * from hbase_table_1 where key=10001;
如图所示:

最终的效果
以上整合过程和操作步骤已经执行完毕,现在hive中添加记录hbase中有记录添加,同样你在hbase中添加记录hive中也会添加, 表示hive与hbase整合成功,对海量级别的数据我们是不是可以在hbase写入,在hive中查询 喃?因为hbase 不支持复杂的查询,但是hbase可以作为基于 key 获取一行或多行数据,或者扫描数据区间,以及过滤操作。而复杂的查询可以让hive来完成,一个作为存储的入口(hbase),一个作为查询的入口(hive)。如下图示。


呵呵,见笑了,以上只是我面片的观点。

先这样,稍后我将继续更新,感谢你的阅读。

相关文章:
apache hive入门2
apache hive入门1

hbase入门篇4
hbase入门篇3
hbase入门篇2
hbase入门篇

–end–


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!