前言
学习是一种乐趣,更是一种戒不掉的习惯。准备环境
以上环境,最好都参照标题中的来,因为涉及到HBase的handler的版本问题。
配置Hive
- 复制相关jar:
复制$HBASE_HOME/hbase-0.92.1.jar到$HVIE_HOME/lib下,并覆盖(删除)之前的HBase版本。
将~/.bashrc文件部分内容修改至如下:
export HIVE_LIB=$HIVE_HOME/libexport HIVE_CONF_DIR=$HIVE_HOME/confexport HIVE_AUX_JARS_PATH=$HIVE_HOME/lib/hive-hbase-handler-0.10.0,$HIVE_HOME/lib/hbase-0.92.1.jar,$HIVE_HOME/lib/zookeeper-3.4.3.jaexport HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HBASE_HOME/hbase/hbase-0.92.1.jar:$HABSE_HOME/conf/hbase-site.xml:$HIVE_HOME/zookeeper-3.4.3.jar
$HIVE_HOME/conf/hive-env.sh.template为hive-env.sh,加入(修改)至如下内容:
export HIVE_LIB=$HIVE_HOME/libexport HIVE_CONF_DIR=$HIVE_HOME/confexport HIVE_AUX_JARS_PATH=$HIVE_HOME/lib/hive-hbase-handler-0.10.0,$HIVE_HOME/lib/hbase-0.92.1.jar,$HIVE_HOME/lib/zookeeper-3.4.3.jarexport HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HBASE_HOME/hbase/hbase-0.92.1.jar:$HABSE_HOME/conf/hbase-site.xml:$HIVE_HOME/zookeeper-3.4.3.jar
启动、测试
- 启动Hadoop、HBase、Hive
$HADOOP_HOME/bin/start-all.sh$HADOOP_HOME/bin/hadoop dfsadmin -safemode leave$HBASE_HOME/bin/start-hbase.sh
- 测试个组件运行状况
- HBase shell中运行list命令
- Hive ”shell“中运行 shwo tables;命令
查看测试数据
按照我的 HBase环境搭建步骤走下来,则HBase中应当有一个用于存放单词出现次数的表test。我们将test作为Hive的外部表导出以验证Hive与HBase的整合效果。
CREATE EXTERNALTABLE hbase_table_1(key string,word string, count int)STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:word,info:count")TBLPROPERTIES ("hbase.table.name" = "test");
上面的指令是在Hive中创建了一个扩展表“hbase_table_1”,数据来自HBase的“test”,表。创建完成之后,我们使用select * from hbase_table_1;来查看整合效果。
- 在HBase中扫描表记录:
- scan 'test'
![]()
![]()
- 在Hive中选取所有表记录:
- select * from hbase_table_1;
![]()
![]()
![]()
至此,我们可以利用Hive的Query Language以一种熟悉的,类sql 的方式操纵HBase。
使用JBDC操作Hive
HBase做一个数据库,自然也提供了jdbc规范的驱动,请看下面的例子:
- 将$HBASE_HOME/lib/*.jar和$HBASE_HOME/lib/*.jar加入到项目的classpath下。
- hbase-site.xml,hive-site.xml复制到src下。
- 如下代码:
这里是上面用到的所有文件(已配置好)。package org.xiaom.hadoop.hive.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.xiaom.hadoop.hive.bean.WordCount; public class HiveWithHibernate { public static void main(String[] args) throws Exception { Configuration conf = new Configuration().configure(); Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver"); Connection conn = DriverManager.getConnection( "jdbc:hive://hadoop:10000/default", "", ""); Statement stmt = conn.createStatement(); ResultSet res = stmt.executeQuery("select * from hbase_table_1"); while (res.next()) { System.out.println(res.getString(1) + "\t" + res.getString(2) + "\t" + res.getShort(3)); } } }