淘先锋技术网

首页 1 2 3 4 5 6 7
 
Hadoop Hive与Hbase整合

     为了更好的使用hive 和hbase  这里介绍一下 hive 和hbase 的整合,这样能够在你往hive里面存储数据的时候同时往hbase里面存储数据,形成hbase与hive 的同步; 
一、进行hive配置
1. 拷贝hbase-common-0.98.6-cdh5.2.0.jar和zookeeper-3.4.5-cdh5.2.0.jar到hive/lib下。 
    注意:如何hive/lib下已经存在这两个文件的其他版本,建议删除后使用hbase下的相关版本。
   
2. 修改hive/conf下hive-site.xml文件,在底部添加如下内容: 

  
<property> 
  <name>hive.aux.jars.path</name>  
  <value>file:///home/kkzhangtao/hive-0.13.1-cdh5.2.0/lib/hive-hbase-handler-0.8.0.jar,file:///home/kkzhangtao/hive-0.13.1-cdh5.2.0/lib/hbase-common-0.98.6-cdh5.2.0.jar,file:///home/kkzhangtao/hive-0.13.1-cdh5.2.0/lib/zookeeper-3.4.5-cdh5.2.0.jar</value> 
</property>
注意:如果hive-site.xml不存在则自行创建,或者把hive-default.xml.template文件改名后使用。
 
3. 拷贝hbase-common-0.98.6-cdh5.2.0.jar到所有hadoop节点(包括master)的hadoop/lib下。
 
4. 拷贝hbase/conf下的hbase-site.xml文件到所有hadoop节点(包括master)的hadoop/conf下。

二、进入hive,创建hive表(与hbase关联) 
1、进入hive

  
> bin/hive -hive   
2、创建hive表

1>若hbase里面不存在需要创建的表

  
use hive_hbase_test;   
create table hive_hbase(rowkey varchar(64),andx_item_id  char(32)  ,xcount  int ) stored by  ' org.apache.hadoop.hive.hbase.HBaseStorageHandler '  with serdeproperties ("hbase.columns.mapping" = ":key, service_info: id,service_info: xcount  ")    tblproperties ("hbase.table.name" = "hive_hbase") ;
hbase.table.name 不是必写项, 定义在hbase的table名称   例如:hive_hbase; ;若是不写的话 默认与hive的表名称相同   例如:hive_hbase_test.hive_hbase;
hbase.columns.mapping 是必填的,是对用hbase里面的key 和 列族

 2>若hbase里面存在需要创建的表

  
use hive_hbase_test;   
create  EXTERNAL table hive_hbase(rowkey varchar(64),andx_item_id  char(32)  ,xcount  int ) stored by  ' org.apache.hadoop.hive.hbase.HBaseStorageHandler '  with serdeproperties ("hbase.columns.mapping" = ":key, service_info: id,service_info: xcount  ")     tblproperties ("hbase.table.name" = some_existing_table") ;

3、在hive里面创建数据
non-native类型的表是不能使用load 的,所以需要建立一个中间表,把文件数据load进去
 建立文件 hive_hbase 内容如下: 

  
111111111_1           4028800947af3bf00147af4037c30001     23
111111111_2           4028800947af3bf00147af4037c30001     30      
建立中间表

  
use hive_hbase_test;   
create table hive_hbase_temp(rowkey varchar(64),andx_item_id  char(32)  ,xcount  int ) ;
导入文件到中间表 hive_hbase_temp:

   
>LOAD DATA LOCAL INPATH '/home/fulong/Fulong/hive_hbase.txt' OVERWRITE INTO TABLE hive_hbase_temp;
  
把中间的表数据导入到hive_hbase中

  
INSERT OVERWRITE TABLE hive_hbase select * from hive_hbase_temp;   

4、 查看hbase 和 hive 的 数据 

  
 hive >  select * from hive_hbase;

  
 hbase >  scan   hive_hbase_test. hive_hbase;