Hive与HBase整合文档

Hive与HBase整合文档

  1. Hive整合HBase配置
  2. 拷贝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

file:///home/hadoop/app/hive/lib/hbase-client-2.2.2.jar,

file:///home/hadoop/app/hive/lib/hbase-common-2.2.2.jar,

file:///home/hadoop/app/hive/lib/hbase-common-2.2.2-tests.jar,

file:///home/hadoop/app/hive/lib/hbase-protocol-2.2.2.jar,

file:///home/hadoop/app/hive/lib/hbase-server-2.2.2.jar

 

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

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

     修改hive.zookeeper.quorum属性

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

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

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

修改hive-env.sh配置文件

  1. 启动Hive

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

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

  1. 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 not exists course.testcourse(cname string,score int) row format delimited fields terminated 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

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");

  1. 查看Hive中所创建的表

进入Hive Shell 客户端执行

hive> use course;

hive> show tables;

  1. 查看HBase 中所创建的表

进入HBase Shell 客户端执行

bin/hbase shell

2.3 加载数据

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

下面是对应的执行语句:

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

 

2.4 执行查询

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

select count(*) from course.hbase_testcourse;

2.5 创建外部表

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

  1. 创建HBase

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

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

  1. 插入数据

执行以下命令插入数据

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

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

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

  1. 查看数据

执行扫描表操作

scan 'hbase_test'

  1. 创建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。

  1. Hive 查看数据

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

select * from hbase_test;

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

posted @ 2020-12-15 00:24  Simon92  阅读(114)  评论(0编辑  收藏  举报