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

版权声明:本文为博主原创文章,转载请看下方转载要求! https://blog.csdn.net/dajiangtai007/article/details/79696853

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.zookeeper.quorum属性

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

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

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

修改hive-env.sh配置文件

1.4   启动Hive

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

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

2、  Hive整合HBase后使用

2.1 准备测试数据

(1)测试数据文件

创建测试文件course.csv

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

(2)数据加载到HDFS

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

查看hdfs文件目录

创建/hive-hbase/course目录

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

(3)创建Hive数据库

进入Hive Shell 客户端创建库course

(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';

(5)查看hive表数据

select * from course.testcourse;

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


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

进入Hive Shell 客户端执行

hive> use course;

hive> show tables;

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

进入HBase Shell 客户端执行

bin/hbase shell

2.3 加载数据

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

下面是对应的执行语句:

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

 

2.4 执行查询

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

select count(*) fromcourse.hbase_testcourse;


2.5 创建外部表

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

(1)创建HBase表

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

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

(2)插入数据

执行以下命令插入数据

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

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

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

(3)查看数据

执行扫描表操作

scan 'hbase_test'

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

 技术交流群:695520445

猜你喜欢

转载自blog.csdn.net/dajiangtai007/article/details/79696853