五十五、HBase与Hive集成

上篇文章我们讲述了HBase中的协处理器并通过一个简单的示例实现了数据同步插入的问题,本文我们来看一下HBase与Hive的集成。关注专栏《破茧成蝶——大数据篇》,查看更多相关的内容~


目录

一、HBase与Hive集成的必要性

二、HBase与Hive集成

2.1 jar包拷贝

2.2 修改配置文件

三、案例

3.1 案例一

3.1.1 需求说明

3.1.2 需求实现

3.2 案例二

3.2.1 需求说明

3.2.2 需求实现


一、HBase与Hive集成的必要性

Hive是建立在Hadoop之上的数据仓库基础构架、是为了减少MapReduce编写工作的批处理系统,Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce。Hive可以理解为一个客户端工具,将我们的sql操作转换为相应的MapReduce jobs,然后在Hadoop上面运行。HBase全称为Hadoop Database,即HBase是Hadoop的数据库,是一个分布式的存储系统。HBase利用Hadoop的HDFS作为其文件存储系统,利用Hadoop的MapReduce来处理HBase中的海量数据。利用Zookeeper作为其协调工具。 HBase数据库的缺点在于——语法格式异类,没有类sql的查询方式,因此在实际的业务当中操作和计算数据非常不方便,但是Hive就不一样了,Hive支持标准的sql语法,于是我们就希望通过Hive这个客户端工具对HBase中的数据进行操作与查询,进行相应的数据挖掘,这就是所谓HBase与Hive集成的含义。

二、HBase与Hive集成

2.1 jar包拷贝

因为HBase与Hive集成,后续Hive操作会对HBase的表产生影响,所以Hive需要拷贝操作HBase的jar包,所以我们使用软链接将jar包链接到Hive中,如下所示。

export HBASE_HOME=/opt/modules/hbase
export HIVE_HOME=/opt/modules/hive

ln -s $HBASE_HOME/lib/hbase-common-1.3.1.jar  $HIVE_HOME/lib/hbase-common-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-server-1.3.1.jar $HIVE_HOME/lib/hbase-server-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-client-1.3.1.jar $HIVE_HOME/lib/hbase-client-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-protocol-1.3.1.jar $HIVE_HOME/lib/hbase-protocol-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-it-1.3.1.jar $HIVE_HOME/lib/hbase-it-1.3.1.jar
ln -s $HBASE_HOME/lib/htrace-core-3.1.0-incubating.jar $HIVE_HOME/lib/htrace-core-3.1.0-incubating.jar
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-1.3.1.jar $HIVE_HOME/lib/hbase-hadoop2-compat-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-1.3.1.jar $HIVE_HOME/lib/hbase-hadoop-compat-1.3.1.jar

2.2 修改配置文件

在hive-site.xml中添加如下配置:

<property>
  <name>hive.zookeeper.quorum</name>
  <value>master,slave01,slave02</value>
  <description>The list of ZooKeeper servers to talk to. This is only needed for read/write locks.</description>
</property>
<property>
  <name>hive.zookeeper.client.port</name>
  <value>2181</value>
  <description>The port of ZooKeeper servers to talk to. This is only needed for read/write locks.</description>
</property>

三、案例

3.1 案例一

3.1.1 需求说明

创建Hive表,同时关联HBase表,插入数据到Hive表的同时也可以在HBase中查看数据。

3.1.2 需求实现

1、创建Hive表,并同时关联HBase

CREATE TABLE hive_hbase_user(
id int,
name string,
sex string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:sex")
TBLPROPERTIES ("hbase.table.name" = "hbase_hive_user");

创建成功后,可以分别在Hive和HBase中查看到表已经创建成功:

2、在Hive中创建中间表,用于load文件中的数据。这里需要注意的是,不能将数据直接load进Hive所关联HBase的那张表中。

CREATE TABLE user_tmp(
id int,
name string,
sex string)
row format delimited fields terminated by ',';

3、向中间表中导入数据

load data local inpath '/root/files/user_tmp.txt' into table user_tmp;

4、通过insert命令将中间表中的数据导入到Hive关联HBase的那张表中

insert into table hive_hbase_user select * from user_tmp;

5、查看Hive和HBase中是否已经导入了数据

select * from hive_hbase_user;

scan 'hbase_hive_user'

3.2 案例二

3.2.1 需求说明

在HBase中已经存在了某张表(hbase_hive_user,案例一中的表),在Hive中创建一个外部表来关联映射HBase中的这张表,实现使用Hive来分析HBase的表数据。

3.2.2 需求实现

1、新建Hive外部表映射HBase中的表

CREATE EXTERNAL TABLE hive_hbase_user_outer(
id int,
name string,
sex string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:sex") 
TBLPROPERTIES ("hbase.table.name" = "hbase_hive_user");

2、查询外部表进行数据分析

select * from hive_hbase_user_outer;

 

好了,本文到此已经全部结束。你们在这个过程中遇到了什么问题,欢迎留言,让我看看你们遇到了什么问题~

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

象在舞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值