HBase集成Hive

1. HBase集成Hive

  • Hive提供了与HBase的集成,使得能够在HBase表上使用hive sql 语句进行查询、插入操作以及进行Join和Union等复杂查询,同时也可以将hive表中的数据映射到Hbase中

1.1 HBase与Hive的对比

1.1.1 Hive

  • 数据仓库
  • 用于数据分析、清洗:Hive适用于离线的数据分析和清洗,延迟较高
  • 基于HDFS、MapReduce:Hive存储的数据依旧在DataNode上,编写的hql语句会转换成MapReduce代码执行;

1.1.2 HBase

  • 数据库:面向列存储的非关系型数据库
  • 用于存储结构化和非结构话的数据:适用于单表非关系型数据的存储,不适合做关联查询。
  • 基于HDFS
  • 数据持久化的是Hfile,存放于DataNode中,被ResionServer以region的形式进行管理。
  • 延迟较低,接入在线业务使用
  • HBase可以直线单表大量数据的存储,同时提供了高效的数据访问速度。

1.1.3 总结:Hive与HBase

  • Hive和Hbase是两种基于Hadoop的不同技术,Hive是一种类SQL的引擎并且运行MapReduce任务Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。这两种工具是可以同时使用的。Hive可以用来进行统计查询HBase可以用来进行实时查询,数据也可以从Hive写到HBase,或者从HBase写回Hive。

1.2 整合配置

1.2.1 拷贝jar包

  • 将HBase的五个jar包拷贝到hive的lib目录下
  • hbase的jar包都在/install/hbase-1.2.0-cdh5.14.2/lib
  • 需要拷贝五个jar包名字如下

hbase-client-1.2.0-cdh5.14.2.jar                  
hbase-hadoop2-compat-1.2.0-cdh5.14.2.jar
hbase-hadoop-compat-1.2.0-cdh5.14.2.jar  
hbase-it-1.2.0-cdh5.14.2.jar    
hbase-server-1.2.0-cdh5.14.2.jar

  • 我们直接在node03执行以下命令,通过创建软连接的方式来进行jar包的依赖

ln -s /install/hbase-1.2.0-cdh5.14.2/lib/hbase-client-1.2.0-cdh5.14.2.jar              /install/hive-1.1.0-cdh5.14.2/lib/hbase-client-1.2.0-cdh5.14.2.jar   

ln -s /install/hbase-1.2.0-cdh5.14.2/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.2.jar      /install/hive-1.1.0-cdh5.14.2/lib/hbase-hadoop2-compat-1.2.0-cdh5.14.2.jar             
ln -s /install/hbase-1.2.0-cdh5.14.2/lib/hbase-hadoop-compat-1.2.0-cdh5.14.2.jar       /install/hive-1.1.0-cdh5.14.2/lib/hbase-hadoop-compat-1.2.0-cdh5.14.2.jar            
ln -s /install/hbase-1.2.0-cdh5.14.2/lib/hbase-it-1.2.0-cdh5.14.2.jar     /install/hive-1.1.0-cdh5.14.2/lib/hbase-it-1.2.0-cdh5.14.2.jar    

ln -s /install/hbase-1.2.0-cdh5.14.2/lib/hbase-server-1.2.0-cdh5.14.2.jar          /install/hive-1.1.0-cdh5.14.2/lib/hbase-server-1.2.0-cdh5.14.2.jar  

1.2.2 修改hive的配置文件

  • 编辑node03服务器上面的hive的配置文件hive-site.xml

cd /install/hive-1.1.0-cdh5.14.2/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>

1.2.3 修改hive-env.sh配置文件

cd /install/hive-1.1.0-cdh5.14.2/conf
vim hive-env.sh

  • 添加以下配置

export HADOOP_HOME=/install/hadoop-2.6.0-cdh5.14.2/

export HBASE_HOME=/install/servers/hbase-1.2.0-cdh5.14.2
export HIVE_CONF_DIR=/install/hive-1.1.0-cdh5.14.2/conf

 

1.3 需求一:将hive表当中分析的结果保存到hbase表当中去

1.3.1 hive当中建表

  • node03执行以下命令,进入hive客户端,并创建hive表

cd /install/hive-1.1.0-cdh5.14.2/
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 ;

1.3.2 准备数据内容如下并加载到hive表

  • node03执行以下命令,创建数据文件

cd /install/
mkdir hivedatas

cd /install/hivedatas
vim hive-hbase.txt

文件内容如下

1 zhangsan 80
2 lisi 60
3 wangwu 30
4 zhaoliu 70

  • 进入hive客户端进行加载数据

hive (course)> load data local inpath '/install/hivedatas/hive-hbase.txt' into table score;
hive (course)> select * from score;

1.3.3 创建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;

1.3.4 hbase当中查看表hbase_score

  • 进入hbase的客户端查看表hbase_score,并查看当中的数据

hbase(main):023:0> list

TABLE 

hbase_score                                                            

myuser                                                                 

myuser2                                                               

 student                                                              

  user                                                                  

 5 row(s) in 0.0210 seconds
=> ["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

1.4 需求二:创建hive外部表,映射HBase当中已有的表模型

1.4.1 HBase当中创建表并手动插入加载一些数据

  • 进入HBase的shell客户端,

bin/hbase shell

  • 手动创建一张表,并插入加载一些数据进去

# 创建一张表
create 'hbase_hive_score',{ NAME =>'cf'}
# 通过put插入数据到hbase表
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'

1.4.2 建立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");

  • 查看hive表course.hbase2hive

select * from course.hbase2hive;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值