hive学习教程(五):hive和Hbase整合

来源:互联网 发布:淘宝优惠券制作 编辑:程序博客网 时间:2024/05/20 20:01

一、Hive整合HBase原理

Hive与HBase整合的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive-hbase-handler-0.9.0.jar工具类,如下图
这里写图片描述
Hive与HBase通信示意图
这里写图片描述

二、具体步骤

安装前说明
1、关于hadoop、HBase、Hive集群的搭建,请参考本人博文“基于Hadoop的数据分析综合管理平台之Hadoop、HBase完全分布式集群搭建”
2、本文中Hadoop、HBase、Hive安装路径
这里写图片描述
2.1、拷贝jar包
删除HIVEHOME/lib/HBaseZookeeperjar[java]viewplaincopyprint?1.rmrfHIVE_HOME/lib/zookeeper-*.jar
2.rm -rf HIVEHOME/lib/hbase.jar[java]viewplaincopyprint?1.cpHBASE_HOME/hbase-0.94.7-security.jar HIVEHOME/lib/2.cpHBASE_HOME/lib/zookeeper-3.4.5.jar $HIVE_HOME/lib/

2.2、修改HIVEHOME/conf/hivesite.xmlmkdirHIVE_HOME/logs
在尾部添加
[java] view plain copy print?
1.
2.hive.querylog.location
3./home/yujianxin/hive/hive-0.9.0/logs
4.
5.
6.hive.aux.jars.path
7.
8.file:///home/yujianxin/hive/hive-0.9.0/lib/hive-hbase-handler-0.9.0.jar,
9.file:///home/yujianxin/hive/hive-0.9.0/lib/hbase-0.94.7-security.jar,
10.file:///home/yujianxin/hive/hive-0.9.0/lib/zookeeper-3.4.5.jar
11.
12.
修改
[java] view plain copy print?
1.
2. hive.zookeeper.quorum
3. master,slave1,slave2
4.
2.3、拷贝hbase-0.94.7-security.jar到所有hadoop节点(包括master)的hadoop/lib下
[java] view plain copy print?
1.cp HBASEHOME/hbase0.94.7security.jarHADOOP_HOME/lib
2.4、拷贝hbase/conf下的hbase-site.xml文件到所有hadoop节点(包括master)的hadoop/conf下
[java] view plain copy print?
1.cp HBASEHOME/conf/hbasesite.xmlHADOOP_HOME/conf

三、启动、使用配置后Hive,测试是否配置成功

3.1、启动Hive
集群方式启动

[java] view plain copy print?
1.hive –auxpath /home/yujianxin/hive/hive-0.9.0/lib/hive-hbase-handler-0.9.0.jar,/home/
2.yujianxin/hive/hive-0.9.0/lib/hbase-0.94.7-security.jar,/home/yujianxin/hive/hive-0.9.
3.0/lib/zookeeper-3.4.5.jar

可以将此启动Hive与HBase整合的命令写成Shell脚本,设置成开机启动

这里写图片描述

3.2、在Hive中创建HBase识别的表

[java] view plain copy print?
1.CREATE TABLE hbase_hive_1(key int, value string)
2.STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
3.WITH SERDEPROPERTIES (“hbase.columns.mapping” = “:key,cf1:val”)
4.TBLPROPERTIES (“hbase.table.name” = “xyz”);

hbase.table.name 定义在hbase中的table名称
多列时,data:1,data:2
多列族时,data1:1,data2:1
hbase.columns.mapping 定义在hbase的列族,里面的:key 是固定值而且要保证在表pokes中的foo字段是唯一值
创建有分区的表

[java] view plain copy print?
1.CREATE TABLE hbase_hive_2(key int, value string)
2.partitioned by (day string)
3.STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
4.WITH SERDEPROPERTIES (“hbase.columns.mapping” = “:key,cf1:val”)
5.TBLPROPERTIES (“hbase.table.name” = “xyz2”);

分别查看Hive、HBase中建立的表
这里写图片描述
这里写图片描述
3.3、导入数据

新建hive的数据表
create table pokes(foo int,bar string)
row format delimited fields terminated by ‘,’;
批量导入数据
这里写图片描述
load data local inpath ‘/home/yujianxin/temp/data1.txt’ overwrite into table pokes;
使用sql导入hbase_table_1
SET hive.hbase.bulk=true;
insert overwrite table hbase_hive_1 select * from pokes;
导入有分区的表
insert overwrite table hbase_hive_2 partition (day=’2012-01-01’) select * from pokes;
往Hive中插入数据同时会插入到HBase中
3.4、分别查看Hive、HBase中的数据
这里写图片描述
OK,到此Hive、HBase整合成功。
——————————————————————————————————————————————————————————————————
下面再给出较复杂的测试例子

情况一、对于在hbase已经存在的表,在hive中使用CREATE EXTERNAL TABLE来建立联系

这里写图片描述
[java] view plain copy print?
1.create external table hive_test (key int,gid map

原创粉丝点击