这是去年整理的一份文档,当时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的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
使用map类型对应hbase中的一个family,hbase中family的columnName为key,columnValue为value