Spark大数据分析与实战笔记(第五章 HBase分布式数据库-05)

文章目录

每日一句正能量

一个人总有一天会明白,忌妒是无用的,而模仿他人无异于自杀。因为不论好坏,人只有自己才能帮助自己,只有耕种自己的田地,才能收获自家的玉米。上天赋予你的能力是独一无二的,只有当你自己努力尝试和运用时,才知道这份能力到底是什么。

第五章 HBase分布式数据库

章节概要

Spark计算框架是如何在分布式环境下对数据处理后的结果进行随机的、实时的存储呢?HBase数据库正是为了解决这种问题而应用而生。HBase数据库不同于一般的数据库,如MySQL数据库和Oracle数据库是基于行进行数据的存储,而HBase则是基于列进行数据的存储,这样的话,HBase就可以随着存储数据的不断增加而实时动态的增加列,从而满足Spark计算框架可以实时的将处理好的数据存储到HBase数据库中的需求。本章将针对HBase分布式数据库的相关知识进行详细讲解。

5.5 HBase和Hive的整合

在实际业务中,由于HBase不支持使用SQL语法,因此我们操作和计算HBase分布式数据库中的数据是非常不方便的,并且效率也低。由于Hive支持标准的SQL语句,因此,我们可以将HBase和Hive进行整合,通过使用Hive数据仓库操作HBase分布式数据库中的数据,以此来满足实际业务的需求。

通过一个整合Hive和HBase的例子,实现Hive表中插入的数据可以从HBase表中获取的需求,具体步骤如下:

1.环境搭建

首先,需要配置环境变量。在服务器hadoop01上执行命令"vi /ect/profile",配置Hive和HBase的环境变量(若已配置,则可忽略),具体内容如下:

java 复制代码
#配置HBase的环境变量
export HBASE_HOME=/export/servers/hbase-1.2.1
ecport PATH=$PATH:$HBASE_HOME/bin:
#配置Hive的环境变量
export HIVE_HOME=/export/servers/apache-hive-1.2.1-bin
export PATH=$PATH:$HIVE_HOME/bin:

结果如下图所示:

2.导入依赖

将目录/hbase-1.2.1/lib下的相关依赖复制一份到目录/apache-hive-1.2.1-bin/lib下,具体命令如下:

shell 复制代码
cp /export/servers/hbase-1.2.1/lib/hbase-common-1.2.1.jar \
/export/servers/apache-hive-1.2.1-bin/lib

cp /export/servers/hbase-1.2.1/lib/hbase-server-1.2.1.jar \
/export/servers/apache-hive-1.2.1-bin/lib

cp /export/servers/hbase-1.2.1/lib/hbase-client-1.2.1.jar \
/export/servers/apache-hive-1.2.1-bin/lib

cp /export/servers/hbase-1.2.1/lib/hbase-protocol-1.2.1.jar \
/export/servers/apache-hive-1.2.1-bin/lib

cp /export/servers/hbase-1.2.1/lib/hbase-it-1.2.1 \
/export/servers/apache-hive-1.2.1-bin/lib

cp /export/servers/hbase-1.2.1/lib/htrace-core-3.1.0-incubating.jar \
/export/servers/apache-hive-1.2.1-bin/lib

cp /export/servers/hbase-1.2.1/lib/hbase-hadoop2-compat-1.2.1.jar \
/export/servers/apache-hive-1.2.1-bin/lib/apache-hive-1.2.1-bin/lib

cp /export/servers/hbase-1.2.1/lib/hbase-hadoop-compat-1.2.1.jar \
/export/servers/apache-hive-1.2.1-bin/lib

上述导入了很多依赖,具体含义如下:

  • hbase-common-1.2.1.jar是HBase基本包;

  • hbase-server-1.2.1.jar主要用于HBase服务端;

  • hbase-client-1.2.1.jar主要用于HBase客户端;

  • hbase-protocol-1.2.1.jar主要用于HBase的通信;

  • hbase-it-1.2.1主要用于HBase整合其他框架做测试;

  • htrace-core-3.1.0-incubating.jar主要用于其他框架(如Hive或者Spark)连接HBase;

  • hbase-hadoop2-compat-1.2.1.jar和hbase-hadoop-compat-1.2.1.jar主要用于HBase可以兼容hadoop2和其他的hadoop版本。

3.修改相关配置文件

在/apache-hive-1.2.1-bin/conf目录下的hive-site.xml文件中,添加Zookeeper集群的地址并指定Zookeeper客户端的端口号,修改后的hive-site.xml文件内容如下:

xml 复制代码
<!--指定Zookeeper集群的地址---->
<property>
	<name>hive.zookeeper.quorum</name>
	<value>hadoop01,hadoop02,hadoop03</value>
</property>
<!--指定Zookeeper客户端的端口号---->
<property>
	<name>hive.zookeeper.client.port</name>
	<value>2181</value>
<property>

结果如下图所示:


执行命令"source /etc/profile",使配置的环境变量生效。

4.启动相关的服务

启动Zookeeper、Hadoop、MySQL、Hive以及HBase服务,具体命令如下:

shell 复制代码
# 启动Zookeeper
$ zkServer.sh start

# 启动hadoop
$ start-all.sh

#启动MySQL
$ service mysqld start

# 启动Hive
$ bin/hive

# 启动HBase
$ start-hbase.sh

运行结果如下:

5.新建Hive表

在Hive数据库创建hive_hbase_emp_tabel表,具体语句如下:

sql 复制代码
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");

在上述语句中,org.apache.hadoop.hive.hbase.HBaseStorageHandler类主要用于将Hive与HBase相关联,在Hive中创建的表会映射到HBase数据库中,并将映射到HBase数据库中的表命名为hbase_emp_table。

执行上述语句后,在Hive中,执行命令"show tables"查看是否出现表hive_hbase_emp_table;在HBase中,执行命令"list"来查看是否出现表hbase_emp_table,具体命令如下:

sql 复制代码
show tables;

list;

结果如下图所示:

从上述返回结果可看到,Hive中包含hive_hbase_emp_table表,HBase中包含hbase_emp_table表,说明Hive与HBase整合成功后,可以在Hive中创建与HBase相关联的表。

6.创建Hive临时中间表

由于不能将数据直接插入与HBase关联的Hive表hive_hbase_emp_table中,所以需要创建中间表emp,命令如下:

sql 复制代码
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';

上述命令执行成功后,在Hive中执行语句"show tables"查看Hive中数据表,具体语句如下:

sql 复制代码
show tables;

结果如下图所示:

从上述代码中可看出,Hive的临时中间表emp已经创建完成。

下面,我们就往临时中间表插入数据。插入数据之前需要在Linux本地系统上创建文件emp.txt(这里存放在目录/export/data下),且每个字段对应的数据都是勇Tab制表符分隔,若对应的字段没有数据,则用空格表示,具体内容如文件5-2所示。

文件5-1 emp.txt

复制代码
7369	SMITH	CLERK	7902	1980-12-17	800.00	20

7499	ALLEN	SALESMAN	7698	1981-2-20	1600.00	30000	30

7521	WARD	SALESMAN	7698	1981-2-22	1250.00 500.00	30

7566	JONES	MANAGER	7839	1981-4-2	2975.00	20

7654	MARTIN	SALESMAN	7698	1981-9-28	1250.00	1400.00	30

7698	BLAKE	MANAGER	7839	1981-5-1	2850.00	30

7782	CLARK	MANAGER	7839	1981-6-9	2450.00	10

7788	SCOTT	ANALYST	7566	1987-4-19	3000.00	20

7839	KING	PRESIDENT		1981-11-17	5000.00	10

7844	TURNER	SALESMAN	7698	1981-9-8	1500.00	0.00	30

7876	ADAMS	CLERK	7788	1987-5-23	1100.00	20

7900	JAMES	CLERK	7698	1981-12-3	950.00	30

7902	FORD	ANALYST	7566	1981-12-3	3000.00	20

7934	MILLER	CLERK	7782	1982-1-23	1300.00	10

7.插入数据

向临时中间表emp插入数据,具体语句如下:

sql 复制代码
hive>load data local inpath '/export/data/emp.txt' into table emp;

结果如下图所示:

通过insert命令将临时中间表emp中的数据导入到hive_hbase_emp_table表中,具体语句如下:

sql 复制代码
hive >insert into table hive_hbase_emp_table select * from emp;

结果如下图所示:

8.测试

通过查看hive_hbase_emp_table表和hbase_emp_table表的数据是否一致,则来判断HBase和Hive是否整合成功,具体语句如下:

sql 复制代码
hive> select * from hive_hbase_emp_table;
hbase> scan 'hbase_emp_table'

结果如下图所示:

转载自:https://blog.csdn.net/u014727709/article/details/152024580

欢迎 👍点赞✍评论⭐收藏,欢迎指正

相关推荐
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
肌肉娃子3 天前
20260227.spark.Spark 性能刺客:千万别在 for 循环里写 withColumn
spark
初次攀爬者3 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再4 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip