• Hive入门3–Hive与HBase的整合(转载)


    转载于:http://www.javabloger.com/article/apache-hadoop-hive-hbase-integration.html

     

    Hive入门3–Hive与HBase的整合
    Apache Hive入门2
    Apache Hive入门1

    开场白:
    Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类 (Hive Storage Handlers), 大致意思如图所示:
    hive-hbase

    口水:
     对 hive_hbase-handler.jar 这个东东还有点兴趣,有空来磋磨一下。

    一、2个注意事项:
    1、需要的软件有 Hadoop、Hive、Hbase、Zookeeper,Hive与HBase的整合对Hive的版本有要求,所以不要下载.0.6.0以前的老版本,Hive.0.6.0的版本才支持与HBase对接,因此在Hive的lib目录下可以看见多了hive_hbase-handler.jar这个jar包,他是Hive扩展存储的Handler ,HBase 建议使用 0.20.6的版本,这次我没有启动HDFS的集群环境,本次所有测试环境都在一台机器上。
        
    2、运行Hive时,也许会出现如下错误,表示你的JVM分配的空间不够,错误信息如下:
    Invalid maximum heap size: -Xmx4096m
    The specified size exceeds the maximum representable size.
    Could not create the Java virtual machine.

    解决方法:
    /work/hive/bin/ext# vim util/execHiveCmd.sh 文件中第33行
    修改,
    HADOOP_HEAPSIZE=4096

    HADOOP_HEAPSIZE=256

    另外,在 /etc/profile/ 加入 export $HIVE_HOME=/work/hive

    二、启动运行环境
    1启动Hive
    hive –auxpath /work/hive/lib/hive_hbase-handler.jar,/work/hive/lib/hbase-0.20.3.jar,/work/hive/lib/zookeeper-3.2.2.jar -hiveconf hbase.master=127.0.0.1:60000
    加载 Hive需要的工具类,并且指向HBase的master服务器地址,我的HBase master服务器和Hive运行在同一台机器,所以我指向本地。

    2启动HBase
    /work/hbase/bin/hbase master start

    3启动Zookeeper
    /work/zookeeper/bin/zkServer.sh start

    三、执行
    在Hive中创建一张表,相互关联的表
    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");

    在运行一个在Hive中建表语句,并且将数据导入
    建表
        CREATE TABLE pokes (foo INT, bar STRING);
    数据导入
        LOAD DATA LOCAL INPATH '/work/hive/examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

    在Hive与HBase关联的表中 插入一条数据
        INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=98;
    运行成功后,如图所示:
    hive

    插入数据时采用了MapReduce的策略算法,并且同时向HBase写入,如图所示:
    Map-Reduce Job for INSERT

    在HBase shell中运行 scan 'xyz' 和describe "xyz" 命令,查看表结构,运行结果如图所示:
    hive

    xyz是通过Hive在Hbase中创建的表,刚刚在Hive的建表语句中指定了映射的属性 "hbase.columns.mapping" = ":key,cf1:val"  和 在HBase中建表的名称 "hbase.table.name" = "xyz"

    在hbase在运行put命令,插入一条记录
        put 'xyz','10001','cf1:val','www.javabloger.com'

    在hive上运行查询语句,看看刚刚在hbase中插入的数据有没有同步过来,
        select * from hbase_table_1 WHERE key=10001;
    如图所示:
    hive

    最终的效果
        以上整合过程和操作步骤已经执行完毕,现在Hive中添加记录HBase中有记录添加,同样你在HBase中添加记录Hive中也会添加, 表示Hive与HBase整合成功,对海量级别的数据我们是不是可以在HBase写入,在Hive中查询 喃?因为HBase 不支持复杂的查询,但是HBase可以作为基于 key 获取一行或多行数据,或者扫描数据区间,以及过滤操作。而复杂的查询可以让Hive来完成,一个作为存储的入口(HBase),一个作为查询的入口(Hive)。如下图示。
        hive mapreduce
        
        呵呵,见笑了,以上只是我面片的观点。

    先这样,稍后我将继续更新,感谢你的阅读

  • 相关阅读:
    jdbc连接数据库
    UUID
    Oracle 查询
    JAVA开发工具eclipse中@author怎么改
    JAVA实现多线程入门
    JAVA编程中的类和对象
    为ubuntu操作系统增加root用户
    搭建Java环境JDK,和运行环境JRE
    安装Ubuntu14.04版本的操作系统
    Eclipse连接到My sql数据库之前操作
  • 原文地址:https://www.cnblogs.com/chenli0513/p/2318338.html
Copyright © 2020-2023  润新知