Hadoop Hive与Hbase整合
2013-10-26 18:51
453 查看
用hbase做数据库,但由于hbase没有类sql查询方式,所以操作和计算数据非常不方便,于是整合hive,让hive支撑在hbase数据库层面的hql查询.hive也即做数据仓库
1.基于Hadoop+Hive架构对海量数据进行查询:http://blog.csdn.net/kunshan_shenbin/article/details/7105319
2.HBase0.90.5+Hadoop1.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文件,在底部添加如下内容:
注意:如果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时很可能出现如下错误:
参考:http://blog.sina.com.cn/s/blog_410d18710100vlbq.html
现在可以尝试启动Hive了。
单节点启动:
集群启动:
如何hive-site.xml文件中没有配置hive.aux.jars.path,则可以按照如下方式启动。
接下来可以做一些测试了。
1.创建hbase识别的数据库:
[sql]viewplaincopy
CREATETABLEhbase_table_1(keyint,valuestring)
STOREDBY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITHSERDEPROPERTIES("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]viewplaincopy
<span><span></span></span>hive>CREATETABLEpokes(fooINT,barSTRING);
b)批量插入数据
[sql]viewplaincopy
pokes;
c)使用sql导入hbase_table_1
[sql]viewplaincopy
hive>INSERTOVERWRITETABLEhbase_table_1SELECT*FROMpokesWHEREfoo=86;
3.查看数据
[sql]viewplaincopy
hive>select*fromhbase_table_1;
这时可以登录Hbase去查看数据了.
>/usr/local/hbase/bin/hbaseshell
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*fromhbase_table_1
4.hive访问已经存在的hbase
使用CREATEEXTERNALTABLE
[sql]viewplaincopy
CREATEEXTERNALTABLEhbase_table_2(keyint,valuestring)
STOREDBY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITHSERDEPROPERTIES("hbase.columns.mapping"="cf1:val")
TBLPROPERTIES("hbase.table.name"="some_existing_table");
多列和多列族(MultipleColumnsandFamilies)
1.创建数据库
Java代码
CREATETABLEhbase_table_2(keyint,value1string,value2int,value3int)
STOREDBY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITHSERDEPROPERTIES(
"hbase.columns.mapping"=":key,a:b,a:c,d:e"
);
2.插入数据
Java代码
INSERTOVERWRITETABLEhbase_table_2SELECTfoo,bar,foo+1,foo+2
FROMpokesWHEREfoo=98ORfoo=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代码
4.查看hbase的数据
Java代码
5.在hive中查看
Java代码
参考资料:
http://running.iteye.com/blog/898399http://heipark.iteye.com/blog/1150648http://www.javabloger.com/article/apache-hadoop-hive-hbase-integration.html
1.基于Hadoop+Hive架构对海量数据进行查询:http://blog.csdn.net/kunshan_shenbin/article/details/7105319
2.HBase0.90.5+Hadoop1.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文件,在底部添加如下内容:
01 | [html] viewplaincopy |
02 | <!-- |
03 | <property> |
04 | <name>hive.exec.scratchdir</name> |
05 | <value>/usr/local/hive/tmp</value> |
06 |
07 | </property> |
08 | --> |
09 |
10 | <property> |
11 | <name>hive.querylog.location</name> |
12 | <value>/usr/local/hive/logs</value> |
13 | </property> |
14 |
15 | <property> |
16 | <name>hive.aux.jars.path</name> |
17 | <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> |
18 |
19 | </property> |
具体请参见: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时很可能出现如下错误:
1 | [html] viewplaincopy |
2 | org.apache.hadoop.hbase.ZooKeeperConnectionException: |
3 | This couldbeasignthattheserverhastoomanyconnections( 30 is the default ). ConsiderinspectingyourZKserverlogs for that |
4 | then makesureyouarereusingHBaseConfigurationasoftenasyoucan.SeeHTable'sjavadoc for more information.atorg.apache.hadoop. |
5 | hbase.zookeeper.ZooKeeperWatcher. |
现在可以尝试启动Hive了。
单节点启动:
1 | > bin/hive-hiveconfhbase.master=master: 60000 |
1 | > bin/hive-hiveconfhbase.zookeeper.quorum=slave |
1 | > 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 -hiveconfhbase.zookeeper.quorum=slave |
1.创建hbase识别的数据库:
[sql]viewplaincopy
CREATETABLEhbase_table_1(keyint,valuestring)
STOREDBY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITHSERDEPROPERTIES("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]viewplaincopy
<span><span></span></span>hive>CREATETABLEpokes(fooINT,barSTRING);
b)批量插入数据
[sql]viewplaincopy
1 | hive> LOADDATALOCALINPATH './examples/files/kv1.txt' OVERWRITE INTOTABLE |
c)使用sql导入hbase_table_1
[sql]viewplaincopy
hive>INSERTOVERWRITETABLEhbase_table_1SELECT*FROMpokesWHEREfoo=86;
3.查看数据
[sql]viewplaincopy
hive>select*fromhbase_table_1;
这时可以登录Hbase去查看数据了.
>/usr/local/hbase/bin/hbaseshell
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*fromhbase_table_1
4.hive访问已经存在的hbase
使用CREATEEXTERNALTABLE
[sql]viewplaincopy
CREATEEXTERNALTABLEhbase_table_2(keyint,valuestring)
STOREDBY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITHSERDEPROPERTIES("hbase.columns.mapping"="cf1:val")
TBLPROPERTIES("hbase.table.name"="some_existing_table");
多列和多列族(MultipleColumnsandFamilies)
1.创建数据库
Java代码
CREATETABLEhbase_table_2(keyint,value1string,value2int,value3int)
STOREDBY'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITHSERDEPROPERTIES(
"hbase.columns.mapping"=":key,a:b,a:c,d:e"
);
2.插入数据
Java代码
INSERTOVERWRITETABLEhbase_table_2SELECTfoo,bar,foo+1,foo+2
FROMpokesWHEREfoo=98ORfoo=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代码
1 | hbase(main): 003 : 0 > describe "hbase_table_2" |
2 | DESCRIPTION |
3 | {NAME 'hbase_table_2' , 'a' , true |
4 | ONE ', 3 ', 2147483647 ', 65536 ', |
5 | EMORY 'false' , 'true' }, 'd' , |
6 | 'NONE' , '3' , '2147483647' , '65536' , |
7 | _MEMORY 'false' , 'true' }]} |
8 | 1 row(s) 1.0630 seconds |
Java代码
1 | hbase(main): 004 : 0 > 'hbase_table_2' |
2 | ROW |
3 | 100 column=a:b, timestamp= 1297695262015 , value=val_100 |
4 | 100 column=a:c, timestamp= 1297695262015 , value= 101 |
5 | 100 column=d:e, timestamp= 1297695262015 , value= 102 |
6 | 98 column=a:b, timestamp= 1297695242675 , value=val_98 |
7 | 98 column=a:c, timestamp= 1297695242675 , value= 99 |
8 | 98 column=d:e, timestamp= 1297695242675 , value= 100 |
9 | 2 row(s) 0.0380 seconds |
Java代码
1 | hive> |
2 | OK |
3 | 100 val_100 101 102 |
4 | 98 val_98 99 100 |
5 | Time 3.238 seconds |
相关文章推荐
- Hadoop Hive与Hbase整合+thrift
- hadoop2.7.2集群hive-1.2.1整合hbase-1.2.1
- Hadoop Hive与Hbase关系 整合
- Hadoop Hive与Hbase整合
- hadoop+hive+hbase的整合开发(配置加测试)
- Hadoop(三)——Hive和Hbase整合
- Hadoop Hive与Hbase整合+thrift
- Hive安装配置以及整合HBase和hadoop
- [置顶] hadoop+zookeeper+hbase+hive+mahout整合配置
- Hadoop Hive与Hbase关系 整合
- hadoop,hbase,hive,zookeeper版本整合兼容性详细说明【适用于任何版本】
- Hadoop HBase Hive安装,配置,整合
- Hadoop Hive与Hbase关系 整合
- 琐碎-hadoop2.2.0-hbase0.96.0-hive0.13.1整合
- Hadoop Hive与Hbase关系 整合
- 【伊利丹】Hadoop-2.5.0-CDH5.2.0/Hive与Hbase整合实验
- hadoop2.7.2集群hive-1.2.1整合hbase-1.2.1
- hadoop 1.1.2和 hive 0.10 和hbase 0.94.9整合
- hadoop,hbase,hive,zookeeper版本整合兼容性问题总结
- Hadoop Hive与Hbase关系 整合