Hive和Hbase集成

一、HBase和Hive的比较

1.1 相同点

1、HBase 和 Hive 都是架构在 Hadoop 之上,用 HDFS 做底层的数据存储,用 MapReduce 做数据计算

1.2 不同点

1、Hive 是建立在 Hadoop 之上为了降低 MapReduce 编程复杂度的 ETL 工具。
HBase 是为了弥补 Hadoop 对实时操作的缺陷

2、Hive 表是纯逻辑表,因为 Hive 的本身并不能做数据存储和计算,而是完全依赖 Hadoop
HBase 是物理表,提供了一张超大的内存 Hash 表来存储索引,方便查询

3、Hive 是数据仓库工具,需要全表扫描,就用 Hive,因为 Hive 是文件存储
HBase 是数据库,需要索引访问,则用 HBase,因为 HBase 是面向列的 NoSQL 数据库

4、Hive 表中存入数据(文件)时不做校验,属于读模式存储系统
HBase 表插入数据时,会和 RDBMS 一样做 Schema 校验,所以属于写模式存储系统

5、Hive 不支持单行记录操作,数据处理依靠 MapReduce,操作延时高
HBase 支持单行记录的 CRUD,并且是实时处理,效率比 Hive 高得多

二、HBase与Hive集成使用

2.1、环境准备

2.1.1、hive和hbase的版本:

apache-hive-2.3.6-bin
hbase-1.4.10
*** 而且Hive2与Hbase1.x以上版本兼容。

2.1.2、将hbase相关jar包放置到hive的lib包下

在这里插入图片描述
在这里插入图片描述这个jar包在集成过程中必须要有,它是用于hive和hbase之间sql转换

2.1.3、在lib包下加完 集成jar 之后,指定目录

在hive的conf目录下,编辑hive-env.sh中的PATH目录
在这里插入图片描述

2.1.4 在 hive-site.xml 中修改zookeeper属性

<property>
  <name>hive.zookeeper.quorum</name>
  <value>hadoop102,hadoop103,hadoop104</value>     <!--当前hive所在的IP地址-->
</property>
<property>
  <name>hive.zookeeper.client.port</name>           <!--zookeeper端口号-->
  <value>2181</value>
</property>

2.2、集成的意义

hive就可以查询hbase的表,hive可以以面向sql的方式,结构化的查询语言来操作hbase表,从而进行查询和分析

三、案例

3.1没有hbase表,先创建hive表再自动生成hbase表

3.1.1、先在hive中创建一个表并关联hbase表

create table hive_hbase(id int,name string)   //hive表属性
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'    //所需jar包位置
with serdeproperties('hbase.columns.mapping'=':key,info:name')    //定义hbase表中的行键和列族
tblproperties ('hbase.table.name'='hbase_hive');      //对应hbase的表名

jar包所在位置
在这里插入图片描述

3.1.2、hive创建成功之后,hbase中会自动创建一个表

3.1.3、然后插入数据到Hive表的同时,HBase表会自动变化

不能直接往hive表中添加数据,需要建一个相同结构的表,然后再通过 insert ...  select ....  的格式加进hive表
 create table ls(id int,name string) row format delimited fields terminated by ",";
 load data local inpath "/root/data/stu.txt" into table ls;
 insert into hive_hbase select id,name from ls;

3.1.4、hive表中增加数据,相应hbase表中也会增加数据;hbase中增加数据,hive中也会相应增加数据(两表之间相互关联,共同变化)

3.1.5、删除hive表,那么与之关联的hbase也会相应删除

3.2、已经有hbase表了,然后再创建hive外部表表与hbase表关联

3.2.1、创建hive外部表与hbase相关联,关联之后会根据hbase的结构自动在hive中建一个表

create external table hive_hbase(id int,name string)   //hive表属性   external(外部表)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'    //所需jar包位置
with serdeproperties('hbase.columns.mapping'=':key,info:name')    //定义hbase表中的行键和列族
tblproperties ('hbase.table.name'='hbase_hive');      //对应hbase的表名

jar包所在位置
在这里插入图片描述

3.2.2、hbase中增加数据,hive中也会相应增加数据;但是hive表中增加数据,相应hbase表中 &不会& 增加数据;

3.2.3、hbase表删除之后hive表也会相应删除

发布了50 篇原创文章 · 获赞 30 · 访问量 7041

猜你喜欢

转载自blog.csdn.net/qq_44472134/article/details/104179909