hbase与hive集成

来源:互联网 发布:windows运行lua脚本 编辑:程序博客网 时间:2024/05/18 02:53

hbase与hive集成
    
官方部署使用参考资料:
    官方文档步骤在hive的官网上:


1、拷贝jar包或创建jar包的软连接
    hive作为一个客户端访问hbase需要hbase相同jar包的依赖支持
    创建软连接,hive作为hbase的客户端需要访问hbase,需要相关jar包依赖
    软连接类似于快捷方式,删除软连接不会删除原文件
       
针对Apache版本:    
export HBASE_HOME=/opt/modules/hbase-0.98.6-hadoop2
export HIVE_HOME=/opt/modules/apache-hive-0.13.1-bin

ln -s $HBASE_HOME/lib/hbase-common-0.98.6-hadoop2.jar  $HIVE_HOME/lib/hbase-common-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/hbase-server-0.98.6-hadoop2.jar $HIVE_HOME/lib/base-server-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/hbase-client-0.98.6-hadoop2.jar $HIVE_HOME/lib/hbase-client-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/hbase-protocol-0.98.6-hadoop2.jar $HIVE_HOME/lib/hbase-protocol-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/hbase-it-0.98.6-cdh5.3.3.jar $HIVE_HOME/lib/hbase-it-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/htrace-core-2.04.jar $HIVE_HOME/lib/htrace-core-2.04.jar
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-0.98.6-hadoop2.jar $HIVE_HOME/lib/hbase-hadoop2-compat-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-0.98.6-hadoop2.jar $HIVE_HOME/lib/hbase-hadoop-compat-0.98.6-hadoop2.jar
ln -s $HBASE_HOME/lib/high-scale-lib-1.1.1.jar $HIVE_HOME/lib/high-scale-lib-1.1.1.jar


针对CDH版本:

export HBASE_HOME=/opt/modules/hbase-0.98.6-cdh5.3.6
export HIVE_HOME=/opt/modules/hive-0.13.1-cdh5.3.6

ln -s $HBASE_HOME/lib/hbase-common-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-common-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-server-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-client-0.98.6-cdh5.3.6.jar  $HIVE_HOME/lib/hbase-client-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-protocol-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-protocol-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-it-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-it-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/htrace-core-2.04.jar $HIVE_HOME/lib/htrace-core-2.04.jar
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-hadoop2-compat-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar $HIVE_HOME/lib/hbase-hadoop-compat-0.98.6-cdh5.3.6.jar
ln -s $HBASE_HOME/lib/high-scale-lib-1.1.1.jar $HIVE_HOME/lib/high-scale-lib-1.1.1.jar
    注意:全部一起复制粘贴执行时,注意最后一条创建软连接的命令有没有执行!!!!  
    


2、修改hive-site.xml
        声明zookeeper的地址,根据自己的集群有几个声明几个;
        hive分析的数据在hbase里,hive关联hbase需要联系zookeeper       
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>192.168.134.101</value>
</property>



3、测试
    利用Hive的分析功能接口,将hbase表数据映射到hive表中,使用hql分析HBase表数据     
    实现思路:
        HBase中已经存储一张student信息表
        去Hive中创建外部表关联映射hbase中的这张student表


1)创建外部关联表
     在hbase中表数据已经存在的情况下要求创建一个外部表
     创建内部表会报错
    

CREATE EXTERNAL TABLE hive_hbase_student(
id int,
name string,
age string
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age")
TBLPROPERTIES ("hbase.table.name" = "student4");    


        
说明:    
    第一个key是固定格式,默认为hbase的rowkey,不需要指定列簇;
    其他字段会与hive表的字段顺序一一对应映射;
    hive字段的名称可以与hbase中列的名称不一致
    hive可以只映射出hbase表中的部分列

    
        
2)验证:    
    >select * from hive_hbase_student ;    

    
总结:
    如果第一步jar包的软连接没有创建好此时会报找不到某些类的错误
    一般我们创建hive与hbase表映射表都是外部表,在hive中删除外部表时hbase中表不会被同步删除;
    如果创建的是内部表,所关联的hbase中的表不能提前存在
        当在hive端执行完建表命令后(创建内部表)在hbase的关联表及列簇会同步生成
        内部表情况下在hive端删除hive表的同时会直接删除hbase中的对应的关联表
    hive与hbase外部关联后,数据实际存放在hbase表中
        在Hive表的hdfs存储路径下面:
            /user/hive/warehouse/hive_hbase_table    没有数据
        在Hbase表的hdfs存储路径下面:
            /hbase/data/default/xyz        有数据,实际存放点    

            
CREATE  TABLE  hive_hbase_student1(
id int,
name string,
sex string
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info1:name,info1:sex")
TBLPROPERTIES ("hbase.table.name" = "student2");        
    
    
    
------------------------------------------------------------------
                
思考:
    关联映射后向hive表中加入数据后hbase表中是否会同步数据,能否通过hive作为接口向hbase表中插入数据?
    
测试:    

1)向hive_hbase_student表中load加载数据

    $ vi student1.txt     //新建测试数据
10004   tom1    male    20
10005   mary1   female  18
10006   lio1    male    21

    > load data local inpath '/opt/modules/student1.txt' into table hive_hbase_student ;  
    //报错:非本地表不能使用load加载数据
    
    
2)向hive_hbase_student表中inster插入数据

CREATE TABLE temp1(
id int,
name string,
sex string,
age string
)
row format delimited fields terminated by '\t';   

CREATE TABLE temp1(
id int,
name string,
age string
)
row format delimited fields terminated by '\t';  
         
    > load data local inpath '/opt/modules/hbase-0.98.6-cdh5.3.6/data/student1.tsv' into table temp1 ;
    > insert into table hive_hbase_student select * from temp1 ;

    验证:
    > select * from hive_hbase_student
    > scan 'student'     
    

结论:    
    数据插入成功,可以通过hive作为接口向hbase表中插入数据



原创粉丝点击