您的位置:首页 > 其它

hbase与hive集成

2017-09-19 00:41 323 查看
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表中插入数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: