Hive与Hbase的整合

Hive与Hbase的整合

这是去年整理的一份文档,当时hive的最新版本是0.9.0,而现在hive的最新稳定版本是0.10.0,这份文档主要记录的是hive的安装以及如何与hbase整合起来,下面就是从这两点开始说明的。

安装

Hive官网:http://hive.apache.org/

使用的版本是hive-0.9.0.tar.gz,下载后解压开来为hive-0.9.0目录,在其conf目录下,将hive- default.xml.template拷贝为hive-default.xml和hive-site.xml两个文件,或者新建一个名为hive- site.xml的文件,其中hive-default.xml为默认的配置,而hive-site.xml里的配置可以覆盖掉hive- default.xml里的配置,使hive-site.xml里为如下内容:



hive.cluster.delegation.token.store.zookeeper.connectString
slave2:2181
The ZooKeeper token store connect string.


hive.zookeeper.quorum
zookeeper1,zookeeper2
The list of zookeeper servers to talk to. This is only needed for read/write locks.

在hive的bin目录下,运行./hive,如果没报错,则会进入到hive的命令行界面中,运行show tables命令,如果没错则会显示当前的表。

与Hbase整合

如果在Hive中能直接创建HBase表,能操作HBase表,比如查询等,通过Hive往表里新增数据在HBase中也能看到新增数据的话,则这种情况就说是Hive与HBase进行了整合。

Hive要与HBase整合,则在进入Hive的时候就不能只是简单的运行命令./hive,而应当运行如下语句:

./hive -hiveconf hbase.zookeeper.quorum=zookeeper1,zookeeper2

再运行语句:

show tables;

如下结果:

 

上面是我所创建的一些表,现在通过Hive新创建一个HBase表,语句如下:

CREATE TABLE hive_table_1(key int, value string) STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’ WITH SERDEPROPERTIES (“hbase.columns.mapping” = “:key,id:1″) TBLPROPERTIES (“hbase.table.name” = “hive_table_1″);

上面创建了一个叫hive_table_1的表,在这里Hive中和Hbase中关联的表名都叫hive_table_1,列簇是id。

在HBase中,往表hive_table_1中新增一条数据:

put ‘hive_table_1′, “1″, ‘id:1′, “1″

经查看,新增成功,然后在Hive中进行查询:

 

可以查到刚才新增的数据,第一个字段值对应Row,第二个字段值对应value。

条件查询调用MapReduce,在上面中只是一条很普通的没有任何查询条件的SQL语句,如果加上where条件,则会调用MapReduce进行查询,运行如下语句:

select * from hive_table_1 where value=’1′;

过程及结果:

从图中可以看出上面是调用了一个MapReduce来进行查询,结果也正确。

在Hive中创建一个表与HBase中现有表关联起来,语句示例如下:

CREATE EXTERNAL TABLE hive_table_2(key string, value string) STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’ WITH SERDEPROPERTIES (“hbase.columns.mapping” = “ip:18.41.11.113″) TBLPROPERTIES(“hbase.table.name” = “dStatistics”);

上面语句在Hive中创建了一个表hive_table_2,其与Hbase中现有的表dStatistics关联了起来,现在查询一下:

select * from hive_table_2;

结果如下:

hive> select * from hive_table_2;

OK

1337702400000   20

1337875200000   20

1338825600000   90

Time taken: 0.424 seconds

以上是一个大概的介绍吧,通过Hive,可以像关系数据库里的SQL语句那样来进行查询,这对于那些只知道关系数据库里SQL使用的人而言是非常有帮助的。

注意

应当将各节点(主从节点)的hbase包拷贝到hadoop的lib下,hbase-site.xml文件拷贝到hadoop的conf目录下,不然在hive中创建关联表时会报错:

FAILED: Error in metadata: MetaException(message:org.apache.hadoop.hbase.MasterNotRunningException: Interrupted

对现有的hbase表创建hive表,再如:

CREATE EXTERNAL TABLE domain_day_statistics(key string,total map) STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’ WITH SERDEPROPERTIES (“hbase.columns.mapping” = “total:”)TBLPROPERTIES(“hbase.table.name” = “domain_day_statistics”);

使用map类型对应hbase中的一个family,hbase中family的columnName为key,columnValue为value

你可能感兴趣的:(Hive整合Hbase)