• hive与hbase整合


    hive与hbase整合。hive2.3.3版本与hbase1.2.6版本。

    介绍

    版本信息

    hive1.x兼容hbase0.98.x及之前版本,hive2.x兼容hbase1.x及之后版本。

    hive与hbase整合,允许hql 语句访问hbase表,包括select 和insert,甚至可以通过join、union方式将hbase表和hive表组合在一起。

    storage handlers

    StorageHandler类是org.apache.hadoop.hive.hbase.HBaseStorageHandler,该类在hive-hbase-handler-x.y.z.jar中。不同于elasticsearch-hadoop-x.y.z.jar 因为是由ES公司维护的而未预装在hive 安装包中,hive-hbase-handler-x.y.z.jar 是由hive 组织维护的,从groupId=org.apache.hive 就可以看出,故该jar是预装在hive 安装包中的,具体是在$HIVE_HOME/lib 目录中。

    为了能正确连接hbase服务,还需要设置hiveconf。

    示例:

    在命令行连接hbase

    bin/hive --hiveconf hbase.zookeeper.quorum=zk1:port[,zk2:port,zk3:port]

    通常在hbase 服务器会安装zookeeper,用来在多台hbase 中选举hbase master。实测,即使只有单台hbase,用start-hbase.sh 启动hbase服务后,也会启动自带的zookeeper服务,端口默认是2181,可以在hbase-site.xml 中由hbase.zookeeper.property.clientPort 配置项配置。

    为了新建一个由hive 管理的hbase 表,在create table 时用stored by 关键字

    示例:

    create table hbase_table_1 (key int, value string)
    stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    with serdeproperties ("hbase.columns.mapping" = ":key,cf1:val")
    tblproperties ("hbase.table.name" = "xyz", "hbase.mapred.output.outputtable" = "xyz");

    hbase.columns.mapping 属性是必需的,在下面讲解。

    hbase.table.name 属性是可选的,它控制在hbase中表的名字,可以和hive表名不一样。在上例中,表在hive中的名字是hbase_table_1,在hbase中是xyz。如果没指定的话,hive和hbase中的表名是一样的。

    hbase.mapred.output.outputtable 属性是可选的,但如果想往表中插入数据的话,则是必须的,该属性会被hbase.mapreduce.TableOutputFormat 使用。

    执行完上面的建表语句之后,就可以在hbase中看到xyz表了。

    通过往hive表插入数据来向hbase表插入数据:

    insert overwrite table hbase_table_1 select * from pokes where foo = 98;

    这个时候,查hbase_table_1表和xyz表都可以看到这条记录。

    插入大量数据时可能由于wal开销而很慢,可以在insert 前设置hive.hbase.wal.enabled=false,即set hive.hbase.wal.enabled=false;

    值的注意的是,禁用hbase wal可能会造成数据丢失。

    如果想用hive访问一个现存的hbase 表,则需创建外部表

    示例:

    create external table hbase_table_2 (key int, value string)

    stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

    with serdeproperties ("hbase.columns.mapping" = "cf1:val")

    tblproperties ("hbase.table.name" = "some_existing_table", "hbase.mapred.output.outputtable" = "some_existing_table");

    同样,hbase.columns.mapping 属性是必需的,它会校验现存hbase表的列族。

    hbase.table.name 和 hbase.mapred.output.outputtable 都是可选的。

    column mapping

    列映射

    serdeproperties (hbase.columns.mapping) 控制着hbase 列到hive 列的映射。

    对每一个hive 列,都必须在hbase.columns.mapping 属性值中指定,多个列以逗号分隔。hbase.columns.mapping值字符串中不能有空格。

    映射条目格式必须是:key 或 :timestamp 或 column-family-name:[column-name][#(binary | string)]

  • 相关阅读:
    vscode 在linux中,切换语言模式快捷键
    转载大神的一篇文章----【如何选择开源许可证?】
    Kibana6.x.x——源码发布
    Kibana6.x.x——【Running "run:optimizeBuild" (run) task】出现警告信息
    linux系统为文件添加执行权限
    Kibana6.x.x——执行yarn build出现的警告信息记录
    Kibana6.x.x——导航权限控制入门
    poj 2187:Beauty Contest(计算几何,求凸包,最远点对)
    poj 2386:Lake Counting(简单DFS深搜)
    蓝桥杯 第三届C/C++预赛真题(10) 取球游戏(博弈)
  • 原文地址:https://www.cnblogs.com/koushr/p/9574996.html
Copyright © 2020-2023  润新知