【伊利丹】Hadoop-2.5.0-CDH5.2.0/Hive与Hbase整合实验

By | 2019年1月31日



Hadoop Hive与Hbase整合



用hbase做数据库,但由于hbase没有类sql查询方式,所以操作和计算数据非常不方便,于是整合hive,让hive支撑在hbase数据库层面 的 hql查询.hive也即 做数据仓库 

本次试验目的讲述如何让Hbase和Hive能互相访问,让Hadoop/Hbase/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了。 
单节点启动: 

1
> bin/hive -hiveconf hbase.master=master:60000

集群启动: 

1
> bin/hive -hiveconf hbase.zookeeper.quorum=slave



接下来可以做一些测试了。 
  
1.创建hbase识别的数据库: 
  
[sql] view plaincopy 
  
CREATE TABLE hbase_table_1(key int, value string)  
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’  
WITH SERDEPROPERTIES (“hbase.columns.mapping” = “:key,cf1:val”)  
TBLPROPERTIES (“hbase.table.name” = “xyz”);  
  
hbase.table.name 定义在hbase的table名称 
hbase.columns.mapping 定义在hbase的列族 
  



2.使用sql导入数据 
  
a) 新建hive的数据表 
  
[sql] view plaincopy 
  
<span><span></span></span>hive> CREATE TABLE pokes (foo BIGINT, bar VARCHAR(20));  
  
b) 批量插入数据 
  
[sql] view plaincopy 

1
hive> LOAD DATA LOCAL INPATH ‘/home/fulong/Hive/hive-0.13.1-cdh5.2.0/examples/files/kv1.txt’ OVERWRITE INTO TABLE pokes; 

c) 使用sql导入hbase_table_1 

  
[sql] view plaincopy 
  
hive> INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=86;  
  



3. 查看数据 
  
[sql] view plaincopy 
  
hive> select * from  hbase_table_1;  
  
这时可以登录Hbase去查看数据了. 
  
> /usr/local/hbase/bin/hbase shell 
hbase(main):001:0> describe ‘xyz’   
hbase(main):002:0> scan ‘xyz’   
hbase(main):003:0> put ‘xyz’,’100′,’cf1:val’,’www.360buy.com’ 
  
这时在Hive中可以看到刚才在Hbase中插入的数据了。
  
hive> select * from hbase_table_1 
  



4. hive访问已经存在的hbase 
多列和多列族(Multiple Columns and Families) 
1.创建数据库 
  

CREATE TABLE hbase_table_2(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 (“hbase.table.name” = “xyz1”); ;  



2.插入数据 

INSERT OVERWRITE TABLE hbase_table_2 SELECT foo, bar, foo+1, foo+2   
FROM pokes WHERE foo=98 OR foo=100;  

这个有3个hive的列(value1和value2,value3),2个hbase的列族(a,d) 
Hive的2列(value1和value2)对应1个hbase的列族(a,在hbase的列名称b,c),hive的另外1列(value3)对应列(e)位于列族(d) 

  



3.登录hbase查看结构 

1
2
3
4
5
6
7
8
hbase(main):003:0> describe "hbase_table_2" 
DESCRIPTION                                                             ENABLED                                 
 {NAME => 'hbase_table_2', FAMILIES => [{NAME => 'a',
COMPRESSION => 'N 
true                                   
 ONE', VERSIONS => '3', TTL => '2147483647',
BLOCKSIZE => '
65536', IN_M                                         
 EMORY => 'false', BLOCKCACHE => 'true'},
{NAME => 
'd', COMPRESSION =>                                          
 'NONE', VERSIONS => '3', TTL => '2147483647',
BLOCKSIZE => 
'65536', IN                                         
 _MEMORY => 'false', BLOCKCACHE => 'true'}]}                                                                    
1 row(s) in 1.0630 seconds



4.查看hbase的数据 

1
2
3
4
5
6
7
8
9
hbase(main):004:0> scan 'hbase_table_2' 
ROW                          COLUMN+CELL                                                                        
 100                         column=a:b, timestamp=1297695262015,
value=val_100                                
 100                         column=a:c, timestamp=1297695262015,
value=
101                                    
 100                         column=d:e, timestamp=1297695262015,
value=
102                                    
 98                          column=a:b, timestamp=1297695242675,
value=val_98                                 
 98                          column=a:c, timestamp=1297695242675,
value=
99                                     
 98                          column=d:e, timestamp=1297695242675,
value=
100                                    
2 row(s) in 0.0380 seconds



5.在hive中查看 

1
2
3
4
5
hive> select * from hbase_table_2;  
OK 
100     val_100 101     102 
98      val_98  99      100 
Time taken: 3.238 seconds

发表评论