签到成功

知道了

CNDBA社区CNDBA社区

CDH Hive集成Hbase

2019-05-16 11:55 3873 0 原创 CDH hive Hbase
作者: lirui

1.背景

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

http://www.cndba.cn/lirui/article/3409

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整合的含义。http://www.cndba.cn/lirui/article/3409

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表:http://www.cndba.cn/lirui/article/3409

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节点中,执行如下命令:http://www.cndba.cn/lirui/article/3409

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。

http://www.cndba.cn/lirui/article/3409

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

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

依次执行添加一下hive设置:http://www.cndba.cn/lirui/article/3409

http://www.cndba.cn/lirui/article/3409
http://www.cndba.cn/lirui/article/3409

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:2222http://www.cndba.cn/lirui/article/3409

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条

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
lirui

lirui

关注
  • 15
    原创
  • 0
    翻译
  • 0
    转载
  • 1
    评论
  • 访问:61825次
  • 积分:56
  • 等级:注册会员
  • 排名:第39名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ