zoukankan      html  css  js  c++  java
  • Hbase 表与Hive 表的映射操作

    一、环境准备

    需要将HBase的jar包拷贝到Hive中,以便Hive运行时能访问到Hbase

    这里演示创建软连接的方式

    ln -s $HBASE_HOME/lib/HBase-common-1.3.1.jar  $HIVE_HOME/lib/HBase-common-1.3.1.jar
    ln -s $HBASE_HOME/lib/HBase-server-1.3.1.jar $HIVE_HOME/lib/HBase-server-1.3.1.jar
    ln -s $HBASE_HOME/lib/HBase-client-1.3.1.jar $HIVE_HOME/lib/HBase-client-1.3.1.jar
    ln -s $HBASE_HOME/lib/HBase-protocol-1.3.1.jar $HIVE_HOME/lib/HBase-protocol-1.3.1.jar
    ln -s $HBASE_HOME/lib/HBase-it-1.3.1.jar $HIVE_HOME/lib/HBase-it-1.3.1.jar
    ln -s $HBASE_HOME/lib/htrace-core-3.1.0-incubating.jar $HIVE_HOME/lib/htrace-core-3.1.0-incubating.jar
    ln -s $HBASE_HOME/lib/HBase-hadoop2-compat-1.3.1.jar $HIVE_HOME/lib/HBase-hadoop2-compat-1.3.1.jar
    ln -s $HBASE_HOME/lib/HBase-hadoop-compat-1.3.1.jar $HIVE_HOME/lib/HBase-hadoop-compat-1.3.1.jar

    二、Hbase中无表数据

    此时hive需要建立一个内部表来管理数据,并且导入数据时只能用insert

    数据如下

    depid    deptname         sal
    10      ACCOUNTING      1700
    20      RESEARCH        1800
    30      SALES           1900
    40      OPERATIONS      1700    

     2.1hive建表语句

    create table hive_table(
    deptid int,
    deptname string,
    sal string 
    )
    --固定格式,什么跟hive映射,就是XXXStorageHandler
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    --这里字段要跟上面的保持一致,意思为deptid作为rowkey,deptname作为info列族中的deptname列
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:deptname,info:num")
    --Hbase中的表名
    TBLPROPERTIES ("hbase.table.name" = "dept2");

     这里解释下为什么要用Stored by 而不是  row Format

    Hive建表时分本地表(native table)和非本地表(non-native table):

    本地表(native table): 指传统情况下。hive中表的数据是直接存储在hdfs上!建表时,可以指定ROW FORMAT 和 STORED AS

    非本地表(non-native table): hive表中的数据没有存储在hdfs上!而是存储在其他的数据库中(例如hbase中,mongdb中,kafka中,ES中等等)

    建表时指定STORED BY ’类名‘

    STORED BY 代表,在向表中读写数据时,借助此handler类完成操作!

     

    ------------------------------------------------------------------------------------------------------

    这时可能会报错:xecution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V

    原因是hive跟Hbase版本不兼容,需要编译hive源码

     2.2利用insert导入数据

    insert into hive_table select * from dept;

    三、Hbase已有表数据

    跟上个不同的是,这里只允许建外部表

    3.1建表语句

    CREATE external TABLE hive_HBase_dept_table(
    deptid int,
    deptname string,
    num int
    )
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    --这里要跟Hbase表中的列族和列对应起来 WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:deptname,info:num") TBLPROPERTIES ("hbase.table.name" = "dept")

    注意点

    hive中表的列的类型,需要和hbase表中存储的数据类型一致,或需要保证转换不能失败!

    在进行列的映射时,字段的顺序要和hive表中的列的顺序一致

    这样建出来的表直接就是带有数据的

  • 相关阅读:
    Python爬虫重写。
    python threading
    问题8:手机端实现点击按钮时更换颜色(解决IOS不显示背景)
    问题7:JavaScript 常用正则示例
    常见问题6:控制台报错整理——报错
    常见问题5:图片与文字垂直居中
    bootstrap学习总结
    常见问题4:文本不能选择 效果
    常见问题3:自适应大小高度与宽度
    javascript——10章 DOM
  • 原文地址:https://www.cnblogs.com/yangxusun9/p/12552200.html
Copyright © 2011-2022 走看看