配置 Tez - Amazon EMR

配置 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.3.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 控制台、AWS Command Line Interface(AWS CLI)或 AWS SDK。有关更多信息,请参阅为运行的集群中的实例组提供配置

Tez 异步拆分打开

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

名称 分类 描述

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 初始化可以用进程守护线程异步完成,而不是顺序处理。

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%