Hive整合HBase完整笔记(亲测)

Hive与HBase整合文档

1、  Hive整合HBase配置

1.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

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

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

Hive整合HBase完整笔记(亲测)_第1张图片

   修改hive.zookeeper.quorum属性

Hive整合HBase完整笔记(亲测)_第2张图片

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

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

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

Hive整合HBase完整笔记(亲测)_第3张图片

修改hive-env.sh配置文件

1.4   启动Hive

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

Hive整合HBase完整笔记(亲测)_第4张图片

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

2、  Hive整合HBase后使用

2.1 准备测试数据

(1)测试数据文件

创建测试文件course.csv

Hive整合HBase完整笔记(亲测)_第5张图片

第一列为课程名称,第二列为课程分数

(2)数据加载到HDFS

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

查看hdfs文件目录

Hive整合HBase完整笔记(亲测)_第6张图片

创建/hive-hbase/course目录

Hive整合HBase完整笔记(亲测)_第7张图片

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

Hive整合HBase完整笔记(亲测)_第8张图片

(3)创建Hive数据库

进入Hive Shell 客户端创建库course

Hive整合HBase完整笔记(亲测)_第9张图片

(4)创建Hive表

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

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

Hive整合HBase完整笔记(亲测)_第10张图片

(5)查看hive表数据

select * from course.testcourse;

Hive整合HBase完整笔记(亲测)_第11张图片

从查询语句的执行结果可以看出,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

WITHSERDEPROPERTIES("hbase.columns.mapping" = ":key,cf:score")  指定HBase表与Hive表字段映射关系。

TBLPROPERTIES("hbase.table.name"= "hbase_testcourse"); 指定HBase表名

内部表创建语句如下:

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

Hive整合HBase完整笔记(亲测)_第12张图片

(1)查看Hive中所创建的表

进入Hive Shell 客户端执行

hive> use course;

hive> show tables;

Hive整合HBase完整笔记(亲测)_第13张图片

(2)查看HBase 中所创建的表

进入HBase Shell 客户端执行

bin/hbase shell

Hive整合HBase完整笔记(亲测)_第14张图片

Hive整合HBase完整笔记(亲测)_第15张图片

2.3 加载数据

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

下面是对应的执行语句:

insert overwrite table course.hbase_testcourseselect cname,score from course.testcourse;

 Hive整合HBase完整笔记(亲测)_第16张图片

2.4 执行查询

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

select count(*) fromcourse.hbase_testcourse;

Hive整合HBase完整笔记(亲测)_第17张图片

Hive整合HBase完整笔记(亲测)_第18张图片

2.5 创建外部表

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

(1)创建HBase表

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

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

Hive整合HBase完整笔记(亲测)_第19张图片

(2)插入数据

执行以下命令插入数据

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

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

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

Hive整合HBase完整笔记(亲测)_第20张图片

(3)查看数据

执行扫描表操作

scan 'hbase_test'

Hive整合HBase完整笔记(亲测)_第21张图片

(4)创建Hive外部表

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

create external tablecourse.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。

(5)Hive 查看数据

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

select * from hbase_test;

Hive整合HBase完整笔记(亲测)_第22张图片

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

 技术交流群:695520445

你可能感兴趣的:(Hadoop,hbase,Hive)