Hive综合HBase——经Hive阅读/书写 HBase桌子
社论:
本文将Hive与HBase整合在一起,使Hive能够读取HBase中的数据,让Hadoop生态系统中最为经常使用的两大框架互相结合。相得益彰。
写在前面二:
使用软件说明
约定全部软件的存放文件夹:
/home/yujianxin
一、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包
删除$HIVE_HOME/lib/下HBase、Zookeeper相关jar
rm -rf $HIVE_HOME/lib/zookeeper-*.jar rm -rf $HIVE_HOME/lib/hbase*.jar又一次拷贝
cp $HBASE_HOME/hbase-0.94.7-security.jar $HIVE_HOME/lib/ cp $HBASE_HOME/lib/zookeeper-3.4.5.jar $HIVE_HOME/lib/
2.2、改动$HIVE_HOME/conf/hive-site.xml
mkdir $HIVE_HOME/logs
在尾部加入
<property> <name>hive.querylog.location</name> <value>/home/yujianxin/hive/hive-0.9.0/logs</value> </property> <property> <name>hive.aux.jars.path</name> <value> file:///home/yujianxin/hive/hive-0.9.0/lib/hive-hbase-handler-0.9.0.jar, file:///home/yujianxin/hive/hive-0.9.0/lib/hbase-0.94.7-security.jar, file:///home/yujianxin/hive/hive-0.9.0/lib/zookeeper-3.4.5.jar </value> </property>改动
<property> <name>hive.zookeeper.quorum</name> <value>master,slave1,slave2</value> </property>2.3、拷贝hbase-0.94.7-security.jar到全部hadoop节点(包含master)的hadoop/lib下
cp $HBASE_HOME/hbase-0.94.7-security.jar $HADOOP_HOME/lib2.4、拷贝hbase/conf下的hbase-site.xml文件到全部hadoop节点(包含master)的hadoop/conf下
cp $HBASE_HOME/conf/hbase-site.xml $HADOOP_HOME/conf
三、启动、使用配置后Hive,測试是否配置成功
3.1、启动Hive
集群方式启动
hive --auxpath /home/yujianxin/hive/hive-0.9.0/lib/hive-hbase-handler-0.9.0.jar,/home/ yujianxin/hive/hive-0.9.0/lib/hbase-0.94.7-security.jar,/home/yujianxin/hive/hive-0.9. 0/lib/zookeeper-3.4.5.jar
能够将此启动Hive与HBase整合的命令写成Shell脚本,设置成开机启动
3.2、在Hive中创建HBase识别的表
CREATE TABLE hbase_hive_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");
hbase.table.name 定义在hbase中的table名称
多列时,data:1,data:2多列族时,data1:1,data2:1
hbase.columns.mapping 定义在hbase的列族,里面的:key 是固定值并且要保证在表pokes中的foo字段是唯一值
创建有分区的表
CREATE TABLE hbase_hive_2(key int, value string) partitioned by (day string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val") 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来建立联系
create external table hive_test (key int,gid map<string,string>,sid map<string,string>,uid map<string,string>) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" ="a:,b:,c:") TBLPROPERTIES ("hbase.table.name" = "test1");
查询gid字段中value值
Hive成功读取到HBase中的数据
情况二、假设hbase表test2中的字段为user:gid,user:sid,info:uid,info:level
在hive中建表语句为
CREATE EXTERNAL TABLE hive_test_2(key int,user map<string,string>,info map<string,string>) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" ="user:,info:") TBLPROPERTIES ("hbase.table.name" = "test2");
Hive成功读取到HBase中的数据
版权声明:本文博主原创文章,博客,未经同意不得转载。
相关文章
- Hbase rowkey设计原则,热点问题
- c# restsharp官网_hbase shell put
- Hive和Hbase集成及互相操作
- Flink开发-Hive数据导入HBase中
- hive与hbase对比
- HBase 1.3 发布,性能大幅提升详解数据库
- Hbase(五) hbase内部原理详解大数据
- Hbase(七)hbase高级编程详解大数据
- Hbase三Java,python操作Hbase详解大数据
- Hbase完全分布式集群安装配置(Hbase1.0.0,Hadoop2.6.0)详解大数据
- spring hadoop 访问hbase入门详解大数据
- hbase-1.2.1之协处理器的源码学习详解编程语言
- Spring Boot 2.x :通过 spring-boot-starter-hbase 集成 HBase
- 的迁 移Oracle数据库迁移至Hive:一次性完美实现!(oracle到hive)
- HBase vs. Oracle: A Comparison of Two Leading Database Management Systems(hbase和oracle)
- 使用Hive将数据导入MySQL(hive数据导入mysql)
- 运用Redis与HBase大幅度提升MongoDB性能(redishbase)
- 以Hive实现与Oracle灵活集成(hive集成oracle)
- Hive表数据迁移至Oracle(hive表转oracle)
- Hive备份Oracle数据库的重要性(hive备份oracle)
- 比较分析Hive与Oracle的异同(hive与oracle)
- Apache HBase MTTR 优化实践:减少恢复时长
- 谷歌 HBaseCon West 2017 大数据研讨会开幕在即,搞 Apache HBase 的开发者不可错过