三-3, HBase 与 Hive 交互

三-3, HBase 与 Hive 交互

3.1 HBase 与 Hive 的对比

[Hive]

梗概 详述
1. 数据仓库 Hive 的本质其实就相当于将 HDFS 中已经存储的文件在 Mysql 中做了一个双射关系,以
方便使用 HQL 去管理查询。
2. 用于数据分析,清洗 Hive 适用于离线的数据分析和清洗,延迟较高。
3. 基于HDFS,MapReduce Hive 存储的数据依旧在 DataNode 上,编写的 HQL 语句终将是转换为 MapReduce 代码执
行。

[HBse]

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

3.2 HBase 与Hive 集成使用

[环境准备]

  • 如果有一些数据存储在hbase 当中 我们想通过sql 析其中的数据, 那么把hbase与hive 集成就是一个不错的方法,本质上来说就是hive 充当了hbase的客户端。
  • 后续我们需要实现在hive中建表,同时hbase也会出现这张表, 所以我们需要hive 持有hbase的jar包依赖.

A要使用 B,那么A要有B的jar包。例如:在 Hive的安装中,Hive需要使用到MySQL数据库,所以将jdbc驱动包放到lib文件夹中

  1. 通过软链接, 让hbase的lib目录持有一个到${HBASE_HOME}/hbase-2.3.7/lib目录的映射, 首先我们cd到/opt/module/hive-3.1.2/lib目录下,执行软链接命令
ln -s /opt/module/hbase-2.3.7/lib
  • 在当前目录下发送指令ll, 会有以下内容, 说明链接成功
    在这里插入图片描述
  1. 其他组件访问HBase时, 首先要访问的便是zookeeper, hive也不例外. 所以hive的hive-site.xml文件中还要引入连接zk相关的配置:
<!---配置zookeeper的地址用于访问hbase-->
<property>
<name>hive.zookeeper.quorum</name>
<value>bigdata01,bigdata02,bigdata03</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.3. 案例一, 向Hive中插入数据,同步到HBase中

[目标]

  • 建立 Hive 表,关联 HBase 表,插入数据到 Hive 表的同时能够影响 HBase 表。

[方法]

  1. 在HIVE中建表,同时加上关联HBse 的相关语句
CREATE TABLE hive_hbase_emp_table(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES("hbase.columns.mapping"=
":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno") 
TBLPROPERTIES ("hbase.table.name" = "hbase_emp_table");
  • 在hive中完成上面的命令后, 在hbase和hive中理应当都含有该表;
  1. 在 Hive 中创建临时中间表,用于 load 文件中的数据. 不能将数据直接 load 进 Hive 所关联 HBase 的那张表中
CREATE TABLE emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)
row format delimited fields terminated by '\t';
  1. 向 Hive 中间表中 load 数据
hive> load data local inpath '/opt/module/data/hive-data/input/emp.txt' into table emp;
  1. 通过 insert 命令将中间表中的数据导入到 Hive 关联 Hbase 的那张表中
hive> insert into table hive_hbase_emp_table select * from emp;
  1. 查看 Hive 以及关联的 HBase 表中是否已经成功的同步插入了数据
#Hive:
hive> select * from hive_hbase_emp_table;

#HBase:
Hbase> scan ‘hbase_emp_table’

3.4 案例二,

目标:在 HBase 中已经存储了某一张表 hbase_emp_table,然后在 Hive 中创建一个外部表来
关联 HBase 中的 hbase_emp_table 这张表,使之可以借助 Hive 来分析 HBase 这张表中的数
据。
注:该案例 2 紧跟案例 1 的脚步,所以完成此案例前,请先完成案例 1。

  1. 在 Hive 中创建外部表
CREATE EXTERNAL TABLE relevance_hbase_emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)
STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" =
":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:co
mm,info:deptno")
TBLPROPERTIES ("hbase.table.name" = "hbase_emp_table");
  1. 关联后就可以使用 Hive 函数进行一些分析操作了
hive (default)> select * from relevance_hbase_emp;
no")
TBLPROPERTIES ("hbase.table.name" = "hbase_emp_table");
  1. 关联后就可以使用 Hive 函数进行一些分析操作了
hive (default)> select * from relevance_hbase_emp;

猜你喜欢

转载自blog.csdn.net/nmsLLCSDN/article/details/121593711