hive与HBase的整合案例
hive与HBase的整合案例
导读:
Hive和Hbase是两种基于Hadoop的不同技术,Hive是一种类SQL的引擎,并且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也可以从Hive写到HBase,或者从HBase写回Hive。
需求一:将hive分析结果的数据,保存到HBase当中去
第一步:拷贝hbase的五个依赖jar包到hive的lib目录下
将我们HBase的五个jar包拷贝到hive的lib目录下
hbase的jar包都在/export/servers/hbase-1.2.0-cdh5.14.0/lib
我们需要拷贝五个jar包名字如下
hbase-client-1.2.0-cdh5.14.0.jar
hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar
hbase-hadoop-compat-1.2.0-cdh5.14.0.jar
hbase-it-1.2.0-cdh5.14.0.jar
hbase-server-1.2.0-cdh5.14.0.jar
我们直接在node03(虚拟机名)执行以下命令,通过创建软连接的方式来进行jar包的依赖
- 1 ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-client-1.2.0-cdh5.14.0.jar /export/servers/hive/lib/hbase-client-1.2.0-cdh5.14.0.jar
- 2
- 3 ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar /export/servers/hive/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.0.jar
- 4
- 5 ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-hadoop-compat-1.2.0-cdh5.14.0.jar /export/servers/hive/lib/hbase-hadoop-compat-1.2.0-cdh5.14.0.jar
- 6
- 7 ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-it-1.2.0-cdh5.14.0.jar /export/servers/hive/lib/hbase-it-1.2.0-cdh5.14.0.jar
- 8
- 9 ln -s /export/servers/hbase-1.2.0-cdh5.14.0/lib/hbase-server-1.2.0-cdh5.14.0.jar /export/servers/hive/lib/hbase-server-1.2.0-cdh5.14.0.jar
第二步:修改hive的配置文件
编辑node03服务器上面的hive的配置文件hive-site.xml添加以下两行配置
- cd /export/servers/hive-1.1.0-cdh5.14.0/conf
- vim hive-site.xml
- <property>
- <name>hive.zookeeper.quorum</name>
- <value>node01,node02,node03</value>
- </property>
- <property>
- <name>hbase.zookeeper.quorum</name>
- <value>node01,node02,node03</value>
- </property>
第三步:修改hive-env.sh配置文件添加以下配置
- cd /export/servers/hive-1.1.0-cdh5.14.0/conf
- vim hive-env.sh
- export HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
- export HBASE_HOME=/export/servers/hbase-1.2.0-cdh5.14.0
- export HIVE_CONF_DIR=/export/servers/hive-1.1.0-cdh5.14.0/conf
第四步:hive当中建表并加载以下数据
hive中操作,进入hive客户端
- cd /export/servers/hive-1.1.0-cdh5.14.0/
- bin/hive
创建hive数据库与hive对应的数据库表
- create database course;
- use course;
- create external table if not exists course.score(id int,cname string,score int) row format delimited fields terminated by \'\t\' stored as textfile ;
准备数据内容如下
- cd /export/
- vim hive-hbase.txt
- 1 zhangsan 80
- 2 lisi 60
- 3 wangwu 30
- 4 zhaoliu 70
进入hive客户端进行加载数据
- hive (course)> load data local inpath \'/export/hive-hbase.txt\' into table score;
- hive (course)> select * from score;
第五步:创建hive管理表与HBase进行映射
我们可以创建一个hive的管理表与hbase当中的表进行映射,hive管理表当中的数据,都会存储到hbase上面去
hive当中创建内部表
- create table course.hbase_score(id int,cname string,score int) stored by \'org.apache.hadoop.hive.hbase.HBaseStorageHandler\' with serdeproperties("hbase.columns.mapping" = "cf:name,cf:score") tblproperties("hbase.table.name" = "hbase_score");
通过insert overwrite select 插入数据
- insert overwrite table course.hbase_score select id,cname,score from course.score;
第六步:hbase当中查看表hbase_score
进入hbase的客户端查看表hbase_score,并查看当中的数据
- hbase(main):023:0> list
=> [“hbase_score”, “myuser”, “myuser2”, “student”, “user”]
- hbase(main):024:0> scan \'hbase_score\'
ROW COLUMN+CELL
1 column=cf:name, timestamp=1550628395266, value=zhangsan
1 column=cf:score, timestamp=1550628395266, value=80
2 column=cf:name, timestamp=1550628395266, value=lisi
2 column=cf:score, timestamp=1550628395266, value=60
3 column=cf:name, timestamp=1550628395266, value=wangwu
3 column=cf:score, timestamp=1550628395266, value=30
4 column=cf:name, timestamp=1550628395266, value=zhaoliu
4 column=cf:score, timestamp=1550628395266, value=70
4 row(s) in 0.0360 seconds
需求二:创建hive外部表,映射HBase当中已有的表模型,直接通过
第一步:HBase当中创建表并手动插入加载一些数据
进入HBase的shell客户端,手动创建一张表,并插入加载一些数据进去
- create \'hbase_hive_score\',{ NAME =>\'cf\'}
- put \'hbase_hive_score\',\'1\',\'cf:name\',\'zhangsan\'
- put \'hbase_hive_score\',\'1\',\'cf:score\', \'95\'
- put \'hbase_hive_score\',\'2\',\'cf:name\',\'lisi\'
- put \'hbase_hive_score\',\'2\',\'cf:score\', \'96\'
- put \'hbase_hive_score\',\'3\',\'cf:name\',\'wangwu\'
- put \'hbase_hive_score\',\'3\',\'cf:score\', \'97\'
第二步:建立hive的外部表,映射HBase当中的表以及字段
在hive当中建立外部表,进入hive客户端,然后执行以下命令进行创建hive外部表,就可以实现映射HBase当中的表数据
- CREATE external TABLE course.hbase2hive(id int, name string, score int) STORED BY \'org.apache.hadoop.hive.hbase.HBaseStorageHandler\' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:name,cf:score") TBLPROPERTIES("hbase.table.name" ="hbase_hive_score");
第三步:hbase当中查看表hbase2hive
- select * from hbase2hive;
hbase2hive.id hbase2hive.name hbase2hive.score
1 zhangsan 95
2 lisi 96
3 wangwu 97
Time taken: 0.211 seconds, Fetched: 3 row(s)