亚马逊AWS官方博客

在 EMR 6.0.0 上利用 Hive LLAP 实现 Apache Hive 性能倍增

Original URL:https://amazonaws-china.com/cn/blogs/big-data/apache-hive-is-2x-faster-with-hive-llap-on-emr-6-0-0/

 

不少客户习惯将Apache Hive与Amazon EMR配合使用,借此对存储在Amazon S3中的PB级数据进行基于SQL的访问。Amazon EMR 6.0.0版本新增对Hive LLAP的支持,平均性能较EMR 5.29版本提高2倍,单一Hive TPC-DS查询的性能则提高达10倍。本文将向大家展示如何启用Hive LLAP,并概述我们在TPC-DS基准测试中执行查询时所观察到的性能提升。

较Amazon EMR 5.29.0性能提升2倍

为了评估在Amazon EMR 6.0.0版本上运行Hive所带来的性能优势,我们在六节点c4.8xlarge EMR集群加3 TB Apache Parquet数据集的组合之上使用70条TCP-DS查询,借此比较新版本在总运行时间与几何平均值方面与EMR 5.29.0版本间的差异。

结果显示,在Amazon EMR Hive默认配置下,与Amazon EMR 5.29.0(Hive 2.3.6)相比,Amazon EMR 6.0.0(Hive 3.1.2)中的TPC-DS查询速度达到前者的两倍。

下图所示,为70项TPC-DS查询操作中的总运行时间改进,Amazon EMR 6.0.0具有更好(更低)的运行时间。

下图所示,为70项TPC-DS查询操作中的性能改进(以几何平均值表示),Amazon EMR 6.0.0具有更好(更低)的几何平均值。

下图所示,为单次查询所获得的性能改进,并按性能由高至低进行排序。在此轮比较中,数字越大代表性能越好。

Hive Live Long and Process (LLAP)

Hive LLAP将持久性守护程序与动态内存缓存同时引入低延迟查询,借此增强了Hive的执行模型。这些守护程序运行在EMR集群的核心与任务节点之上,负责对数据及元数据进行缓存,同时凭借进程的长期存在特性避免了传统Hive查询带来的容器启动开销。

在默认情况下,LLAP守护程序不会在EMR集群启动时被直接启用。大家可以使用以下hive 配置在Amazon EMR 6.0.0中启用LLAP:

[
  {
    "Classification": "hive",
    "Properties": {
      "hive.llap.enabled": "true"
    }
  }
]

由于Hive LLAP会使用运行在YARN上的持久守护程序,因此在启用LLAP时,EMR集群上的一部分YARN资源将被预留给Hive LLAP守护程序。大家可以在启动EMR集群时使用hive 配置覆盖EMR预定义/计算出的以下属性。

属性 描述 默认
hive.llap.num-instances 定义运行在EMR集群上的LLAP实例数量。最高可支持每Node管理节点(核心/任务)对应一个LLAP实例。 集群中的核心/任务节点数量。
hive.llap.percent-allocation 定义分配给LLAP实例的YARN NodeManager资源百分比。仅适用于运行一个由hive.llap.num-instances定义的LLAP实例的节点。 0.6 (60%)

例如,要通过定义将80%的YARN NodeManager资源分配给LLAP,则应使用以下配置:

 [
      {
        "classification": "hive",
        "properties": {
          "hive.llap.percent-allocation": "0.8",
          "hive.llap.enabled": "true"
        },
        "configurations": []
      }
    ]

大家可以覆盖EMR集群在启用时通过hive-site分类预定义/计算出的以下属性。

属性 描述
hive.llap.daemon.yarn.container.mb 每个LLAP守护程序所对应的YARN容器大小
hive.llap.daemon.memory.per.instance.mb LLAP Xmx
hive.llap.io.memory.size 单一LLAP守护程序中的LLAP IO缓存大小
hive.llap.daemon.num.executors 每个LLAP守护程序对应的执行程序(可并行执行的任务)数量

关于在Amazon EMR 6.0.0上配置Hive LLAP的更多详细信息,请参阅使用Hive LLAP

调整LLAP守护程序大小

我们可以使用YARN CLI修改LLAP实例的数量。下面来看示例命令:

$ yarn app -flex <Application Name> -component llap -1
  • 应用程序名称 – llap0(默认)

大家可以使用以下命令检查Hive LLAP守护程序的状态:

$ hive --service llapstatus

Hive LLAP Web服务

Hive LLAP监控器负责对各个运行有LLAP守护程序的核心与任务节点的端口15002进行监听。

下表概述了LLAP中可用的各项Web服务。

URI 描述
http://coretask-public-dns-name:15002 显示堆、缓存、执行程序与系统指标概述
http://coretask-public-dns-name:15002/conf 显示当前LLAP配置
http://coretask-public-dns-name:15002/peers 显示从Zookeeper服务器提取至集群中的LLAP节点详细信息
http://coretask-public-dns-name:15002/iomem 显示关于缓存内容与使用情况的详细信息
http://coretask-public-dns-name:15002/jmx 显示LLAP守护程序的JVM指标
http://coretask-public-dns-name:15002/stacks 显示所有线程的JVM栈追溯信息
http://coretask-public-dns-name:15002/conflog 显示当前日志级别
http://coretask-public-dns-name:15002/status 显示LLAP状态

Hive性能(LLAP对比容器)

在EMR 6.0.0当中,Hive LLAP属于可选选项;而在禁用Hive LLAP时,所有Hive查询都将采用动态容器分配方式。为了说明使用持久性Hive LLAP守护程序与利用动态分配容器运行Hive查询的区别,我们使用到TCP-DS基准测试中的一个子集。结果显示,查询的整体性能提高了27%,部分查询的速度甚至提高至4倍。

下图所示,为执行50项TPC-DS查询时的总运行时间性能改进情况,启用LLAP的Amazon EMR 6.0.0拥有更好(更短)的运行时间。

下图所示,为执行50项TPC-DS查询时的几何平均值性能改进情况,启用LLAP的Amazon EMR 6.0.0拥有更好(更短)的运行时间。

下图所示,为单次查询所获得的性能改进,并按性能由高至低进行排序。在此轮比较中,数字越大代表性能越好。

总结

本文介绍了与原有Amazon EMR 5.29版本相比,在Amazon EMR 6.0.0上运行Hive所带来的性能改进。性能的显著提升有助于减少查询运行时间与执行成本。此外,我们还了解到如何将Hive LLAP与Amazon EMR 6.0.0配合使用、如何进行具体配置、如何使用LLAP监控器查看状态与指标,以及如何通过启用Hive LLAP实现进一步性能提升。未来我们还将发布关于更多新功能的更新内容与在Amazon EMR上运行Apache Hive的后续改进消息,敬请期待!
 

本篇作者

suthan-phillips

AWS公司大数据架构师。他为客户提供架构指导,帮助他们在Amazon EMR上对复杂应用程序进行性能增强。在业余时间,他喜欢远足和在西北太平洋地区探险。