1. Introduction
    hive的主要不足: 存储和查询计划执行。文中提出了三个主要的改进点
    1. 新的文件格式 ORC
    2. 查询计划组件优化(关联优化器correlation optimizer
    3. 向量执行模型,以充分利用CPU CACHE
  2. Hive architecture
  3. 识别hive的不足
    1. 存储格式的不感知以及一次只能处理一行数据。在hive,存储效率由序列化和文件格式决定。以前支持的text和sequence格式,以及v0.4后支持的RCFile都是类型不感知的。RCFile每次只能处理一行数据。类型不感知意味着不能做有针对类型的优化;一次处理一行数据,意味着并行度低,并且序列化的压缩比低。
    2. 没有数据索引(包括统计汇总信息)以及不支持复杂数据类型。RCFile是为数据扫描设计的,并没有索引和提供其他语意以跳过无用的数据。不支持复杂类型的解析(如map、array),意味着访问该类型的任何一个成员,都要去读整个类型的数据。
    3. 忽略了数据操作之间的联系,导致出现很多的不必须shuffle。
    4. 每次处理一行数据也限制了对现代CPU缓存和并行处理的利用。
  4. 文件格式优化(ORC)
    类型识别;支持刚类型的数据索引;支持复杂数据类型分解
    1. 1 表的数据布局方式(The table placement method), 见上图。注意,ORC不支持将列放到列组里面。

      优点1: stripe的缺省大小为256m(RCFile为4M)
      优点2:支持复杂数据类型,见table1.

      有点3: stripe的边界与hdfs的边界对齐。通常,stripe大小会小于hdfs的block大小,使用这种对齐,可以确保一个stripe始终保存在同一个block内部。
    2. 数据索引(Indexes)
      处于加载速度的考虑,只使用稀疏索引。存在两种索引:
      1. 数据统计信息(data statistics)。包括counter/mix/max/sum/len
        数据统计信息分三个级别: 文件、stripe、逻辑数据块(缺省10000个value一个块,可配置)
      2. 位置指针(position pointer)。
    3. 压缩。
      有两个级别的压缩,
      1. 基于类型的压缩。(string类型的压缩,如果去重后数量除以总数量大于0.8使用字典压缩,否则使用byte类型压缩。
      2. 通用压缩方式(可选)(e.g., gzip,snappy等,默认压缩窗口256k)
    4. 内存管理。根据内存的限制自动调节实际使用的stripe的大小。(应该是指每次读取数据块的大小)
  5. 查询计划
    三个不足点:
    1. 不必要的Map阶段。由于一个MR job最多有一个shuffle,所以出现多个MR job很正常。MR的中间文件会回写到hdfs中的。如果一个map没有reduce,它就引入了一次没有必要的回写hdfs。
    2. 重复的数据加载。一个表被多次在不同MR中使用的情况下,这个表被多次加载。
    3. 不必要的数据重分片。
    4. 消除不必要的map phase.
      Map-only job产生是因为MR job 被转换成了Map job。存在集中情况,其中最有代表性的是较小的表和大表之间的hash join。为了减少map phase,每次将reduce join转化为map join之前,计算map-only job中参与hash join操作的较小的表是否小于某个阈值,如果是就将这个map-only jion到他的子job中去。
    5. 关联优化器(correlation optimizer)
      基于YSmart(http://web.cse.ohio-state.edu/hpcs/WWW/HTML/publications/papers/TR-11-7.pdf  )。
      存在两种关联:
      1. 输入关联(input correlation):意思是一个表在不同MR job中别使用多次。
      2. job flow correlation(工作流程关联):一个操作依赖于另一个操作,且这两种操作使用相同的数据分片方法。
        有三个条件决定一个上游RSOp是否与一个下游RSOp关联:
        1. 产生的行使用相同的排序方法;
        2. 使用相同的数据分片方法
        3. 没有reduce数量上的冲突(?)
      3. 操作树转换
        1. 必须有底层RSOp,用来产生行数据
        2. 添加DemuxOperator来减少不必要的RSOp。
      4. 操作协调。 
        因为MR是push数据的,导致很多不必要的数据也被传输。所以需要一个协调器实现“按需传输”的功能。
    6. 查询执行
      目的是充分利用现代cpu的特点。现代cpu的效率很大程度取决于并行度。为了实现多条流水线并行执行,需要减少指令分支。另外,数据的独立也有利于提高并行度。另外,一次执行一行导致cache性能低。
      1. 数据集代表批量的行(默认1024,可配置)。
      2. 单行模式下,一行数据被整棵查询树处理后才处理下一行;现在批量的行为单位执行了。

    7. 性能测试
      1. file format

      2. 查询计划
      3. 查询执行

笔记:Hive的主要技术改进(Major Technical Advancements in Apache Hive)的更多相关文章

  1. 解决kylin sync table报错:MetaException(message:java.lang.ClassNotFoundException Class org.apache.hive.hcatalog.data.JsonSerDe not found

    在kylin-gui中sync表default.customer_visit时报错: -- ::, ERROR [http-bio--exec-] controller.BasicController ...

  2. Hive执行count函数失败,Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException)

    Hive执行count函数失败 1.现象: 0: jdbc:hive2://192.168.137.12:10000> select count(*) from emp; INFO : Numb ...

  3. 技术领导(Technical Leader)画像

    程序员都讨厌被管理,而乐于被领导.管理的角色由PM(project manager)扮演,具体来说,PM负责提需求.改改改.大多数情况,PM是不懂技术的,这也是程序员觉得PM难以沟通的原因.而后者由技 ...

  4. 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)

    1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...

  5. webservice 技术改进

    Webservice 技术改进 1.不同系统不同语言之间的交互 基于http协议进行传输,使用REST服务实现WS 2.不同系统相同语言之间的交互 使用RPC(romate process call) ...

  6. Android:日常学习笔记(9)———探究持久化技术

    Android:日常学习笔记(9)———探究持久化技术 引入持久化技术 什么是持久化技术 持久化技术就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失 ...

  7. [转帖]我最近研究了hive的相关技术,有点心得,这里和大家分享下。

    我最近研究了hive的相关技术,有点心得,这里和大家分享下. https://www.cnblogs.com/sharpxiajun/archive/2013/06/02/3114180.html 首 ...

  8. 深入探索Android热修复技术原理读书笔记 —— 资源热修复技术

    该系列文章: 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍 深入探索Android热修复技术原理读书笔记 -- 代码热修复技术 1 普遍的实现方式 Android资源的热修复,就 ...

  9. 系统解析Apache Hive

    Apache Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供一种HQL语言进行查询,具有扩展性好.延展性好.高容错等特点,多应用于离线数仓建设. 1. ...

随机推荐

  1. Springboot整合MybatisPlus

    目录 1.pom文件 2.创建CodeGenerator.java 3.在application.yml中配置mybatis-plus 4.创建MybatisPlusConfig.java文件 其他 ...

  2. 10.Spring整合Hibernate_3_HibernateTemplate

    将sessionFactory 注入给 hibernateTemplate,让hibernateTemplate帮我们完成一些模板代码 <!-- 使用HibernateTemplate --&g ...

  3. ASE19团队项目alpha阶段model组 scrum8 记录

    本次会议于11月12日,19时整在微软北京西二号楼sky garden召开,持续15分钟. 与会人员:Jiyan He, Kun Yan, Lei Chai, Linfeng Qi, Xueqing ...

  4. Oracle笔记(十一) 建表、更新、查询综合练习

    有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号it ...

  5. PAT Basic 1087 有多少不同的值 (20 分)

    当自然数 n 依次取 1.2.3.…….N 时,算式 ⌊ 有多少个不同的值?(注:⌊ 为取整函数,表示不超过 x 的最大自然数,即 x 的整数部分.) 输入格式: 输入给出一个正整数 N(2). 输出 ...

  6. 面试题——常见的gc算法有哪些?

    常见的gc算法有哪些? java garbage collection是一个自动进程,用于管理程序使用的运行时内存.通过自动执行JVM,可以减轻程序中分配和释放内存资源的开销. 垃圾回收机制是由垃圾回 ...

  7. JS继承的原理、方式和应用

    概要: 一.继承的原理 二.继承的几种方式 三.继承的应用场景 什么是继承? 继承:子类可以使用父类的所有功能,并且对这些功能进行扩展.继承的过程,就是从一般到特殊的过程.要了解JS继承必须首先要了解 ...

  8. marquee标签实现跑马灯效果--无缝滚动

    今天在做微信端的大转盘抽奖时,想把所有用户的抽奖记录做成无缝滚动的效果,无奈我的js功底太差,一时想不出实现的方法,便百度各种相似效果.但无意中发现了一个html标签——<marquee> ...

  9. git远程分支创建,本地分支关联远程分支,第一次发布、更新分支

    git远程分支创建,本地分支关联远程分支,第一次发布.更新分支 github托管服务器地址为https://github.com git提交更新代码示意图: 本地与远程进行免密码配置(本地与远程关联) ...

  10. Jenkins构建从github上克隆时,报Host key verification failed.

    首先在本地通过CMD执行git clone xxxxx时,可以成功的通过免密(SSH_KEY)克隆下来代码,但是通过Jenkins克隆时,就报如下信息: Cloning into 'GitHub'.. ...