文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

Apache Hive 2.1 在一个月以前发布了,现在是很好的机会来回顾 Hive 2 这个基于 Hadoop 的 SQL 服务在新版本的改进了。

Hive-2-diagram-1

Hive 包含很多新特性,因此很难去选择哪些是值得关注的,下面这些是需要重点关注的:

  • 与 Hive LLAP 的交互查询。LLAP 是在 Hive 2.0 中引入的,在 2.1 中得到改进,性能比 Hive 1 提升 25 倍之多.
  • 更可靠的 SQL ACID 事务支持,修复了超过 60 个稳定性相关问题.
  • 通过更智能的 CBO 使得 ETL 速度提升 2 倍,更快的类型转换以及动态分区优化.
  • 程序化的 SQL 支持,简化 EDW 解决方案的移植.
  • 支持文本文件的向量化,引入一个选项用于快速分析,无需 ETL.
  • 全新的诊断和监控工具,包含全新 HiveServer2 UI, 全新 LLAP UI  以及改进了 Tez UI.
  • 总的来说,2.1 版本在 2.0 的基础上包含超过 2100 项新特性、提升和 Bug 修复。创新速度惊人,保持持续的增长势头。
第 1 段(可获 2.23 积分)

我们将在以后的帖子中探讨这些其他主题。 现在,我们将关注Hive 2最受期待的功能以及它解锁的巨大性能提升。

使用Hive LLAP带来25倍更快的查询性能

Hive 2中最大的故事也是它最值得期待的特性:LLAP代表“Live Long and Process”。 总而言之,LLAP结合了持久查询服务器和优化的内存缓存,使Hive能够立即启动查询,避免不必要的磁盘I / O。 换句话说,LLAP是第二代大数据系统:LLAP将计算带到内存(而不是计算到磁盘),它将智能地缓存内存,并在所有客户端之间共享此数据,同时保留在集群内弹性扩展的能力 。
Hive-2-diagram-1

第 2 段(可获 1.54 积分)
图1:LLAP架构

 
Hive-2-diagram-1

图2:Tez LLAP过程与Tez执行过程和MapReduce过程相比

比较 Hive With LLAP 和 Hive on Tez

为了测量LLAP带来的改进,我们运行了15个来自TPC-DS基准测试的查询,类似于过去的做法。 整个过程使用hive-testbench 存储库和数据生成工具运行。 这些查询适用于Hive SQL,除此之外没有使用那些大数据供应商常规使用的,使他们的工具显示更好的性能的任何技巧来修改标准TPC-DS查询。 此博客只涵盖15个查询,但更全面的性能测试正在进行中。

第 3 段(可获 1.45 积分)

下面将探讨完整的测试环境,但是在高级别上,测试使用10个功能强大的VM虚拟机运行,其中包含1TB数据集,旨在显示BI工具常用的数据级别的性能。 Hive 1和Hive 2使用相同的VM虚拟机和相同的数据。所有报告的时间表示3次运行相应Hive版本的平均值。
Hive-2-diagram-1

图 3: Hive 1 with Tez 与 Hive 2 with LLAP

 

如您所见,LLAP提供了显着的性能增益。 使用Hive LLAP的最小查询运行时间仅为1.3秒,而Hive 1中为9.58秒。

第 4 段(可获 1.36 积分)

让我们来讨论这些性能提升的一些主要原因。

聪明的Map连接

Hive on Tez是一个无共享架构:每个处理单元独立工作,拥有自己的内存和磁盘资源。 LLAP是一个多线程进程,允许worker共享内存。 map端连接需要将散列表以1:1分布到每个map任务中。 如果你在一个节点上有24个容器,你需要做24个散列表的副本并分发出去。 使用LLAP,您可以为每个节点构建一次散列表,并将其缓存在所有worker的内存中。 这对于低延迟SQL尤其重要。

第 5 段(可获 1.34 积分)

一个很好的例子是Query 55。在TPC-DS中,Query 55在查询fact表的任意查询中只触及1个月的最小数据量。 要在Hive on Tez中运行此查询,必须首先将小的date_dim和item表分发给所有Tez任务。 对于LLAP,每个节点发生一次,大部分原因是LLAP的平均执行时间是1.3s,而 Hive on Tez是24.72s。

用于Join的更好的MapJoin Vectorization

许多MapJoin优化已经按照Hive 2的方式。例如,对小维度表的 join现在运行的速度与显式扩展列表一样快。

一个很好的例子是Query 43,它在商店维度 join中有37%的选择性。 更好的MapJoin vectorization,利用fact表中的重复序列,帮助Query 43从195.2s下降到4.2s。

第 6 段(可获 1.95 积分)

完全矢量化的管道

Hive 2在reduce端引入了Map Join vectorization特性,它具有动态分区的哈希join,本质上是MapJoin优化的缩减版本。 通过这种优化,reducer输入被排序并通过保持在reduce端的散列表进行流传输。 优化将大维度表分成许多小的不相交维度表,从而允许之前的维度表通过在尺寸上向上扩展优化。

这里的一个很好的例子是Query  13,它涉及几个非常大的和几个非常小的维度表的组合,因此它需要运行一个安全的shuffle join,但是从其他维度过滤器获得高选择性。 此优化有助于将Query 13从90.2s降低到4.8s。

第 7 段(可获 1.55 积分)

更好的基于代价的优化

Apache Calcite正在持续集成复杂的基于代价的优化,并已经取得了重大进展.这里有一些案例,Hive 基于代价优化在连接关键词时,已经可以跳出多层嵌套(避免交叉连接),关键词在交叉链接时可以传递,在表没的做分析的情况下,可以运用基本的转换(ETL任务的一大进步).

测试环境

Hive 1, Hive 2

  • Hive 1.2.1
  • Tez 0.7.0
  • Hadoop 2.7.1

Hive 2.2.0

  • Tez 0.9.0-snapshot
  • Hadoop 2.7.1

其它 Hive / Hadoop 设置:

所有的软件都是用Apache Ambari 进行发布并预览的.除了 Ambari 的默认设置, 还对Hive 2做了一些优化. 这些优化将在安装GA时做为默认设置。

  • hive.vectorized.execution.mapjoin.native.enabled=true;
  • hive.vectorized.execution.mapjoin.native.fast.hashtable.enabled=true;
  • hive.vectorized.execution.mapjoin.minmax.enabled=true;
  • hive.vectorized.execution.reduce.enabled=true;
  • hive.llap.client.consistent.splits=true;
  • hive.optimize.dynamic.partition.hashjoin=true;
第 8 段(可获 2.25 积分)

硬件:

  • 10台 d2.8xlarge 亚马逊云服务节点

操作系统配置:

大部分配置使用系统默认就可以,除了这个:

  • /proc/sys/net/core/somaxconn = 4000

Hive-2-diagram-1

图 4: 在 Apache Ambari中配置Streamlined LLAP

Data:

  • 1000份测试数据基于TPC-DS , 通过date_sk列进行分区, 按ORC格式存储. 在Hive1和Hive2中使用相同的数据与表结构.

查询:

  • 使用 Hive Testbench https://github.com/t3rmin4t0r/hive-testbench/tree/hive14 进行数据构建与查询,然后驱动测试.在Hive1和Hive2执行相同的查询文本.
  • 使用相同的基准执行15次查询,更全面的使用Hive LLAP测试将会在未来的几周内发部.

一如既往,Apache Hive 是完全开源的,你可以选择在Hadoop分布式系统中使用它,和博客中讨论的所有其他功能一样,它可以改进性能。

第 9 段(可获 2.53 积分)

文章评论