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/lib

2.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中的数据

Hive整合HBase——通过Hive读/写 HBase中的表

时间: 2024-10-17 10:27:22

Hive整合HBase——通过Hive读/写 HBase中的表的相关文章

Hive + HBase,用HQL查询HBase

Hive整合HBase:数据实时写Hbase,实现在Hive中用sql查询 以下操作的 Hive版本:2.3.6 ,HBase版本:2.0.4 在HBase中创建表:t_hbase_stu_info create 't_hbase_stu_info','st1' 在Hive中创建外部表:t_hive_stu_info create external table t_hive_stu_info (id int,name string,age int,sex string) stored by 'o

Hive 官方手册翻译 -- Hive DDL(数据定义语言)

Hive DDL(数据定义语言) Confluence Administrator创建, Janaki Lahorani修改于 2018年9月19日 原文链接 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL 翻译:Google Google翻译,金山软件 金山词霸 校对:南大通用 范振勇 (2018.9.26) 一.概述 这里是HiveQL DDL语句的文档,其中包括: CREATE 数据库/SCHEMA,表

HBase 与Hive数据交互整合过程详解

Hive和Hbase整合理论 1.为什么hive要和hbase整合 2.整合的优缺点 优点: (1).Hive方便地提供了Hive QL的接口来简化MapReduce的使用, 而HBase提供了低延迟的数据库访问.如果两者结合,可以利 用MapReduce的优势针对HBase存储的大量内容进行离线的计算和分析. (2).操作方便,hive提供了大量系统功能 缺点: 性能的损失,hive有这样的功能, 他支持通过类似sql语句的语法来操作hbase 中的数据, 但是速度慢. 3.整合需要做什么样的

Hbase与hive整合

//hive与hbase整合create table lectrure.hbase_lecture10(sname string, score int) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' whth serdeproperties("hbase.columns.mapping" = ':key,cf1:score')tblproperties("hbase.table.name"

创建hive整合hbase的表总结

[Author]: kwu 创建hive整合hbase的表总结,如下两种方式: 1.创建hive表的同步创建hbase的表 CREATE TABLE stage.hbase_news_company_content(key string comment "流水号", news_id string comment "新闻id", news_content string comment "文章内容") STORED BY 'org.apache.ha

大数据学习系列之五 ----- Hive整合HBase图文详解

引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环境,并进行了相应的测试.本文主要讲的是如何将Hive和HBase进行整合. Hive和HBase的通信意图 Hive与HBase整合的实现是利用两者本身对外的API接口互相通信来完成的,其具体工作交由Hive的lib目录中的hive-hbase-handler-*.jar工具类来实现,通信原理如下图

Hive 整合Hbase

摘要 Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询.同时也可以将hive表中的数据映射到Hbase中. ? ? 应用场景 2.1 将ETL操作的数据存入HBase ? ? ? ? ?? ? 2.2 HBase作为Hive的数据源 ? ? ? ? 2.3 构建低延时的数据仓库 环境准备 ? ? ? ? 3.1 hive与hbase整合环境配置 修改hive-site.xml文件,添加配置属性(zookeeper的地

Hadoop、HBase、Hive整合安装文档

前期准备(版本匹配): Hadoop 2.x is faster and includes features, such as short-circuit reads, which will help improve your HBase random read profile. Hadoop 2.x also includes important bug fixes that will improve your overall HBase experience. HBase 0.98 depr

Hadoop学习之HBase和Hive的区别

Hive是为简化编写MapReduce程序而生的,使用MapReduce做过数据分析的人都知道,很多分析程序除业务逻辑不同外,程序流程基本一样.在这种情况下,就需要Hive这样的用户编程接口.Hive本身不存储和计算数据,它完全依赖於HDFS和MapReduce,Hive中的表纯逻辑表,就是些表的定义等,也就是表的元数据.使用SQL实现Hive是因为SQL大家都熟悉,转换成本低,类似作用的Pig就不是SQL.   HBase为查询而生的,它通过组织起节点内所有机器的内存,提供一个超大的内存Has