hive与hbase整合过程

原创 2014年07月25日 11:22:31
hive与hbase整合过程---coco


# by coco
# 2014-07-25


 本文主要实现一下目标:
   1. 在hive中创建的表能直接创建保存到hbase中。
   2. hive中的表插入数据,插入的数据会同步更新到hbase对应的表中。
   3. hbase对应的列簇值变更,也会在Hive中对应的表中变更。
   4. 实现了多列,多列簇的转化:(示例:hive中3列对应hbase中2列簇)
   


 hive与hbase的整合
 1. 创建hbase识别的表:
hive>  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");
OK
Time taken: 1.833 seconds
hbase.table.name 定义在hbase的table名称 
hbase.columns.mapping 定义在hbase的列族 
hbase中看到的表:
hbase(main):007:0> list
TABLE                                                                                                                        
hivetest                                                                                                                     
student                                                                                                                      
test                                                                                                                         
xyz                                                                                                                          
4 row(s) in 0.1050 seconds


=> ["hivetest", "student", "test", "xyz"]


2.使用sql导入数据 
i.预先准备数据 
a)新建hive的数据表
hive> create table ccc(foo int,bar string) row format delimited fields terminated by '\t' lines terminated by '\n' stored as textfile;
OK
Time taken: 2.563 seconds
[root@db96 ~]# cat kv1.txt 
1       val_1
2       val_2
这个文件位于root目录下,/root/kv1.txt
  
[root@db96 ~]# 
hive> load data local inpath '/root/kv1.txt' overwrite into table ccc;
Copying data from file:/root/kv1.txt
Copying file: file:/root/kv1.txt
Loading data to table default.ccc
rmr: DEPRECATED: Please use 'rm -r' instead.
Deleted hdfs://db96:9000/hive/warehousedir/ccc
[Warning] could not update stats.
OK
Time taken: 2.796 seconds
hive> select * from ccc;
OK
1       val_1
2       val_2
NULL    NULL
Time taken: 0.348 seconds, Fetched: 3 row(s)
hive>
使用sql导入hbase_table_1
hive> insert overwrite table hbase_table_1 select * from ccc where foo=1;
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_1406161997851_0002, Tracking URL = http://db96:8088/proxy/application_1406161997851_0002/
Kill Command = /usr/local/hadoop//bin/hadoop job  -kill job_1406161997851_0002
Hadoop job information for Stage-0: number of mappers: 1; number of reducers: 0
2014-07-24 16:04:48,938 Stage-0 map = 0%,  reduce = 0%
2014-07-24 16:04:57,571 Stage-0 map = 100%,  reduce = 0%, Cumulative CPU 2.54 sec
MapReduce Total cumulative CPU time: 2 seconds 540 msec
Ended Job = job_1406161997851_0002
MapReduce Jobs Launched: 
Job 0: Map: 1   Cumulative CPU: 2.54 sec   HDFS Read: 217 HDFS Write: 0 SUCCESS
Total MapReduce CPU Time Spent: 2 seconds 540 msec
OK
Time taken: 27.648 seconds


查看数据
会显示刚刚插入的数据 
1       val_1
hive> select * from hbase_table_1;
OK
1       val_1
Time taken: 1.143 seconds, Fetched: 1 row(s)


hbase 登录hbase
查看加载的数据
hbase(main):008:0> scan "xyz"
ROW                           COLUMN+CELL                                                                          
 1                            column=cf1:val, timestamp=1406189096793, value=val_1                                 
1 row(s) in 0.1090 seconds


hbase(main):009:0> 
可以看到,在hive中添加的数据86,已经在hbase中了.
添加数据:
hbase(main):009:0> put 'xyz','100','cf1:val','www.gongchang.com'
hbase(main):011:0> put 'xyz','200','cf1:val','hello,word!'
hbase(main):012:0> scan "xyz"
ROW                           COLUMN+CELL                                                                          
 1                            column=cf1:val, timestamp=1406189096793, value=val_1                                 
 100                          column=cf1:val, timestamp=1406189669476, value=www.gongchang.com                     
 200                          column=cf1:val, timestamp=1406189704742, value=hello,word!                           
3 row(s) in 0.0240 seconds


Hive 
参看hive中的数据
hive> select * from hbase_table_1;
OK
1       val_1
100     www.gongchang.com
200     hello,word!
Time taken: 1.097 seconds, Fetched: 3 row(s)
hive> 
刚刚在hbase中插入的数据,已经在hive里了.


hive访问已经存在的hbase
hbase中的元数据准备:
hbase(main):014:0> describe "student"
DESCRIPTION                                                                ENABLED                                 
 'student', {NAME => 'info', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => true                                    
  'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE',                                         
  MIN_VERSIONS => '0', TTL => '2147483647', KEEP_DELETED_CELLS => 'false',                                         
  BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}                                                
1 row(s) in 0.1380 seconds


hbase(main):015:0> put "student",'1','info:name','tom'
hbase(main):017:0> put "student",'2','info:name','lily'
hbase(main):018:0> put "student",'3','info:name','wwn'
hbase(main):019:0> scan "student"
ROW                           COLUMN+CELL                                                                          
 1                            column=info:name, timestamp=1406189948888, value=tom                                 
 2                            column=info:name, timestamp=1406190005724, value=lily                                
 3                            column=info:name, timestamp=1406190016967, value=wwn                                 
3 row(s) in 0.0420 seconds


hive访问已经存在的hbase 
使用CREATE EXTERNAL TABLE:
CREATE EXTERNAL TABLE hbase_table_3(key int, value string)    
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "info:name")   
TBLPROPERTIES("hbase.table.name" = "student"); 
hive> CREATE EXTERNAL TABLE hbase_table_3(key int, value string)    
    > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
    > WITH SERDEPROPERTIES ("hbase.columns.mapping" = "info:name")   
    > TBLPROPERTIES("hbase.table.name" = "student"); 
OK
Time taken: 1.21 seconds
hive> select * from hbase_table_3;
OK
1       tom
2       lily
3       wwn
Time taken: 0.107 seconds, Fetched: 3 row(s)
由上可以看出,hive已经能访问查看hbase中原有的数据了。
注意:如果hbase中列簇名name数据变更,那么hive中查询结果也会相应的变更,如果hbase中不是其他列簇
    内容更新则hive中查询结果不显示。
    
三、多列和多列族(Multiple Columns and Families) 
1.创建数据库


CREATE TABLE hbase_table_add1(key int, value1 string, value2 int, value3 int)    
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:col1,info:col2,city:nu")
TBLPROPERTIES("hbase.table.name" = "student_info");   
登陆hive操作:
hive> CREATE TABLE hbase_table_add1(key int, value1 string, value2 int, value3 int)    
    > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
    > WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:col1,info:col2,city:nu")
    > TBLPROPERTIES("hbase.table.name" = "student_info"); 
OK
Time taken: 2.957 seconds
hive> select * from hbase_table_2;                   
OK
Time taken: 1.16 seconds
hive> select * from hbase_table_3;
OK
1       tom
2       lily
3       wwn
4       marry
Time taken: 0.117 seconds, Fetched: 4 row(s)
hive> set hive.cli.print.header=true;                
hive> select * from hbase_table_3;   
OK
hbase_table_3.key       hbase_table_3.value
1       tom
2       lily
3       wwn
4       marry
Time taken: 1.132 seconds, Fetched: 4 row(s)
hive> desc hbase_table_3;
OK
col_name        data_type       comment
key                     int                     from deserializer   
value                   string                  from deserializer   
Time taken: 0.19 seconds, Fetched: 2 row(s)
hive> insert overwrite table hbase_table_add1 select key,value,key+1,value from hbase_table_3;
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_1406161997851_0003, Tracking URL = http://db96:8088/proxy/application_1406161997851_0003/
Kill Command = /usr/local/hadoop//bin/hadoop job  -kill job_1406161997851_0003
Hadoop job information for Stage-0: number of mappers: 1; number of reducers: 0
2014-07-25 08:42:46,068 Stage-0 map = 0%,  reduce = 0%
2014-07-25 08:42:56,218 Stage-0 map = 100%,  reduce = 0%, Cumulative CPU 2.77 sec
MapReduce Total cumulative CPU time: 2 seconds 770 msec
Ended Job = job_1406161997851_0003
MapReduce Jobs Launched: 
Job 0: Map: 1   Cumulative CPU: 2.77 sec   HDFS Read: 239 HDFS Write: 0 SUCCESS
Total MapReduce CPU Time Spent: 2 seconds 770 msec
OK
_col0   _col1   _col2   _col3
Time taken: 28.01 seconds
hive> select * from  hbase_table_add1;
OK
hbase_table_add1.key    hbase_table_add1.value1 hbase_table_add1.value2 hbase_table_add1.value3
1       tom     2       NULL
2       lily    3       NULL
3       wwn     4       NULL
4       marry   5       NULL
Time taken: 1.105 seconds, Fetched: 4 row(s)
hive> insert overwrite table hbase_table_add1 select key,value,key+1,key+100 from hbase_table_3;
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_1406161997851_0004, Tracking URL = http://db96:8088/proxy/application_1406161997851_0004/
Kill Command = /usr/local/hadoop//bin/hadoop job  -kill job_1406161997851_0004
Hadoop job information for Stage-0: number of mappers: 1; number of reducers: 0
2014-07-25 08:45:15,164 Stage-0 map = 0%,  reduce = 0%
2014-07-25 08:45:25,609 Stage-0 map = 100%,  reduce = 0%, Cumulative CPU 2.69 sec
MapReduce Total cumulative CPU time: 2 seconds 690 msec
Ended Job = job_1406161997851_0004
MapReduce Jobs Launched: 
Job 0: Map: 1   Cumulative CPU: 2.69 sec   HDFS Read: 239 HDFS Write: 0 SUCCESS
Total MapReduce CPU Time Spent: 2 seconds 690 msec
OK
key     value   _c2     _c3
Time taken: 25.587 seconds
hive> select * from hbase_table_add1;
OK
hbase_table_add1.key    hbase_table_add1.value1 hbase_table_add1.value2 hbase_table_add1.value3
1       tom     2       101
2       lily    3       102
3       wwn     4       103
4       marry   5       104
Time taken: 1.122 seconds, Fetched: 4 row(s)


登陆hbase中查看:
hbase(main):001:0> list
TABLE                                                                                                              
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hbase-0.96.2-hadoop2/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop2/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
shivetest                                                                                                           
student                                                                                                            
student_info                                                                                                       
test                                                                                                               
xyz                                                                                                                
5 row(s) in 2.4090 seconds


=> ["hivetest", "student", "student_info", "test", "xyz"]
hbase(main):002:0> scan "student_info"
ROW                           COLUMN+CELL                                                                          
 1                            column=city:nu, timestamp=1406249125147, value=101                                   
 1                            column=info:col1, timestamp=1406249125147, value=tom                                 
 1                            column=info:col2, timestamp=1406249125147, value=2                                   
 2                            column=city:nu, timestamp=1406249125147, value=102                                   
 2                            column=info:col1, timestamp=1406249125147, value=lily                                
 2                            column=info:col2, timestamp=1406249125147, value=3                                   
 3                            column=city:nu, timestamp=1406249125147, value=103                                   
 3                            column=info:col1, timestamp=1406249125147, value=wwn                                 
 3                            column=info:col2, timestamp=1406249125147, value=4                                   
 4                            column=city:nu, timestamp=1406249125147, value=104                                   
 4                            column=info:col1, timestamp=1406249125147, value=marry                               
 4                            column=info:col2, timestamp=1406249125147, value=5                                   
4 row(s) in 0.1110 seconds


hbase(main):003:0> 


这里有3个hive的列,(value1和value2,value3),2个hbase的列簇(info,city)
hive的2列(value,和value2)对应1个hbase的列簇(info,在hbase的列名称col1,col2),
hive的另外1列(value3)对应列nu位于city列簇。
这里实现了hive中表,多列存放到hbase少量固定的列簇中。

大数据第三季--Hive(day1)

大数据第三季--Hive(day1)
  • 2017年02月09日 14:28

Hive安装及与HBase的整合

介绍Hive的工作原理、配置及与HBase的整合。
  • carl810224
  • carl810224
  • 2016-08-31 10:59:13
  • 4110

Hive和HBase的整合原理

Point 1: 配置 hive 与 hbase 整合的目的是利用 HQL 语法实现对 hbase 数据库的增删改查操作,基本原理就是利用两者本身对外的API接口互相进行通信,两者通信主要是依靠h...
  • ymf827311945
  • ymf827311945
  • 2017-06-24 13:28:12
  • 993

Hive和HBase整合

hive hbase 整合
  • dehu_zhou
  • dehu_zhou
  • 2016-11-09 17:44:44
  • 2981

hive与hbase集成

简介 这篇文章最初是基于介绍HIVE-705。这个功能允许Hive QL命令访问HBase表,进行读(select)、写(insert)操作。它甚至可以基于join、union操作对hbas...
  • vah101
  • vah101
  • 2014-03-30 18:55:31
  • 8793

Spark 读取Hbase 映射到Hive中的外部表报java.lang.NoSuchMethodError: org.apache.hadoop.hive.serde2.lazy.LazySim

错误信息 java.lang.NoSuchMethodError: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.initSerdePar...
  • u011242657
  • u011242657
  • 2018-01-10 20:50:55
  • 405

Hive_10. Hive中常用的 SerDe 和 当前社区的状态

最近在 Google 上看到一篇在 Hive 中利用正则表达式来自定义反序列化处理文本文件。百度后发现这块知识目前还没有人系统的总结一下。 所以我就不才把之前记录的资料跟大家分享一下: SerDe...
  • Mike_H
  • Mike_H
  • 2015-12-03 15:32:49
  • 6591

Hadoop Hive与Hbase关系 整合

用hbase做数据库,但由于hbase没有类sql查询方式,所以操作和计算数据非常不方便,于是整合hive,让hive支撑在hbase数据库层面 的 hql查询.hive也即 做数据仓库 1. 基...
  • liuzhenwen
  • liuzhenwen
  • 2014-06-02 06:44:32
  • 43447

Hive与Hbase关系整合

近期工作用到了Hive与Hbase的关系整合,虽然从网上参考了很多的资料,但是大多数讲的都不是很细,于是决定将这块知识点好好总结一下供大家分享。 本篇文章在具体介绍Hive与Hbase整合之前...
  • a2011480169
  • a2011480169
  • 2016-06-05 10:16:59
  • 10760

Hive和Hbase的数据整合联系

lz最近在研究hadoop家族中非常重要的两个工具:hive和hbase。这两个工具分别对应于类sql的hadoop数据查询和hadoop的database。都是基于hadoop中的hdfs。 下图是...
  • sun_wangdong
  • sun_wangdong
  • 2017-07-21 10:34:11
  • 746
收藏助手
不良信息举报
您举报文章:hive与hbase整合过程
举报原因:
原因补充:

(最多只允许输入30个字)