Hadoop Hive与Hbase整合
简介
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce 任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
HBase介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。
Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类,大致意思如图所示:
版本说明
As of Hive 0.9.0 the HBase integration requires at least HBase 0.92, earlier versions of Hive were working with HBase 0.89/0.
安装步骤:
安装hadoop 和hbase
添加jar包
拷贝hbase-0.92.1-cdh4.1.2-security.jar 和zookeeper-3.4.3-cdh4.1.2.jar到hive/lib下。
注:在添加之前删除hive的lib下面关于hbase的相关版本后在添加。
修改配置文件
注意:如果hive-site.xml不存在则自行创建,或者把
hive-default.xml.template文件改名后使用。
拷贝jar包
拷贝hbase-0.94.2-cdh4.2.0-security.jar到所有hadoop节点(包括master)的/home/demo/hadoop/share/hadoop/下的几个添加jar的地方。
拷贝配置文件
拷贝hbase/conf下的hbase-site.xml文件到所有hadoop节点(包括master)的hadoop/conf下。
启动hive
在hive的安装目录下面执行hive或者./hive
测试
创建hbase表
单列表
CREATE TABLE hbase_table_2(key int, value string)
row format delimited fields terminated by '|' lines terminated by '\n ‘STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("https://www.sodocs.net/doc/166206989.html," = "hbase_hive2");
注:https://www.sodocs.net/doc/166206989.html, 定义在hbase的table名称,可以不用写,默认跟hive中的表名一致。
hbase.columns.mapping 定义在hbase的列族
创建内部表时可以使用分隔符
多列表
CREATE TABLE hbase_table_3(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") TBLPROPERTIES("https://www.sodocs.net/doc/166206989.html," = "hbae_hive3");
导入数据
新建hive的数据表
CREATE TABLE pokes1 (
foo int ,
bar String
) row format delimited fields terminated by '|' lines terminated by '\n' stored as textfile;
批量插入数据
load data local inpath '/home/demo/hive/pokes.txt' overwrite into table pokes;
使用sql导入hbase_table_1
注:hive关联hbase表后不能使用load向hive中的表导入数据。
单列
insert overwrite table hbase_table_1 select * from pokes;
INSERT OVERWRITE TABLE hbase_table_3 SELECT foo, bar, foo+1, foo+2 from pokes;
查看数据
select * from hbase_table_1;
这时可以登录Hbase去查看数据了
#bin/hbase shell
在hbase中测试:
Describe ‘hbase_hive’
Scan ‘hbase_hive’
Put ‘hbase_hive’,’1’,’cf1:val’,’ceshi’
hive访问已经存在的hbase
hive访问已经存在的hbase表
1、关联表
CREATE external TABLE hbase_table(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val") TBLPROPERTIES ("https://www.sodocs.net/doc/166206989.html," = "hbase_hive");
2、查询表
select * from hbase_table;
注:hive连接hbase优化,将HADOOP_HOME/conf中的hbase-site.xml文件中增加配置
或者在执行hive语句之前执行hive>set
hbase.client.scanner.caching=10000;