zoukankan      html  css  js  c++  java
  • hive和hbase的整合

    参考网址(谢谢大佬的分享):

    https://blog.csdn.net/vah101/article/details/22597341

    https://blog.csdn.net/weixin_30773135/article/details/96920115

    https://blog.csdn.net/vah101/article/details/22597341

    案例:hive 2.1.1+hbase1.6.0

    如何查看hive的版本?

     如何查看hbase的版本

    0.准备工作:

    (1).将hbase的zk配置,添加到hive中

    修改hive-site.xml文件,将以下配置信息,添加到最后

    <configuration>

    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive_test/warehouse</value>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://c/hive_test?createDatabaseIfNotExist=true</value>
    </property>

    <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    </property>

    <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
    </property>
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>c1:2181,c2:2181,c3:2181</value>
    </property>
    </configuration>

    (2).将hbase的包导入到hive的环境变量中

    修改hive-env.sh文件,将以下配置信息,添加到最后

    # Set HADOOP_HOME to point to a specific hadoop install directory
     HADOOP_HOME=/usr/local/hadoop-2.7.1
    
    # Hive Configuration Directory can be controlled by:
     export HIVE_CONF_DIR=/opt/hive/conf
    
    # Folder containing extra ibraries required for hive compilation/execution can be controlled by:
    # export HIVE_AUX_JARS_PATH=
    export HIVE_CLASSPATH=$HIVE_HOME/lib/*:/usr/local/hbase/lib/*

    1.hbase表映射到hive表中

    (1)创建hbase表

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

    (2)向hbase表中添加数据

    put 'hbase_test','r1','f1:name','zhangsan'
    put 'hbase_test','r1','f2:age','12'
    put 'hbase_test','r1','f3:sex','boy'
    put 'hbase_test','r2','f1:name','lisi'
    put 'hbase_test','r2','f2:age','12'
    put 'hbase_test','r2','f3:sex','boy'
    put 'hbase_test','r3','f1:name','wangwu'
    put 'hbase_test','r3','f2:age','12'
    put 'hbase_test','r3','f3:sex','girl'

    (3)创建与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");

    创建的外部表,即使删除hive的外部表,也不会影响到hbase的表和数据,desc formatted hiveFromHbase查看表数据的hdfs的路径,只是创建了一个目录,并没有数据。

    即,只是创建了一个hive的链接,可以查询hbase的数据。

    1. 删除hive表对hbase没有影响;
    2. 但是先删除hbase表hive就会报TableNotFoundException;

    (4)查看hive表

    2.hive表映射到hbase表中

    (1)创建hive表,关联到hbase表,hbase表会新建

    CREATE  TABLE hive_test(
    id int,
    name string,
    age int,
    sex string
    ) 
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age,info:sex")
    TBLPROPERTIES ("hbase.table.name" = "hbaseFromHive");

    创建的内部表,内部表指向hbase表。当hive表删除时,hbase的表也不存在了;当hbase的表删除时,hive表也会删除

    1. 当hive删除hive表时,hbase表也会删除。
    2. 当先删除hbase的时候,先disabled table,然后drop table;这时hbase表就被删除了,zookeeper里面也就删除了。但是hive里面还在,用show tables还能查出来。mysql中TBLS里面还有hive表的信息。但是用select * from hive 查询的时候报错,表不存在(TableNotFoundException)然后删除hive里面的表的时候会报错TableNotFoundException)。继续show tables时,发现表已经不在了。TBLS里面也没有hive表了

    注意:不能直接使用load data local inpath '/opt/data.txt' into table hive_test;

    会报错:

    FAILED:SemanticException [Error 10101]: A non-native table cannot be used as targetfor LOAD

    (2)创建一张本地hive表,将数据导入本地hive表

    CREATE  TABLE hive_test2(
    id int,
    name string,
    age int,
    sex string
    )row format delimited
    fields terminated by '	'
    stored as textfile;  

    load data local inpath '/opt/data.txt' into table hive_test2;

    (3)将本地hive表的数据,导入到hive表

    insert into hive_test select * from hive_test2;

    (4)查看hbase表

     总结:

    hive和hbase的整合,本质上是运用了org.apache.hadoop.hive.hbase.HBaseStorageHandler类,在运用时,需要注意以下几点

    (1)hive和hbase的版本需要匹配

    (2)hive需要修改的配置信息要修改正确

    (3)hbase.columns.mapping表示hive和hbase的映射关系,第一个是rowkey值,后面是列族:列

    例如:"hbase.columns.mapping" = ":key,info:name,info:age,info:sex"

    (4)hbase.table.name表示hbase表的名字

    注意:

    在hive1.2.1 跟hbase 0.98整合时,需要添加:

    "hbase.mapred.output.outputtable" = "hbaseFromhive" 表属性

    TBLPROPERTIES ("hbase.table.name" = "hbaseFromhive","hbase.mapred.output.outputtable"="hbaseFromhive");

    如果不添加会报错:Must specify table name

    hive+hbase这种方式,无论哪种,数据都是在hbase中存放的,hive只会在hdfs上创建目录,不会生成真正的数据文件;

    应用场景

    1.将ETL的数据,存入Hbase

    2.Hbase作为Hive的数据库

    3.构建低延时的数据仓库

    爱人不亲,反其仁;治人不治,反其智;礼人不答,反其敬;行有不得,反求诸己
  • 相关阅读:
    node入门(一)——安装
    移动web开发基础(二)——viewport
    移动web开发基础(一)——像素
    关于min-height:100%的解决办法
    用类与原型写一个组件(三)——学习笔记
    用类与原型写一个组件(二)——学习笔记
    用类与原型写一个组件(一)——学习笔记
    js类、原型——学习笔记
    Android 常用RGB值及名称
    AES加密示例
  • 原文地址:https://www.cnblogs.com/lina-2015/p/14331013.html
Copyright © 2011-2022 走看看