Hadoop Hive与Hbase关系 整合

用hbase做数据库,但因为hbase没有类sql查询方式,所以操作和计算数据很不方便,于是整合hive,让hive支撑在hbase数据库层面 的 hql查询.hive也即 做数据仓库

1. 基于Hadoop+Hive架构对海量数据进行查询:http://blog.csdn.net/kunshan_shenbin/article/details/7105319

2. HBase 0.90.5 + Hadoop 1.0.0 集成:http://blog.csdn.net/kunshan_shenbin/article/details/7209990

本文的目的是要讲述怎样让Hbase和Hive能互相訪问,让Hadoop/Hbase/Hive协同工作,合为一体。

本文測试步骤主要參考自:http://running.iteye.com/blog/898399

当然,这边博文也是依照官网的步骤来的:http://wiki.apache.org/hadoop/Hive/HBaseIntegration

1. 拷贝hbase-0.90.5.jar和zookeeper-3.3.2.jar到hive/lib下。

注意:怎样hive/lib下已经存在这两个文件的其它版本号(比如zookeeper-3.3.1.jar),建议删除后使用hbase下的相关版本号。

2. 改动hive/conf下hive-site.xml文件,在底部加入例如以下内容:

[html] view plaincopy

<!--

<property>

<name>hive.exec.scratchdir</name>

<value>/usr/local/hive/tmp</value>

</property>

-->

<property>

<name>hive.querylog.location</name>

<value>/usr/local/hive/logs</value>

</property>

<property>

<name>hive.aux.jars.path</name>

<value>file:///usr/local/hive/lib/hive-hbase-handler-0.8.0.jar,file:///usr/local/hive/lib/hbase-0.90.5.jar,file:///usr/local/hive/lib/zookeeper-3.3.2.jar</value>

</property>

注意:假设hive-site.xml不存在则自行创建,或者把hive-default.xml.template文件改名后使用。

详细请參见:http://blog.csdn.net/kunshan_shenbin/article/details/7210020

3. 拷贝hbase-0.90.5.jar到全部hadoop节点(包含master)的hadoop/lib下。

4. 拷贝hbase/conf下的hbase-site.xml文件到全部hadoop节点(包含master)的hadoop/conf下。

注意,hbase-site.xml文件配置信息參照:http://blog.csdn.net/kunshan_shenbin/article/details/7209990

注意,假设3,4两步跳过的话,执行hive时非常可能出现例如以下错误:

[html] view plaincopy

org.apache.hadoop.hbase.ZooKeeperConnectionException: HBase is able to connect to ZooKeeper but the connection closes immediately.

This could be a sign that the server has too many connections (30 is the default). Consider inspecting your ZK server logs for that error and

then make sure you are reusing HBaseConfiguration as often as you can. See HTable‘s javadoc for more information. at org.apache.hadoop.

hbase.zookeeper.ZooKeeperWatcher.

參考:http://blog.sina.com.cn/s/blog_410d18710100vlbq.html

如今能够尝试启动Hive了。

单节点启动:

> bin/hive -hiveconf hbase.master=master:60000

集群启动:

> bin/hive -hiveconf hbase.zookeeper.quorum=slave

怎样hive-site.xml文件里没有配置hive.aux.jars.path,则能够依照例如以下方式启动。

> bin/hive --auxpath /usr/local/hive/lib/hive-hbase-handler-0.8.0.jar, /usr/local/hive/lib/hbase-0.90.5.jar, /usr/local/hive/lib/zookeeper-3.3.2.jar -hiveconf hbase.zookeeper.quorum=slave

接下来能够做一些測试了。

1.创建hbase识别的数据库:

[sql] view plaincopy

CREATE TABLE hbase_table_1(key int, value string)

STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler‘

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")

TBLPROPERTIES ("hbase.table.name" = "xyz");

hbase.table.name 定义在hbase的table名称

hbase.columns.mapping 定义在hbase的列族

2.使用sql导入数据

a) 新建hive的数据表

[sql] view plaincopy

<span><span></span></span>hive> CREATE TABLE pokes (foo INT, bar STRING);

b) 批量插入数据

[sql] view plaincopy

hive> LOAD DATA LOCAL INPATH ‘./examples/files/kv1.txt‘ OVERWRITE INTO TABLE

pokes;

c) 使用sql导入hbase_table_1

[sql] view plaincopy

hive> INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=86;

3. 查看数据

[sql] view plaincopy

hive> select * from  hbase_table_1;

这时能够登录Hbase去查看数据了.

> /usr/local/hbase/bin/hbase shell

hbase(main):001:0> describe ‘xyz‘

hbase(main):002:0> scan ‘xyz‘

hbase(main):003:0> put ‘xyz‘,‘100‘,‘cf1:val‘,‘www.360buy.com‘

这时在Hive中能够看到刚才在Hbase中插入的数据了。

hive> select * from hbase_table_1

4. hive訪问已经存在的hbase

使用CREATE EXTERNAL TABLE

[sql] view plaincopy

CREATE EXTERNAL TABLE hbase_table_2(key int, value string)

STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler‘

WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf1:val")

TBLPROPERTIES("hbase.table.name" = "some_existing_table");

多列和多列族(Multiple Columns and Families)

1.创建数据库

Java代码

CREATE TABLE hbase_table_2(key int, value1 string, value2 int, value3 int)

STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler‘

WITH SERDEPROPERTIES (

"hbase.columns.mapping" = ":key,a:b,a:c,d:e"

);

2.插入数据

Java代码

INSERT OVERWRITE TABLE hbase_table_2 SELECT foo, bar, foo+1, foo+2

FROM pokes WHERE foo=98 OR foo=100;

这个有3个hive的列(value1和value2,value3),2个hbase的列族(a,d)

Hive的2列(value1和value2)相应1个hbase的列族(a,在hbase的列名称b,c),hive的另外1列(value3)相应列(e)位于列族(d)

3.登录hbase查看结构

Java代码

hbase(main):003:0> describe "hbase_table_2"

DESCRIPTION                                                             ENABLED

{NAME => ‘hbase_table_2‘, FAMILIES => [{NAME => ‘a‘, COMPRESSION => ‘N true

ONE‘, VERSIONS => ‘3‘, TTL => ‘2147483647‘, BLOCKSIZE => ‘65536‘, IN_M

EMORY => ‘false‘, BLOCKCACHE => ‘true‘}, {NAME => ‘d‘, COMPRESSION =>

‘NONE‘, VERSIONS => ‘3‘, TTL => ‘2147483647‘, BLOCKSIZE => ‘65536‘, IN

_MEMORY => ‘false‘, BLOCKCACHE => ‘true‘}]}

1 row(s) in 1.0630 seconds

4.查看hbase的数据

Java代码

hbase(main):004:0> scan ‘hbase_table_2‘

ROW                          COLUMN+CELL

100                         column=a:b, timestamp=1297695262015, value=val_100

100                         column=a:c, timestamp=1297695262015, value=101

100                         column=d:e, timestamp=1297695262015, value=102

98                          column=a:b, timestamp=1297695242675, value=val_98

98                          column=a:c, timestamp=1297695242675, value=99

98                          column=d:e, timestamp=1297695242675, value=100

2 row(s) in 0.0380 seconds

5.在hive中查看

Java代码

hive> select * from hbase_table_2;

OK

100     val_100 101     102

98      val_98  99      100

Time taken: 3.238 seconds

參考资料:

http://running.iteye.com/blog/898399

http://heipark.iteye.com/blog/1150648

http://www.javabloger.com/article/apache-hadoop-hive-hbase-integration.html

时间: 2024-10-07 21:44:10

Hadoop Hive与Hbase关系 整合的相关文章

Hive与Hbase关系整合

近期工作用到了Hive与Hbase的关系整合,虽然从网上参考了很多的资料,但是大多数讲的都不是很细,于是决定将这块知识点好好总结一下供大家分享,共同掌握! 本篇文章在具体介绍Hive与Hbase整合之前,先给大家用一个流程图介绍Hadoop业务的开发流程以及Hive与Hbase的整合在业务当中的必要性.  其中在数据存入hbase—>Hive对数据进行统计分析的这个步骤中就涉及到了Hive与Hbase的整合,所以了解Hive与Hbase的整合是很有必要的. 1.Hive与Hbase整合的必要性 

Hadoop Hive与Hbase整合+thrift

1.  简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析. Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类, 大致意思如图所示

Mysql和Hadoop+Hive有什么关系?

1.Hive不存储数据,Hive需要分析计算的数据,以及计算结果后的数据实际存储在分布式系统上,如HDFS上. 2.Hive某种程度来说也不进行数据计算,只是个解释器,只是将用户需要对数据处理的逻辑,通过SQL编程提交后解释成MapReduce程序,然后将这个MR程序提交给Yarn进行调度执行.所以实际进行分布式运算的是MapReduce程序 3.因为Hive为了能操作HDFS上的数据集,那么他需要知道数据的切分格式,如行列分隔符,存储类型,是否压缩,数据的存储地址等信息.为了方便以后操作所以他

hive存储处理器(StorageHandlers)以及hive与hbase整合

此篇文章基于hive官方英文文档翻译,有些不好理解的地方加入了我个人的理解,官方的英文地址为: 1.https://cwiki.apache.org/confluence/display/Hive/StorageHandlers 2.https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration 一 存储处理器介绍 通过HIVE存储处理器,不但可以让hive基于hbase实现,还可以支持cassandra JDBC MongoD

Hadoop学习之HBase和Hive的区别

Hive是为简化编写MapReduce程序而生的,使用MapReduce做过数据分析的人都知道,很多分析程序除业务逻辑不同外,程序流程基本一样.在这种情况下,就需要Hive这样的用户编程接口.Hive本身不存储和计算数据,它完全依赖於HDFS和MapReduce,Hive中的表纯逻辑表,就是些表的定义等,也就是表的元数据.使用SQL实现Hive是因为SQL大家都熟悉,转换成本低,类似作用的Pig就不是SQL.   HBase为查询而生的,它通过组织起节点内所有机器的内存,提供一个超大的内存Has

数据导入(一):Hive On HBase

Hive集成HBase可以有效利用HBase数据库的存储特性,如行更新和列索引等.在集成的过程中注意维持HBase jar包的一致性.Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类. 整合hive与hbase的过程如下: 1.将HBASE_HOME下的 hbase-common-0.96.2-hadoop2.jar 和 zookeeper-3.4.5.jar 拷贝(覆盖)到HIVE_HOME/l

hive与hbase集成

详细步骤 一 .简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析. Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类. 二.安装

hadoop三----基于hadoop伪分布式整合hive和hbase

hadoop的生态圈: ETL 数据的抽取.转换.加载 1)安装hive 1.解压   # tar zvxf hive-0.13.0.tar.gz -C /usr/local   # cd /usr/local   # ln -sv  /usr/local/hive-0.12.0 /usr/local/hive 2.替换jar包,保持hbase0.98与hadoop1.2一致   # cd /usr/hive/lib   # rm -rf hbase-0.94*   # find /usr/hb

Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别

z摘自:http://www.linuxidc.com/Linux/2014-03/98978.htm hadoop生态圈 Pig 一种操作hadoop的轻量级脚本语言,最初又雅虎公司推出,不过现在正在走下坡路了.当初雅虎自己慢慢退出pig的维护之后将它开源贡献到开源社区由所有爱好者来维护.不过现在还是有些公司在用,不过我认为与其使用pig不如使用hive.:) Pig是一种数据流语言,用来快速轻松的处理巨大的数据. Pig包含两个部分:Pig Interface,Pig Latin. Pig可