CDH Hive集成Hbase

5 篇文章 1 订阅
2 篇文章 2 订阅

1.背景

Hive是建立在Hadoop之上的数据仓库基础构架、是为了减少MapReduce编写工作的批处理系统,Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce。

Hive可以理解为一个客户端工具,将我们的sql操作转换为相应的MapReduce jobs,然后在Hadoop上面运行。
HBase全称为Hadoop Database,即HBase是Hadoop的数据库,是一个分布式的存储系统。HBase利用Hadoop的HDFS作为其文件存储系统,利用Hadoop的MapReduce来处理HBase中的海量数据。利用Zookeeper作为其协调工具。

HBase数据库的缺点在于——语法格式异类,没有类sql的查询方式,因此在实际的业务当中操作和计算数据非常不方便,但是Hive就不一样了,Hive支持标准的sql语法,于是我们就希望通过Hive这个客户端工具对HBase中的数据进行操作与查询,进行相应的数据挖掘,这就是所谓Hive与hBase整合的含义。

2.准备Hbase测试表

准备了一张hbase测试表
进入hbase shell
依次执行命令创建一个有两个列簇ca,cb的mytable表:

create 'mytable','ca','cb'

put 'mytable','110','ca:name','rose'

put 'mytable','111','cb:age','20'

往mytable表里面塞入两条数据
查询mytable表:

hbase(main):014:0> scan 'mytable'
ROW                                                           COLUMN+CELL                                                                                                                                                                        
 110                                                          column=ca:name, timestamp=1557976394000, value=rose                                                                                                                                
 111                                                          column=cb:age, timestamp=1557976405399, value=20                                                                                                                                   
2 row(s) in 0.0240 seconds

3.jar包准备

根据CDH版本决定,有些版本无需拷贝jar包,因为hbase的lib文件夹下没有hive-hbase-handler.jar包,这个包的存放路径在hive的lib文件夹下面,所以需要拷贝,在hbase的master节点中,执行如下命令:

cp /opt/cloudera/parcels/CDH-5.11.2-1.cdh5.11.2.p0.4/lib/hive/lib/hive-hbase-handler.jar /opt/cloudera/parcels/CDH-5.11.2-1.cdh5.11.2.p0.4/lib/hbase/lib/

4.修改hive配置

通过Hive -> 配置 -> 搜索栏中搜索 hive.server2.enable.doAs ,默认为勾选,取消勾选即可,即能修改配置为 false。

5.重启 hive、hbase、hue、还有oozie

6.创建基于Hbase的hive外部表

依次执行添加一下hive设置:

SET hbase.zookeeper.quorum=masternode1,masternode2,masternode3; 

SET zookeeper.znode.parent=/hbase;

ADD jar /opt/cloudera/parcels/CDH-5.11.2-1.cdh5.11.2.p0.4/lib/hive/lib/hive-hbase-handler.jar;

hbase.zookeeper.quorum:
指定HBase使用的zookeeper集群,默认端口是2181,可以不指定,如果指定,格式为zkNode1:2222,zkNode2:2222,zkNode3:2222

zookeeper.znode.parent
指定HBase在zookeeper中使用的根目录

ADD jar /opt/cloudera/parcels/CDH-5.11.2-1.cdh5.11.2.p0.4/lib/hive/lib/hive-hbase-handler.jar;
使用hive-hbase-handler.jar连接hbase

在hive中使用如下语句建表在hive中使用如下语句建表:

hive> create external table mytable(rowkey string,ca map<string,string>,cb map<string,string>)
    > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    > WITH SERDEPROPERTIES ("hbase.columns.mapping" =":key,ca:,cb:")
    > TBLPROPERTIES ("hbase.table.name"="mytable");
OK
Time taken: 2.52 seconds

这里使用外部表映射到HBase中的表,这样,在Hive中删除表,并不会删除HBase中的表,否则,就会删除。

另外,除了rowkey,其他字段使用Map结构来保存HBase中的每一个列族。

7.在hive中查询Hbase

上面在Hive中创建好表之后,直接查询:

hive> select * from mytable;
OK
110	{"name":"rose"}	{}
111	{}	{"age":"20"}
Time taken: 0.691 seconds, Fetched: 2 row(s)

用统计函数查询总条数:

select count(1) from mytable

查询结果2条

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值