zoukankan      html  css  js  c++  java
  • Hive HBase 整合

    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  


    //所有的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  



    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");  


    hbase.table.name 定义在hbase的table名称 
    hbase.columns.mapping 定义在hbase的列族 



    2.使用sql导入数据 
    i.预先准备数据 
    a)新建hive的数据表

    Java代码 复制代码 收藏代码
    1. CREATE TABLE pokes (foo INT, bar STRING);   


    b)批量插入数据

    Java代码 复制代码 收藏代码
    1. 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  

     

    Java代码 复制代码 收藏代码
    1. 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  



    3查看数据

    Java代码 复制代码 收藏代码
    1. hive> select * from  hbase_table_1;  


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

    hbase 
    1.登录hbase

    Java代码 复制代码 收藏代码
    1. [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  



    3.查看加载的数据

    Java代码 复制代码 收藏代码
    1. hbase(main):002:0> scan 'xyz'  
    2. ROW                          COLUMN+CELL                                                                                          
    3.  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  



    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  


    刚刚在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");  





    三、多列和多列族(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. );  


    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;  



    这个有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  



    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  



    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  

  • 相关阅读:
    sql2slack alash3al 开源的又个轻量级工具
    pgspider fetchq 扩展docker镜像
    godns 集成coredns 的demo
    godns 简单dnsmasq 的dns 替换方案
    aviary.sh 一个基于bash的分布式配置管理工具
    使用coredns 的template plugin实现一个xip 服务
    nginx 代理 coredns dns 服务
    基于nginx proxy dns server
    几个不错的geodns server
    spring boot rest api 最好添加servlet.context-path
  • 原文地址:https://www.cnblogs.com/charlist/p/7122111.html
Copyright © 2011-2022 走看看