Hive整合Hbase

旧街凉风 提交于 2019-11-28 17:34:56

hive 和 hbase 对比

Hive

  1. 数据仓库:

          Hive 的本质其实相当于将 HDFS 中已经存储的文件在 Mysql 中做了一个双射的关系,以方便使用 HQL 去管理查询。

  2. 用于数据分析、清洗

          Hive 适用于离线的数据分析和清洗,延迟较高。

  3. 基于 HDFS、MaoRedce

          Hive 存储的数据依旧在 DataNode 上,编写的 HQL 语句转换为 MapReduce 代码执行。

HBase

  1. 数据库

          是一种面向列存储的非关系型数据库。

  2. 用于存储结构化和非结构化的数据

         适用于单表非关系型数据库的数据

  3. 基于 HDFS

         适用于单表非关系型数据库的数据,不适合做关联查询,类似 JOIN 等操作。

  4. 延迟较低,接入在线业务使用

     面对大量的企业数据,Hbase 可以直接单表大量数据的存储,同时提供了高效的数据访问速度。

应用场景及编译安装

  1. Hbase 作为 Hive 的数据源
    在这里插入图片描述
  2. 构建低延时的数据仓库

在这里插入图片描述

  1. 重新编译 hive 的jar包,使其兼容hbase。

          Hbase 与 Hive 的集成在最新的两个版本中无法兼容。所以,我们只能重新编译:hive-hbase-handler-1.2.2.jar ,并把编译好的 jar 包放到 hive 的 lib 目录下。

    1. 下载 Hive 源码地址
      单击进入http://archive.apache.org/dist/hive/hive-1.2.1/

    在这里插入图片描述

    1. 解压 Hive 源码
    2. 进入 Hive 源码,准备把 hbase-handler 模块引入 Eclipse 项目中
      1. 创建 Java项目
      2. 创建 lib 文件夹
      3. 把 Hive 和 Hbase 安装包 lib 目录下的所有 jar 包,复制到 java 项目的lib目录下。
      4. 把lib包下的所有jar包Build Path,添加到类路径。
    3. 打包项目,开始重新编译
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      1. 替换hive/lib目录下的hive-hbase-handler-1.2.1.jar
  2. hive和hbase 结合使用
    环境准备

    1. 将编译好的 hive-hbase-handler-1.2.2.jar 放到 hive 的 lib 目录下
    2. 将 HBASE 的 jar 包映射到 hive 的lib 下,在 hive-env.sh 文件中添加
      export HIVE_CLASSPATH=$HIVE_CLASSPATH:/opt/software/hbase-1.2.1/lib/*
      
    3. 在 hive-site.xml 中修改 zookeeper 的属性:
      <property>
        <name>hbase.zookeeper.quorum</name>
        <value>node2,node3,node4</value>
      </property>
      <property>
        <name>hive.zookeeper.quorum</name>
        <value>node2,node3,node4</value>
      </property>
      <property>
        <name>hive.zookeeper.client.port</name>
        <value>2181</value>
      </property>
      
  3. hive 表映射到 hbase 表中

    1. 创建映射 hbase 的表
      create  table hive_test(
      

    id string,
    name string,
    age int,
    address string
    )STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
    WITH SERDEPROPERTIES (“hbase.columns.mapping” = “:key,f1:name,f2:age,f3:address”)
    TBLPROPERTIES (“hbase.table.name” = “hbaseFromhive”);
    ````
    注意:

          在 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

    1. 进入hbase shell查看 hbase 映射表是否产生
      list

    2. 查看 hbase 映射表的结构和数据
      desc ‘tableName’

    3. Hive 表加载数据
      在这里插入图片描述

      数据来源于另一张表:insert overwrite table hive_test select * from hive_source;

      1. 查看hive 和hbase 中表的数据
        在这里插入图片描述
        在这里插入图片描述
        映射表可以查看到 hive 表中的数据。

仅供参考

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!