Hive与HBase整合文档

耀灵5个月前技术文章126

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表中的数据。

相关文章

HDFS分层存储配置并使用(二)

HDFS分层存储配置并使用(二)

配置并使用HDFS分层存储修改DataNode数据目录,将1块SSD盘设置为SSD,1块设置为DISK,1块设置为ARCHIVE <property>     <name>d...

MySQL keepalived配置(一)

一、MySQL数据初始化1.1、创建ha元数据结构:create database myha;  use myha;CREATE TABLE `ha_conf` ( `id` int(11) NOT...

基于Jenkins和Kubernetes的CI/CD

基于Jenkins和Kubernetes的CI/CD

jenkins安装安装helm CRD编辑好yaml文件后直接安装即可k3s kubectl apply -f jenkins-crd.yaml查看我们安装好的helmchart crdk3s kub...

canal原理及使用

canal原理及使用

什么是canalcanal,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。这里我们可以简单地把canal理解为一个用来同步增量数据的一个工具。工作原理MySQL主备复制原理M...

Linux_ACL权限、mask值

acl权限在什么情况下使用:当要给一个用户与文件的属主、属组、其他人权限都不同的时候使用。也就是说,这个用户对应于这个文件不属于三个身份中的任何一种,是属于第四种身份,那么我们就需要使用acl权限去给...

Hive小文件合并

hive 小文件合并一、参数配置:在Map输入的时候, 把小文件合并.-- 每个Map最大输入大小,决定合并后的文件数 set mapred.max.split.size=256000000; -...

发表评论    

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