Hive与HBase整合文档

耀灵2年前技术文章711

1.Hive整合HBase配置

1.拷贝hbase 相关jar包

hbase 相关jar包拷贝到hive lib目录下

hbase-client-0.98.13-hadoop2.jar
hbase-common-0.98.13-hadoop2.jar
hbase-server-0.98.13-hadoop2.jar
hbase-common-0.98.13-hadoop2-tests.jar
hbase-protocol-0.98.13-hadoop2.jar
htrace-core-2.04.jar
hive-hbase-handler-1.0.0.jar
zookeeper-3.4.5.jar



2.修改hive-site.xml配置文件

将上述jar包添加到hive-site.xml配置的hive.aux.jars.path属性中。

1.png


修改hive.zookeeper.quorum属性

2.png

  添加hbase.zookeeper.quorum属性,此属性hive-site.xml之前不存在。

3.png


3.修改hive-env.sh配置文件

同默认配置文件中copy一份hive-env.sh文件

4.png


修改hive-env.sh配置文件

5.png




2.启动Hive

上述配置完成之后,通过bin/hive命令启动hive

6.png


如果出现以上输出信息,说明hive整合hbase成功。


3.Hive整合HBase后使用

(1)测试数据文件

创建测试文件course.csv

7.png

(2)数据加载到HDFS


在hdfs文件系统中创建hive-hbase目录,并加载测试数据。

查看hdfs文件目录


8.png


创建/hive-hbase/course目录

9.png

将course.csv文件上传至/hive-hbase/course目录下

10.png


(3)创建Hive数据库

进入Hive Shell 客户端创建库course


11.png

(4)创建Hive表

进入Hive Shell 客户端创建外部表。

create external table if not exists course.testcourse(cname string,score int) row format delimited fields terminated by '\t' stored as textfile location '/hive-hbase/course';


12.png


(5)查看Hive表数据

select * from course.testcourse;

13.png

从查询语句的执行结果可以看出,Hive表中的数据和hdfs上的数据一致。

2.2 创建Hive内部表

create table 建表语句声明

course.hbase_testcourse 所创建的Hive表名称

(cname string,score int) 所创建Hive表字段

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 指定使用Hive Storage Handlers

WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,cf:score") 指定HBase表与Hive表字段映射关系。TBLPROPERTIES("hbase.table.name" = "hbase_testcourse"); 指定HBase表名

内部表创建语句如下:

create table course.hbase_testcourse(cname string,score int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,cf:score") TBLPROPERTIES("hbase.table.name" = "hbase_testcourse", "hbase.mapred.output.outputtable" = "hbase_testcourse");


14.png


1、查看Hive中所创建的表

进入Hive Shell 客户端执行

hive> use course;

hive> show tables;

15.png


2、查看HBase 中所创建的表

进入HBase Shell 客户端执行

bin/hbase shell

16.png


17.png

创建完内部表,可以通过Hive支持的insert overwrite 方式将一个表的数据导入HBase。

下面是对应的执行语句:

insert overwrite table course.hbase_testcourse select cname,score from course.testcourse;


18.png

2.4执行查询

加载完数据后,需要验证一下加载结果是否存在问题,验证一下总记录数。

select count(*) from course.hbase_testcourse;

20.png


2.5创建外部表

创建外部表适用于该表在HBase中已经存在,但在Hive中并没有相关信息。此时可以通过创建外部表的方式,为HBase现有表提供SQL查询条件。而内部表适用于Hive和HBase都没有相关表的情况。

创建HBase

进入HBase Shell客户端执行建表命令

create 'hbase_test',{ NAME => 'cf'}

21.png




执行以下命令插入数据

put 'hbase_test', 'hadoop','cf:score', '95'

put 'hbase_test', 'storm','cf:score', '96'

put 'hbase_test', 'spark','cf:score', '97'


22.png

执行扫描表操作

scan 'hbase_test'

23.png



4、创建Hive外部表

进入Hive Shell 客户端,创建外部表course.hbase_test,建表命令如下所示:

create external table course.hbase_test(cname string,score int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,cf:score") TBLPROPERTIES("hbase.table.name" = "hbase_test", "hbase.mapred.output.outputtable" = "hbase_test");

备注:创建外部表和创建内部表的命令基本一致,唯一的区别就是:创建内部表使用create table,创建外部表使用create external table。


24.png


Hive 查看数据

执行Hive命令查询HBase 表中的数据。

select * from hbase_test;


25.png


通过创建外部表可以成功从Hive 查询HBase表中的数据。

相关文章

oracle adg容灾切换需要注意的参数

1.DG角色在线转换1.1 角色(主备)和DG有关的角色:primary database 主库,在线服务应用physical standby database 备库,物理备库,在线备份主库数据与主库...

xargs-管道命令符

有时候我们的脚本却需要 echo '516' | kill 这样的效果,例如 ps -ef | grep 'ddd' | kill 这样的效果,筛选出符合某条件的进程pid然后结束。这种需求对于我们来...

K8S中 CNI 插件的解读

K8S中 CNI 插件的解读

一.CNI是什么首先我们介绍一下什么是 CNI,它的全称是 Container Network Interface,即容器网络的 API 接口。它是 K8s 中标准的一个调用网络实现的接口。Kubel...

EMR-flinksql运行失败问题

EMR-flinksql运行失败问题

运行flinksqlsql-client.sh报错:[root@emr1 bin]# ./sql-client.shSLF4J: Class path contains multiple SLF4J...

Doris资源管理

资源管理为了节省Doris集群内的计算、存储资源,Doris需要引入一些其他外部资源来完成相关的工作,如Spark/GPU用于查询,HDFS/S3用于外部存储,Spark/MapReduce用于ETL...

dbms_support包跟踪10046

系统默认没有安装dbms_support这个包,可以手动执行$ORACLE_HOME/rdbms/admin/dbmssupp.sql脚本来创建该包。安装dbms_support包: SQL>...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。