配置 Tez - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置 Tez

您可以使用 tez-site 配置分类设置值来自定义 Tez,该配置分类将配置 tez-site.xml 配置文件中的设置。有关更多信息,请参阅 Apache Tez 文档TezConfiguration中的。要将 Hive 或 Pig 更改为使用 Tez 执行引擎,请根据需要使用 hive-sitepig-properties 配置分类。示例如下。

示例配置

例 示例:自定义 Tez 根日志记录级别,并将 Tez 设置为 Hive 和 Pig 的执行引擎

下面显示的 create-cluster 命令将创建一个安装了 Tez、Hive 和 Pig 的集群。该命令引用存储在 Amazon S3 中的文件 myConfig.json,该文件为将 tez.am.log.level 设置为 DEBUGtez-site 分类指定属性,以及将执行引擎设置为 Tez,以便 Hive 和 Pig 使用 hive-sitepig-properties 配置分类。

注意

为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。

aws emr create-cluster --release-label emr-7.9.0 \ --applications Name=Tez Name=Hive Name=Pig --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge --instance-count 3 \ --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json --use-default-roles

下面显示的是 myConfig.json 的内容示例。

[ { "Classification": "tez-site", "Properties": { "tez.am.log.level": "DEBUG" } }, { "Classification": "hive-site", "Properties": { "hive.execution.engine": "tez" } }, { "Classification": "pig-properties", "Properties": { "exectype": "tez" } } ]
注意

对于 Amazon EMR 5.21.0 及更高版本,您可以覆盖集群配置,并为运行的集群中的每个实例组指定额外的配置分类。您可以使用 Amazon EMR 控制台、 Amazon Command Line Interface (Amazon CLI) 或软件开发工具包来完成此操作。 Amazon 有关更多信息,请参阅为运行的集群中的实例组提供配置

Tez 异步拆分打开

当表路径中有大量小文件并且查询尝试读取所有文件时,与每个单独拆分相对应的每个小文件将合并在一个 Tez 分组拆分下。然后,单个映射器将处理单个 Tez 分组拆分。由于执行是同步的,因此分组拆分下的每个单独拆分都将逐一得到处理。这就要求 RecordReader 对象同步处理各个拆分。

Amazon EMR 6.15.0 引入了配置,您可以指定这些配置来异步打开 Tez 分组拆分中的输入拆分。该功能由 TEZ-4397 启动,但在 OSS Hive 中出现了回归。EMR Hive 修复了 Hive ACID 表中的回归和其他漏洞。当单个 Tez 分组拆分中有大量输入拆分时,此改进可以提高读取查询的性能。

名称 分类 描述

tez.grouping.split.init.threads

tez-site

指定 Tez 用于预启动 RecordReaders 和打开拆分的进程守护程序线程数。对于 ACID 表,tez.grouping.split.init.threads 支持的最大值为 1

tez.grouping.split.init.recordreaders

tez-site

指定要由进程守护程序线程保持预初始化 RecordReaders 的数量。当 Tez 分组拆分包含大量 InputSplits 时,这会有所帮助。处理这些输入拆分的 RecordReaders 初始化可以用进程守护线程异步完成,而不是顺序处理。

配置说明:

Subject 详细信息

建议的配置设置

建议在hive-site和中将上述配置设置设置设置为所需的值tez-site

匹配值

和中的配置设置值应相同tez-sitehive-site

LLAP 建议

当启用 LLAP 时,不建议使用此功能。

Tez 异步拆分打开的基准测试

我们已使用以下环境和配置对 Tez 异步拆分打开功能进行了基准测试:

  • 基准环境 – Amazon EMR 集群,有 1 个使用 m5.16xlarge 的主节点,16 个使用 m5.16xlarge 的核心节点。

  • 基准配置 – 要模拟单个 Tez 分组拆分中存在大量输入拆分的基准测试场景,tez.grouping.split-count 设置为 1

  • 用于基准测试的表 – 该表包含 200 个分区,其中每个分区包含一个文件。基准测试在该表包含 CSV 文件时以及该表包含 parquet 文件时进行。Hive 查询基准测试:从表中 SELECT COUNT(*) 十次,取平均运行时间。

  • 启用 Tez 异步拆分打开的配置 – 如下所示:

    • tez.grouping.split.init.threads = 4

    • tez.grouping.split.init.recordreaders = 10

数据集 功能已禁用(基线) 功能已启用 改进

CSV 数据集

90.26 秒

79.20 秒

12.25%

Parquet 数据集

54.67 秒

42.23 秒

22.75%