Hive on Hbase

Hive on Hbase介绍

  • 功能:实现Hive与Hbase集成,使用Hive SQL对Hbase的数据进行处理

  • 原理

    • Hive的功能:使用HQL对表的数据进行处理

      • 本质:通过MapReduce对HDFS中的文件进行处理

      • 原理

        • TextInputFormat:读文件

        • TextOutputFormat:写文件

    • MapReduce的功能:读取数据进行分布式计算

      • InputFormat:输入类

        • TextInputFormat:默认的输入类,用于读取文件系统
        • DBInputFormat:用于读取JDBC数据库
          • 实现Sqoop导入的:将MySQL数据导入到Hive或者HDFS
        • TableInputFormat:用于读取Hbase数据
      • OutputFormat:输出类

        • TextOutputFormat:默认的输出类,用于将结果写入文件系统

        • DBOutputFormat:用于写入JDBC数据库

          • 实现Sqoop导出的:将HDFS数据写入MySQL
        • TableOutputFormat:用于写入HBase数据库

    • 原理:Hive可以通过MapReduce来实现映射读写Hbase表的数据

  • 特点

    • 优点:支持完善的SQL语句,可以实现各种复杂SQL的数据处理及计算,通过分布式计算程序实现,对大数据量的数据处理比较友好

    • 缺点:不支持二级索引,数据量不是特别大的情况下,性能一般

  • 应用

    • 基于大数据高性能的离线读写,并且使用SQL来开发

Hive on Hbase 配置

  • 需求

    • 配置Hive与Hbase集成,实现Hive中可以读写Hbase表
  • 分析

    • step1:修改Hive配置文件,指定Hbase的Zookeeper地址
    • step2:按顺序启动HDFS、ZK、Hbase、Hive
  • 实现

    • 全部操作在装有hive的节点配置

    • 修改hive-site.xml:Hive通过SQL访问Hbase,就是Hbase的客户端,就要连接zookeeper

      cd /export/server/hive-2.1.0-bin/
      vim conf/hive-site.xml
      
      <property>
      	<name>hive.zookeeper.quorum</name>
      	<value>node1,node2,node3</value>
      </property>
       <property>
      	<name>hbase.zookeeper.quorum</name>
      	<value>node1,node2,node3</value>
      </property>
      <property>
          <name>hive.server2.enable.doAs</name>
          <value>false</value>
      </property>
      
    • 修改hive-env.sh

      export HBASE_HOME=/export/server/hbase-2.1.0
      
    • 启动HDFS、ZK、Hbase:第一台机器

      start-dfs.sh
      /export/server/zookeeper-3.4.6/bin/start-zk-all.sh
      start-hbase.sh
      
    • 启动Hive和YARN:第三台机器

      #启动YARN
      start-yarn.sh
      #先启动metastore服务
      start-metastore.sh 
      #然后启动hiveserver
      start-hiveserver2.sh
      #然后启动beeline
      start-beeline.sh
      
  • 总结

    • 先配置Hive的配置文件:添加Hbase的地址
    • 然后按照先后顺序启动即可

    Hive on Hbase 实现

  • 需求

    • 在Hive中实现对Hbase表的数据读写
  • 分析

    • step1:如果表在Hbase中没有,Hive中没有,在Hive中创建表,指定在Hbase中创建关联表
      • 场景比较少
      • 在Hive中建一张表,自动在Hbase中也创建一张对应的表
    • step2:如果表在Hbase中有,但是Hive中没有,Hive中创建一张外部表,关联Hbase表
      • 主要应用的方式
      • Hbase中的表已经存在,已经有数据,构建一张Hive关联表,使用SQL进行查询
  • 实现

    • 在安装hive的机器中测试

    • 如果Hbase中表不存在:【用的比较少】

      • 创建测试数据文件

        vim /export/data/hive-hbase.txt
        1,zhangsan,80
        2,lisi,60
        3,wangwu,30
        4,zhaoliu,70
        
      • 创建测试表

        --创建测试数据库
        create database course;
        --切换数据库
        use course;
        --创建原始数据表
        create external table if not exists course.score(
        id int,
        cname string,
        score int
        ) row format delimited fields terminated by ',' stored as textfile ;
        --加载数据文件
        load data local inpath '/export/data/hive-hbase.txt' into table score;
        
      • 创建一张Hive与HBASE的映射表

        create table course.hbase_score(
        id int,
        cname string,
        score int
        )  
        stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
        with serdeproperties("hbase.columns.mapping" = "cf:name,cf:score") 
        tblproperties("hbase.table.name" = "hbase_score");
        
      • 将测试表的数据写入映射表

         set hive.exec.mode.local.auto=true;
         insert overwrite table course.hbase_score select id,cname,score from course.score;
        
    • 如果Hbase中表已存在,只能创建外部表

        create external table course.t1(
        key string,
        name string,
        age  string,
        addr string,
        phone string
        )  
        stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'  
        with serdeproperties("hbase.columns.mapping" = ":key,basic:name,basic:age,other:addr,other:phone") 
        tblproperties("hbase.table.name" = "itcast:t1");
      

在这里插入图片描述

  • 总结

    • Hive中的只是关联表,并没有数据,数据存储在Hbase表中

    • 在Hive中创建Hbase的关联表,关联成功后,使用SQL处理关联表

    • 如果Hbase中表不存在,默认使用Hive的第一列作为rowkey

    • 如果Hbase中表已存在,只能建外部表,使用:key来表示rowkey

    • HIve中与Hbase关联的表,不能使用load加载,只能使用insert,通过MR读写数据

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值