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

    摘要

    Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询、同时也可以将hive表中的数据映射到Hbase中。

       

    应用场景

    2.1 将ETL操作的数据存入HBase

       

       

        

    2.2 HBase作为Hive的数据源

       

       

    2.3 构建低延时的数据仓库

    环境准备

       

       

    3.1 hive与hbase整合环境配置

    • 修改hive-site.xml文件,添加配置属性(zookeeper的地址)

      [root@hadoop01 conf]# vim hive-site.xml

    <property>

    <name>hbase.zookeeper.quorum</name>

    <value>node1:2181,node2:2181,node3:2181</value>

    </property>

       

    • 引入hbase的依赖包

      将hbase安装目录下的lib文件夹下的包导入到hive的环境变量中,在hive-env.sh 文件中添加

      [root@hadoop01 conf]# vim hive-env.sh

    export HIVE_CONF_DIR=/usr/local/hive/conf

    export HIVE_CLASSPATH=$HIVE_CLASSPATH:$HBASE_HOME/lib/*

       

    至此、hive与hbase整合环境准备完成。

    实战

    4.1 hbase表映射到hive表中

    • 在hbase中创建表:表名hbase_test, 有三个列族 f1、f2、f3

         

    create 'hbase_test',{NAME => 'f1',VERSIONS => 1},{NAME => 'f2',VERSIONS => 1},{NAME => 'f3',VERSIONS => 1}

       

    • 插入数据

         

    put 'hbase_test','r1','f1:name','zhangsan'

    put 'hbase_test','r1','f2:age','20'

    put 'hbase_test','r1','f3:sex','male'

    put 'hbase_test','r2','f1:name','lisi'

    put 'hbase_test','r2','f2:age','30'

    put 'hbase_test','r2','f3:sex','female'

    put 'hbase_test','r3','f1:name','wangwu'

    put 'hbase_test','r3','f2:age','40'

    put 'hbase_test','r3','f3:sex','male'

       

       

       

    • 查询数据

         

         

    • 创建基于hbase的hive表

         

    CREATE EXTERNAL TABLE hiveFromHbase(

    rowkey string,

    f1 map<STRING,STRING>,

    f2 map<STRING,STRING>,

    f3 map<STRING,STRING>

    ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:,f2:,f3:")

    TBLPROPERTIES ("hbase.table.name" = "hbase_test");

       

    这里使用外部表映射到HBase中的表,这样,在Hive中删除表,并不会删除HBase中的表,否则,就会删除。另外,除了rowkey,其他三个字段使用Map结构来保存HBase中的每一个列族。

    • hbase.columns.mapping

      Hive表和HBase表的字段映射关系,分别为:Hive表中第一个字段映射:key(rowkey),第二个字段映射列族f1,第三个字段映射列族f2,第四个字段映射列族f3

    • hbase.table.name

      HBase中表的名字

         

    • hive中查询hbase表

         

      可以看到,Hive中有3行数据,因为有3个rowkey,每一个列族的列和值,分别被存储到Map结构中

         

    • Hive中插入数据到HBase表

         

    insert into table hiveFromHbase

    SELECT 'r4' AS rowkey,

    map('name','zhaoliu') AS f1,

    map('age','50') AS f2,

    map('sex','male') AS f3

    from person limit 1;

       

    插入成功后查看2张表的数据

       

    hive表hiveFromHbase:

       

       

    Hbase表hbase_test:

       

       

       

    Hive中的外部表hiveFromHbase,就和其他外部表一样,只有一份元数据,真正的数据是在HBase表中,Hive通过hive-hbase-handler来操作HBase中的表。

       

       

    4.2 hive表映射到hbase表中

    • 创建映射hbase的表

       

    create table hive_test(

    id string,

    name string,

    age int,

    address string

    )STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:name,f2:age,f3:address")

    TBLPROPERTIES ("hbase.table.name" = "hbaseFromhive");

       

       

    • 查看hbase映射表是否产生

         

    • 查看hbase映射表的表结构和数据

         

         

         

      由于hive表中没有加载数据,此时hbase中映射的表也无数据

         

         

    • Hive表加载数据

         

      数据来源于另一张表hive_source;

    查看hive_source的表结构和数据

       

    加载数据:

    insert overwrite table hive_test select * from hive_source;

       

       

    • 查看hive和hbase中表的数据

         

         

      映射表可以查看到hive表中的数据。

  • 相关阅读:
    20165312 我期望的师生关系
    zookeeper04---ZAB协议
    zookeeper03-集群搭建
    zookeeper02
    Zookeeper01
    防止重复提交
    手动抛出异常事务回滚问题
    redis-07主从复制
    redis06-事务
    Redis-05持久化
  • 原文地址:https://www.cnblogs.com/starzy/p/10585792.html
Copyright © 2011-2022 走看看