HBase集成Hive

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

1 HBase与Hive的对比

1.1 Hive

  • 数据仓库管理系统
    Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做了一个双射关系,以方便使用HQL去管理查询。
  • 用于数据分析、清洗
    Hive适用于离线的数据分析和清洗,延迟较高
  • 基于HDFS、MapReduce(或者其他计算引擎如:Tez、Spark)
    Hive存储的数据依旧在DataNode上,编写的HQL语句终将是转换为MapReduce代码执行。(不要钻不需要执行MapReduce代码的情况的牛角尖)

1.2 HBase

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

1.3 总结:Hive与HBase

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

我们来做2个小案例,Hive中表数据导入到Hbase中,Hbase中的表数据导入到Hive
注意:请确保安装Hadoop、zookeeper、hive、hbase、mysql,具体安装过程请查看其他博客文章

hadoop01 hadoop02 hadoop03
namenode x
secondnamenode x
datanode x x x
yarn x
zk x x x
Hive x
Hbase x
mysql x

Hive整合Hbase

1 拷贝jar包
  • 将我们HBase的五个jar包拷贝到Hive的lib目录下
  • Hbase的jar包都在/bigdata/install/hbase-2.2.6/lib
  • 我们需要拷贝五个jar包名字如下
hbase-client-2.2.6.jar
hbase-hadoop2-compat-2.2.6.jar
hbase-hadoop-compat-2.2.6.jar
hbase-it-2.2.6.jar
hbase-server-2.2.6.jar
  • 在hadoop02执行以下命令
cd  /bigdata/install/hbase-2.2.6/lib
cp hbase-protocol-2.2.6.jar   /bigdata/install/hive-3.1.2/lib/
cp hbase-server-2.2.6.jar  /bigdata/install/hive-3.1.2/lib/
cp hbase-client-2.2.6.jar  /bigdata/install/hive-3.1.2/lib/                 
cp hbase-common-2.2.6.jar   /bigdata/install/hive-3.1.2/lib/                      
cp hbase-common-2.2.6-tests.jar   /bigdata/install/hive-3.1.2/lib/  
2 修改hive的配置文件
  • 编辑hadoop02服务器上面的Hive的配置文件hive-site.xml
cd /bigdata/install/hive-3.1.2/conf
vim hive-site.xml
  • 添加以下两个属性的配置
<property>
	<name>hive.zookeeper.quorum</name>
	<value>hadoop01,hadoop02,hadoop03</value>
</property>	
<property>
	<name>hbase.zookeeper.quorum</name>
	<value>hadoop01,hadoop02,hadoop03</value>
</property>
3 修改hive-env.sh配置文件
cd /bigdata/install/hive-3.1.2/conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
  • 添加以下配置
export HADOOP_HOME=/bigdata/install/hadoop-3.1.4
export HBASE_HOME=/bigdata/install/hbase-2.2.2
export HIVE_CONF_DIR=/bigdata/install/hive-3.1.2/conf

Hive中表数据导入到Hbase

1 Hive当中建表
  • hadoop02执行以下命令,进入Hive客户端,并创建Hive表
cd /bigdata/install/hive-3.1.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 ;
2 准备数据内容如下并加载到Hive表
  • hadoop02执行以下命令,创建数据文件
cd /bigdata/install/
mkdir docouments

cd /bigdata/install/docouments
vim hive-hbase.txt
  • 文件内容如下
1	zhangsan	80
2	lisi	60
3	wangwu	30
4	zhaoliu	70
  • 进入Hive客户端进行加载数据
hive (course)> load data local inpath '/bigdata/install/docouments/hive-hbase.txt' into table score;
hive (course)> select * from score;
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;
4 Hbase当中查看表hbase_score
  • 进入Hbase的客户端查看表hbase_score,并查看当中的数据

创建Hive外部表,映射HBase当中已有的表模型

1 HBase当中创建表并手动插入加载一些数据
  • 进入HBase的shell客户端,
bin/hbase shell
  • 手动创建一张表,并插入加载一些数据进去
# 创建一张表
# 通过put插入数据到hbase表
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'
  • 查看以下HBase当中hbase_hive_score表的数据
2 建立hive的外部表,映射HBase当中的表以及字段
  • 进入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;

posted @ 2021-06-13 23:26  Tenic  阅读(115)  评论(0编辑  收藏  举报