搜档网
当前位置:搜档网 › cdh4 hive访问hbaseV0.1

cdh4 hive访问hbaseV0.1

cdh4 hive访问hbaseV0.1
cdh4 hive访问hbaseV0.1

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的相关版本后在添加。

修改配置文件

hbase.zookeeper.quorum

e3base04,e3base01,e3base02

zookeeper集群主机名称

hive.aux.jars.path

file:///home/demo/hive/lib/hive-hbase-handler-0.9.0-cdh4.1.2.jar,file:/// home/demo/hive/lib/zookeeper-3.4.3-cdh4.1.2.jar,file:///home/demo/hive/lib/hb ase-0.92.1-cdh4.1.2.jar

添加hive、hbase直接访问的依赖jar包

注意:如果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文件中增加配置

hbase.client.scanner.caching

10000

或者在执行hive语句之前执行hive>set

hbase.client.scanner.caching=10000;

相关主题