Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为

MapReduce任务进行运行。其优点学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,

十分适合数据仓库的统计分析。Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类.

Hive Hbase整合 见官网 Hive HBase Integration:https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration 。

具体步骤整理如下:

集成步骤:

hbase 版本为 0.96.0 hive 0.12.0

1,首先将hbase-0.94.6.1/ 目录下的  hbase-0.94.6.1.jar 和 hbase-0.94.6.1/lib下的 zookeeper-3.3.5.jar复制到hive/lib目录下。

注意:如果hive/lib下已经存在这两个文件的其他版本(例如zookeeper-3.3.3.jar),建议删除后使用hbase下的相关版本.

2,在hive/conf下hive-site.xml文件中添加如下的内容:

如果hive/conf 目录下没有hive-site.xml 则把此目录下的hive-default.xml.template拷贝一份并命名 为hive-site.xml。

<property><name>hive.aux.jars.path</name>  <value>file:///root/hive-0.11.0/lib/hive-hbase-handler-0.11.0.jar,file:///root/hive-0.11.0/lib/hbase-0.94.6.1.jar,file:///root/hive-0.11.0/lib/zookeeper-3.3.5.jar</value>
</property>

3. 拷贝hbase-0.96.0.jar到所有hadoop节点(包括master)的hadoop/lib下。

4. 拷贝hbase/conf下的hbase-site.xml文件到所有hadoop节点(包括master)的hadoop/conf下

注意,如果3,4两步跳过的话,运行hive时很可能出现如下错误:

FAILED: Error in metadata: MetaException(message:org.apache.hadoop.hbase.MasterNotRunningException: ubuntu.ubuntu-domain:60000
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getMaster(HConnectionManager.java:394)
    at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:83)
    at org.apache.hadoop.hive.hbase.HBaseStorageHandler.getHBaseAdmin(HBaseStorageHandler.java:74)
    at org.apache.hadoop.hive.hbase.HBaseStorageHandler.preCreateTable(HBaseStorageHandler.java:158)
    at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.createTable(HiveMetaStoreClient.java:344)

不要忘记第3 4步,我曾经忘了这一步  搞了半天!

现在可以尝试启动Hive了。

单节点启动:
1  > bin/hive -hiveconf hbase.master=localhost:60000

集群启动:
1 > bin/hive -hiveconf hbase.zookeeper.quorum=slave1,slave2,slave3,slave4

测试:

5,测试:

A, 建立关联表,这里我们要查询的表在hbase中已经存在所以,使用CREATE EXTERNAL TABLE来建立,如下:

 

CREATE EXTERNAL TABLE hbase_table_1(key string, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "data:1")
TBLPROPERTIES("hbase.table.name" = "hbase_test"); 

hbase.columns.mapping指向对应的列族;多列时,data:1,data:2;多列族时,data1:1,data2:1;

hbase.table.name指向对应的表;hbase_table_2(key string, value string),这个是关联表。

我们看一下HBase中要查询的表的结构:

 

    hbase(main):001:0> describe 'hbase_test'  DESCRIPTION                                                             ENABLED                                 {NAME => 'hbase_test', FAMILIES => [{NAME => 'data', COMPRESSION => 'NONE',  true                                    VERSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY                                          => 'false', BLOCKCACHE => 'true'}]}                                                                            1 row(s) in 0.0810 seconds  hbase(main):002:0>  

看一下Hbase表中的数据:

    hbase(main):002:0> scan 'hbase_test'  ROW                          COLUMN+CELL                                                                        row11                        column=data:1, timestamp=1300847098583, value=value11                               row12                       column=data:1, timestamp=1300849056637, value=value12                               row21                        column=data:2, timestamp=1300847106880, value=value21                               3 row(s) in 0.0160 seconds  hbase(main):003:0>   

列族:data:1、data:2两个, Key:row1、row12、row21,alue:value1、value12、value21

hbase_table_1(key string, value string)中对应的test表中的row,value字段对应的是hbase_test表中的value

现在可以来看看查询结果了。

我们在hive命令行中先查看一下hbase_table_1:

 

    hive> select * from hbase_table_1;  OK  row11    value11  row12   value12  Time taken: 0.197 seconds  hive>  

对比一下hbase_test表中的列族为data:1的数据:

row11                        column=data:1, timestamp=1300847098583, value=value11
row12                       column=data:1, timestamp=1300849056637, value=value12

和查询结果相符。

B,创建hbase识别的数据库:

CREATE TABLE test_hbase(key int, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "test_hive"); 

hbase.table.name 定义在hbase的table名称,hbase.columns.mapping 定义在hbase的列族。

在hbase中查看表是否创建成功:

hbase(main):004:0> list
TABLE    hbase_test
test_hive1 row(s) in 0.0110 secondshbase(main):005:0> describe 'test_hive'
DESCRIPTION                                          ENABLED                    {NAME => 'test_hive', FAMILIES => [{NAME => 'cf1',  true                       BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', CO                            MPRESSION => 'NONE', VERSIONS => '3', TTL => '21474                            83647', BLOCKSIZE => '65536', IN_MEMORY => 'false',                            BLOCKCACHE => 'true'}]}
1 row(s) in 0.0300 seconds

导入数据:
我们不能直接使用load data来将数据导入到刚才创建的test_hbase表中,我们可以通过insert overwrite的方式实现数据的插入。

insert overwrite table test_hbase select * from test_join1;

在HBase中查看通过hive导入的数据是否成功scan 'test_hive'。

scan 'test_hive'
ROW                   COLUMN+CELL                                               1                    column=cf1:val, timestamp=1331278861290, value=SF   2                    column=cf1:val, timestamp=1331278861290, value=DANE       3                    column=cf1:val, timestamp=1331278861290, value=WANG     4                    column=cf1:val, timestamp=1331278861290, value=JULY    5                    column=cf1:val, timestamp=1331278861260, value=EVA     6                    column=cf1:val, timestamp=1331278861260, value=USTC
6 row(s) in 0.6230 seconds

遇到的错误:

hive> show tables;

FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClientFAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

debug 模式重新启动 hive,  运行命令:

./hive -hiveconf hive.root.logger=DEBUG,console

运行命令:

hive> show tables;

出现下面类似的错误:

hive error xsdb6 hive another instance of derby may have already booted the

解决方法:

到 hive-0.11.0 目录下把文件 夹 metestore_db 删除,重新启动 hive 即可 解决问题。

不过也可以 不使用默认的内嵌数据库derby,采用mysql作为统计的存储信息。详情移步到

点击打开链接

好,先到这。

参考链接:

http://blog.csdn.net/daniel_ustc/article/details/12795627

http://blog.csdn.net/jiedushi/article/details/7325292

http://victorzhzh.iteye.com/blog/972406

转载于:https://www.cnblogs.com/qxwandy/p/3711018.html

hive 集成hbase 笔记相关推荐

  1. Hive集成HBase详解

    摘要 Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询 应用场景 1. 将ETL操作的数据存入HBase 2. HBas ...

  2. 2022-09-07 Hive集成HBase

    HQL 语法 一.Hive集成HBase <property><name>hive.zookeeper.quorum</name><value>hado ...

  3. Hive和HBase

    一.两者的定义 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,它的本质就是将SQL语句转换为MapReduce任务进行运行. HB ...

  4. 【华为云技术分享】如何整合hive和hbase

    引言  为什么要集成Hive和HBase Hive和Hbase在大数据架构中处在不同位置,Hive是一个构建在Hadoop基础之上的数据仓库,主要解决分布式存储的大数据处理和计算问题,Hive提供了类 ...

  5. Storm集成HBase、JDBC、Kafka、Hive测试

    /*** storm集成Kafka.Hive.JDBC.HBase.HDFS* Created by sker on 17-11-13* kafka集成storm,将数据发到JobBolt做中文分词逻 ...

  6. Storm集成HBase、JDBC、Kafka、Hive

    代码参上 /*** storm集成Kafka.Hive.JDBC.HBase.HDFS* Created by sker on 17-11-13* kafka集成storm,将数据发到JobBolt做 ...

  7. 十、Hadoop学习笔记————Hive与Hbase以及RDBMS(关系型数据库)的关系

    Hive目的是为了简化MapReduce编程 实际应用中,Hive与Hbase不经常链接 转载于:https://www.cnblogs.com/liuxiaopang/p/7791969.html

  8. hive与hbase集成

    环境: hadoop2.7.7 hive3.1.0 hbase2.0.2 1.jar包拷贝(之所以用这种方式,是因为这种方式最为稳妥,最开始用的软连接的方式,总是却少jar包)到hive的lib目录下 ...

  9. 大数据之-Hadoop3.x_了解一下hive和hbase的区别---大数据之hadoop3.x工作笔记0084

    全部都是文字,简单说一下自己的理解,hive和hbase都是基于hadoop的,但细节不同,对于开发来说,hive提供了类似sql的操作,支持jdbc,你写了sql以后他可以自己帮你转换为MapRed ...

最新文章

  1. DWR小结DWRUtil篇
  2. RESTful API的理解
  3. 10道关于Java泛型的面试题
  4. abap中的弹出窗口函数
  5. [云炬ThinkPython阅读笔记]3.4 增加新函数
  6. 电脑重装系统之后git pull报错 Permission denied (publickey)
  7. java中程序执行顺序
  8. c+gui语言可视化编程
  9. 12-1 定位(相对,绝对,固定)
  10. JavaScript解决e6不支持不支持max-width,max-height的问题的方法
  11. Oracle 等待事件(Wait Event):Sync ASM rebalance 解析
  12. 细说php第四版笔记,细说PHP 学习笔记(三)
  13. AirServer 7win/mac手机投屏到电脑工具
  14. MATLAB绘制地形图和等高线图
  15. 微信小程序通过”链接/文字/数字等等“生成二维码
  16. 【word小技巧】用WPS调整你的论文格式
  17. Python3——斐波那契数列
  18. Java的Random练习~~生成1~n之间的随机数
  19. js去掉最后一个逗号
  20. 支持JSP和Servlet的Web服务器

热门文章

  1. 初学视觉学习笔记----用摄像头获取图片
  2. ORA-15260: permission denied on ASM disk group
  3. 当Linux提权不能反弹Shell时利用metasploit进行提权
  4. python批量json文件转xml文件脚本(附代码)
  5. 【Java深入研究】9、HashMap源码解析(jdk 1.8)
  6. 使用mybatis generator 生成annotation形式的mapper
  7. HTML5 标签、事件句柄属性以及浏览器兼容情况速查手册
  8. 水滴石穿之IFRANME加载完成判断、获取函数的动态参数信息
  9. android 解决java.nio.BufferOverflowException 异常
  10. android 键盘的隐藏与显示