• hive-hbase-handler方式导入hive表数据到hbase表中


    偶然想到hbase特性是字段可扩张,查询效率搞,hive是字段定死查询走MR离线,hbase-hive映射表,可以hive导数据出来做分析,hbase数据做快速查询。例如做分区表的情况下,hive不定对字段进行定位查询落到哪一个分区,可以试试用hbase放到rowkey进行批量get出来更新,会很快,不过涉及到写java。写这个文章记录下,找时间做下实践
     
    Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive-hbase-handler.jar工具类 ;
    hive-hbase-handler.jar在hive的lib包中而不是在hbase的lib中,hive0.6版本以后;
    创建hive表的同时创建hbase表,删除 hive表的同时也会删除对应的hbase表。
     
    使用前提:配置好hive和hbase对应的CDH版本,本案例使用的hive版本是hive-0.12.0-cdh5.0.0,HBase使用的版本是hbase-0.96.1.1-cdh5.0.0
     
    添加$HIVE_HOME/conf/hive-env.sh配置属性
    export HIVE_AUX_JARS_PATH=/home/hadoop/app/hbase-0.96.1.1-cdh5.0.0/lib

    启动hive:推荐使用$HIVE_HOME/bin/hive -hiveconf hbase.zookeeper.quorum=hadoop000 -hiveconf hive.root.logger=DEBUG,console启动,可以看到更加详细的日志信息

    案例一:操作简单表单cf

    创建hive-hbase表:

    CREATE TABLE hive_hbase_table_kv(key string, value string) 
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
    TBLPROPERTIES ("hbase.table.name" = "hbase_hive_table_kv");
    key与:key对应
    value与:val对应
    hbase_hive_table_kv为hbase的表名
    hive_hbase_table_kv为hive表名

    创建hive表并导入数据

    CREATE TABLE kv (key STRING, value STRING);
    LOAD DATA LOCAL INPATH '/home/spark/app/spark-1.0.0-bin-2.3.0-cdh5.0.0/examples/src/main/resources/kv1.txt' OVERWRITE INTO TABLE kv;
    INSERT OVERWRITE TABLE hive_hbase_table_kv SELECT key, value FROM kv;

    查看hive和hbase发现均创建了表,并且在两边均能查询到数据。

    案例二:操作简单表多cf

    CREATE TABLE hbase_table_2(key string, value1 string, value2 string, value3 string) 
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES (
    "hbase.columns.mapping" = ":key,a:b,a:c,d:e"
    );

    b/c字段属于a列族,e属于d列族。

    默认不指定hbase的表名就和hive的表名相同

    导入hive表数据:INSERT OVERWRITE TABLE hbase_table_2 SELECT empno, ename, job, deptno  FROM emp;

    案例三:操作分区表

    CREATE TABLE hbase_table_3(key string, ename string, job string, sal double) partitioned by(pt string)
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,a:b,a:c,d:e")
    TBLPROPERTIES ("hbase.table.name" = "hbase_table_3");

    导入hive数据:

    INSERT OVERWRITE TABLE hbase_table_3 PARTITION(pt='2013-08-01') SELECT empno, ename, job, sal FROM emp;

    注意事项:

    与hbase整合的有分区的表在使用hive查询时存在问题: select * from table查询不显示数据,select column from table可以查到数据

    为什么select * from xxx 不显示数据?

    select * from xxx在普通表中是直接读取HDFS文件,而使用hive-hbase-handler的方式来导入数据的时候,数据是存放在hbase的hdfs上;

    在这里是直接从HBase进行查询。查询是成功了,但是hive并不会展示。

  • 相关阅读:
    powerpc调试工具的使用
    微软的开发工具是我见过比较难用的
    Spring之jdbcTemplate:查询的三种方式(单个值、单个对象、对象集合)
    静态工厂方法和实例工厂方法
    理解.NET Framework
    .NET相关的概念简介
    二、文档工具 swagger
    Java Web学习(二)数据加密
    Java Web学习(一)Web基础
    Oracle学习(十二)标量函数
  • 原文地址:https://www.cnblogs.com/yaohaitao/p/7589525.html
Copyright © 2020-2023  润新知