Hive HBase 整合(中文)

67 篇文章 0 订阅
54 篇文章 0 订阅
hive hbase整合,要求比较多,1.hive的得是0.6.0(当前最新的版本)
2.hive本身要求hadoop的最高版本是hadoop-0.20.2
3.要求hbase的版本是0.20.3,其他版本需要重新编译hive_hbase-handler
但是新版的hbase(0.90)变动特别大,根本无法从编译。这点比较恶心,hbase目前升级比较快,当前是0.90(从0.20.6直接跳到0.89),至于为什么这样跳跃,参考官方的解释http://wiki.apache.org/hadoop/Hbase/HBaseVersions


1)启动Hbase,
要求hbase-0.20.3,zookeeper-3.2.2
如果使用的不是hbase-0.20.3需要重新编译hive_hbase-handler.jar

2)单节点HBase的连接
./bin/hive -hiveconf hbase.master=master:60000

3)集群HBase的连接
1.启动zookeeper
2.启动hbase
3.启动hive,添加zookeeper的支持
Java代码 复制代码  收藏代码
  1. ./bin/hive -hiveconf hbase.zookeeper.quorum= master,slave-A,slave-B  
./bin/hive -hiveconf hbase.zookeeper.quorum= master,slave-A,slave-B

//所有的zookeeper节点

二、插入数据
启动
Java代码 复制代码  收藏代码
  1. ./bin/hive --auxpath /data/soft/hive/lib/hive_hbase-handler.jar,/data/soft/hive/lib/hbase-0.20.3.jar,/data/soft/hive/lib/zookeeper-3.2.2.jar  -hiveconf hbase.zookeeper.quorum=slave-001,slave-002,slave-003  
./bin/hive --auxpath /data/soft/hive/lib/hive_hbase-handler.jar,/data/soft/hive/lib/hbase-0.20.3.jar,/data/soft/hive/lib/zookeeper-3.2.2.jar  -hiveconf hbase.zookeeper.quorum=slave-001,slave-002,slave-003


hive
1.创建hbase识别的数据库
Java代码 复制代码  收藏代码
  1. CREATE TABLE hbase_table_1(key int, value string)    
  2. STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
  3. WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")   
  4. TBLPROPERTIES ("hbase.table.name" = "xyz");  
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导入数据
i.预先准备数据

a)新建hive的数据表
Java代码 复制代码  收藏代码
  1. CREATE TABLE pokes (foo INT, bar STRING);   
CREATE TABLE pokes (foo INT, bar STRING); 

b)批量插入数据
Java代码 复制代码  收藏代码
  1. hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;   
hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes; 

这个文件位于hive的安装目录下, examples/files/kv1.txt

Java代码 复制代码  收藏代码
  1. ii.使用sql导入hbase_table_1  
ii.使用sql导入hbase_table_1

Java代码 复制代码  收藏代码
  1. INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=86;  
INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=86;

注意,默认的启动会报错的
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.ExecDriver
启动的时候要添加
Java代码 复制代码  收藏代码
  1. -auxpath /data/soft/hive/lib/hive_hbase-handler.jar,/data/soft/hive/lib/hbase-0.20.3.jar,/data/soft/hive/lib/zookeeper-3.2.2.jar  
-auxpath /data/soft/hive/lib/hive_hbase-handler.jar,/data/soft/hive/lib/hbase-0.20.3.jar,/data/soft/hive/lib/zookeeper-3.2.2.jar


3查看数据
Java代码 复制代码  收藏代码
  1. hive> select * from  hbase_table_1;  
hive> select * from  hbase_table_1;

会显示刚刚插入的数据
86      val_86

hbase
1.登录hbase
Java代码 复制代码  收藏代码
  1. [root@master hbase]# ./bin/hbase shell  
[root@master hbase]# ./bin/hbase shell


2.查看表结构
Java代码 复制代码  收藏代码
  1. hbase(main):001:0> describe 'xyz'  
  2. DESCRIPTION                                                             ENABLED                                  
  3.  {NAME => 'xyz', FAMILIES => [{NAME => 'cf1', COMPRESSION => 'NONE', VE true                                     
  4.  RSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY =>                                          
  5.   'false', BLOCKCACHE => 'true'}]}                                                                               
  6. 1 row(s) in 0.7460 seconds  
hbase(main):001:0> describe 'xyz'
DESCRIPTION                                                             ENABLED                               
 {NAME => 'xyz', FAMILIES => [{NAME => 'cf1', COMPRESSION => 'NONE', VE true                                  
 RSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY =>                                       
  'false', BLOCKCACHE => 'true'}]}                                                                            
1 row(s) in 0.7460 seconds


3.查看加载的数据

Java代码 复制代码  收藏代码
  1. hbase(main):002:0> scan 'xyz'  
  2. ROW                          COLUMN+CELL                                                                                          
  3.  86                          column=cf1:val, timestamp=1297690405634, value=val_86    
hbase(main):002:0> scan 'xyz'
ROW                          COLUMN+CELL                                                                                       
 86                          column=cf1:val, timestamp=1297690405634, value=val_86  
                                                    
1 row(s) in 0.0540 seconds
可以看到,在hive中添加的数据86,已经在hbase中了

4.添加数据
Java代码 复制代码  收藏代码
  1. ' hbase(main):008:0> put 'xyz','100','cf1:val','www.360buy.com'     
  2. 0 row(s) in 0.0630 seconds  
' hbase(main):008:0> put 'xyz','100','cf1:val','www.360buy.com'  
0 row(s) in 0.0630 seconds


Hive
参看hive中的数据
Java代码 复制代码  收藏代码
  1. hive> select * from hbase_table_1;                                               
  2. OK   
  3. 100     www.360buy.com   
  4. 86      val_86   
  5. Time taken: 8.661 seconds  
hive> select * from hbase_table_1;                                            
OK
100     www.360buy.com
86      val_86
Time taken: 8.661 seconds

刚刚在hbase中插入的数据,已经在hive里了

hive访问已经存在的hbase
使用CREATE EXTERNAL TABLE
Java代码 复制代码  收藏代码
  1. CREATE EXTERNAL TABLE hbase_table_2(key int, value string)    
  2. STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
  3. WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf1:val")   
  4. TBLPROPERTIES("hbase.table.name" = "some_existing_table");  
CREATE EXTERNAL TABLE hbase_table_2(key int, value string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf1:val")
TBLPROPERTIES("hbase.table.name" = "some_existing_table");




三、多列和多列族(Multiple Columns and Families)
1.创建数据库

Java代码 复制代码  收藏代码
  1. CREATE TABLE hbase_table_2(key int, value1 string, value2 int, value3 int)    
  2. STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
  3. WITH SERDEPROPERTIES (   
  4. "hbase.columns.mapping" = ":key,a:b,a:c,d:e"  
  5. );  
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"
);

2.插入数据
Java代码 复制代码  收藏代码
  1. INSERT OVERWRITE TABLE hbase_table_2 SELECT foo, bar, foo+1, foo+2    
  2. FROM pokes WHERE foo=98 OR foo=100;  
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查看结构
Java代码 复制代码  收藏代码
  1. hbase(main):003:0> describe "hbase_table_2"  
  2. DESCRIPTION                                                             ENABLED                                  
  3.  {NAME => 'hbase_table_2', FAMILIES => [{NAME => 'a', COMPRESSION => 'N true                                     
  4.  ONE', VERSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_M                                          
  5.  EMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'd', COMPRESSION =>                                           
  6.  'NONE', VERSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN                                          
  7.  _MEMORY => 'false', BLOCKCACHE => 'true'}]}                                                                     
  8. 1 row(s) in 1.0630 seconds  
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的数据
Java代码 复制代码  收藏代码
  1. hbase(main):004:0> scan 'hbase_table_2'  
  2. ROW                          COLUMN+CELL                                                                         
  3.  100                         column=a:b, timestamp=1297695262015, value=val_100                                  
  4.  100                         column=a:c, timestamp=1297695262015, value=101                                      
  5.  100                         column=d:e, timestamp=1297695262015, value=102                                      
  6.  98                          column=a:b, timestamp=1297695242675, value=val_98                                   
  7.  98                          column=a:c, timestamp=1297695242675, value=99                                       
  8.  98                          column=d:e, timestamp=1297695242675, value=100                                      
  9. 2 row(s) in 0.0380 seconds  
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中查看
Java代码 复制代码  收藏代码
  1. hive> select * from hbase_table_2;   
  2. OK   
  3. 100     val_100 101     102  
  4. 98      val_98  99      100  
  5. Time taken: 3.238 seconds  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Hadoop生态系统中,Hive是一个用于数据仓库和数据分析的开源工具,而HBase是一个开源的、分布式的、非关系型数据库。在某些情况下,因为版本不兼容或者依赖关系错误,可能会发生Hive整合HBase时出现IncompatibleClassChangeError(不兼容的类变更错误)。 IncompatibleClassChangeError是Java虚拟机(JVM)在运行期间抛出的错误,它表示在编译时使用的类与运行时使用的类发生了不兼容的变化。当Hive试图整合HBase时,如果Hive代码使用了HBase中的类,但实际运行时使用的HBase库与Hive编译时使用的库不兼容,就会出现这个错误。 解决这个问题的步骤如下: 1. 检查HBaseHive的版本是否兼容。在整合HiveHBase之前,确保使用的HBase版本与Hive版本兼容,并遵循它们之间的兼容性要求。 2. 检查依赖关系。在使用Hive整合HBase时,确保在Hive配置文件(hive-site.xml)中正确地设置了HBase相关的依赖。这包括指定HBase的主机名、端口号和表名等。 3. 检查类路径。确保在Hive运行期间正确配置了HBase的类路径,以便可以找到所需的HBase类。这可以通过检查HiveHBase的环境变量设置或者Hive的启动脚本来完成。 4. 更新HiveHBase的库。如果以上步骤都没有解决问题,可能需要升级HiveHBase的库版本,以确保它们之间的兼容性。 综上所述,Hive整合HBase时出现IncompatibleClassChangeError错误可能是由于版本不兼容或者依赖关系错误导致的。通过检查版本兼容性、依赖关系、类路径和库更新等措施,可以解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值