运行 Spark ETL 作业并缩短启动时间 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

运行 Spark ETL 作业并缩短启动时间

AWS Glue 版本 2.0 为在 AWS Glue 中运行 Apache Spark ETL(提取、转换和加载)作业提供了升级的基础设施,并减少了启动时间。通过减少等待时间,数据工程师可以更有成效并增强其与 AWS Glue 的交互。作业开始时间的变化量可以帮助您满足或超过 SLAs,以使数据可用于分析。

要对 AWS Glue ETL 作业使用此功能,请在创建作业时,为 2.0 选择 Glue version

支持的新功能

本节介绍 AWS Glue 版本 2.0 支持的新功能。

支持在作业级别指定其他 Python 模块

AWS Glue 版本 2.0 还允许您在作业级别提供其他 Python 模块或不同版本。您可以将 --additional-python-modules 选项与逗号分隔的 Python 模块列表结合使用来添加新模块或更改现有模块的版本。

例如,要更新或添加新 scikit-learn 模块,请使用以下键/值:"--additional-python-modules", "scikit-learn==0.21.3"

此外,在 --additional-python-modules 选项中,您可以指定 Python wheel 模块的 Amazon S3 路径。例如:

--additional-python-modules s3://aws-glue-native-spark/tests/j4.2/ephem-3.7.7.1-cp37-cp37m-linux_x86_64.whl,s3://aws-glue-native-spark/tests/j4.2/fbprophet-0.6-py3-none-any.whl,scikit-learn==0.21.3

AWS Glue 使用 Python 程序包安装程序 (pip3) 安装额外的模块。您可以将 python-modules-installer-option 指定的其他选项传递到 pip3 以安装模块。将会应用 pip3 中任何不兼容或限制。

Python 模块已在 AWS Glue 版本 2.0 中提供

AWS Glue 版本 2.0 支持以下现成的 python 模块:

  • setuptools – 45.2.0

  • setuptools – 45.2.0

  • subprocess32 – 3.5.4

  • ptvsd – 4.3.2

  • pydevd – 1.9.0

  • PyMySQL — 0.9.3

  • 文档—0.15.2

  • jmespath - 0.9.4

  • 六—1.14.0

  • python_dateutil – 2.8.1

  • urllib3 – 1.25.8

  • botocore - 1.15.4

  • s3transfer—0.3.3

  • boto3 – 1.12.4

  • certifi—2019.11.28

  • chardet - 3.0.4

  • idna—2.9

  • 请求 – 2.23.0

  • pyparsing – 2.4.6

  • 枚举34—1.1.9

  • pytz – 2019.3

  • numpy – 1.18.1

  • cycler – 0.10.0

  • kiwisolver - 1.1.0

  • scipy—1.4.1

  • pandas - 1.0.1

  • pystrole – 0.16.0

  • Matplotlib – 3.1.3

  • pyhocon – 0.3.54

  • mpmath – 1.1.0

  • 符号 – 1.5.1

  • pathy – 0.5.1

  • statsmodels – 0.11.1

  • fsspec – 0.6.2

  • s3fs – 0.4.0

  • Cython—0.29.15

  • joblib—0.14.1

  • pmdarima – 1.5.3

  • scikit-learn—0.22.1

  • tbats – 1.0.9

日志记录行为

AWS Glue 版本 2.0 支持不同的默认日志记录行为。区别包括:

  • 日志记录实时发生。

  • 驱动程序和执行程序有单独的流。

  • 对于每个驱动程序和执行程序,有两个流:输出流和错误流。

驱动程序和执行程序流

驱动程序流由作业运行 ID 标识。执行程序流由作业 &lt;run id>_<executor task id&gt;。 例如:

  • "logStreamName": "jr_8255308b426fff1b4e09e00e0bd5612b1b4ec848d7884cebe61ed33a31789..._g-f65f617bd31d54bd94482af755b6cdf464542..."

输出和错误流

输出流具有代码中的标准输出 (stdout)。错误流包含来自代码/库的日志记录消息。

  • 日志流:

    • 驱动程序日志流 &lt;jr&gt;,其中 &lt;jr&gt; 是作业运行 ID。

    • 执行程序日志流 &lt;jr>_<g&gt;,其中 &lt;g&gt; 是执行程序的任务 ID。您可以在驱动程序错误日志中查找执行程序任务 ID。

版本 2.0 的默认日志组如下所示:AWS Glue

  • /aws-glue/jobs/logs/output 用于输出

  • /aws-glue/jobs/logs/error 用于错误

在提供安全配置时,日志组名称将更改为:

  • /aws-glue/jobs/<security configuration>-role/<Role Name>/output

  • /aws-glue/jobs/<security configuration>-role/<Role Name>/error

在控制台上,Logs (日志) 链接指向输出日志组,Error (错误) 链接指向错误日志组。启用连续日志记录后,Logs (日志) 链接将指向连续日志组,Output (输出) 链接将指向输出日志组。

日志记录规则

注意

在 AWS Glue 版本 2.0 中,连续日志记录问题要求您在使用连续日志记录功能之前创建日志组。要解决该问题,您必须创建 --continuous-log-logGroup 指定的默认日志记录组或客户日志组,否则不会显示连续日志流。AWS 正在努力解决此问题。

连续日志记录的默认日志组名称为 /aws-glue/jobs/logs-v2

在 AWS Glue 版本 2.0 中,连续日志记录与 AWS Glue 版本 1.0 中的行为相同:

  • 默认日志组:/aws-glue/jobs/logs-v2

  • 驱动程序日志流:&lt;jr&gt; 驱动程序

  • 执行程序日志流:&lt;jr>-<executor ID>

    可通过设置 --continuous-log-logGroupName 更改日志组名称

    可通过设置 --continous-log-logStreamPrefix 来为日志流名称添加前缀

不支持的功能

不支持以下 AWS Glue 功能:

  • 开发终端节点

  • FindMatches 机器学习转换

  • AWS Glue 版本 2.0 在 Apache YARN 上不运行,因此 YARN 设置不适用

  • AWS Glue 版本 2.0 没有 Hadoop 分布式文件系统 (HDFS)

  • AWS Glue 版本 2.0 不使用动态分配,因此 ExecutorAllocationManager 指标不可用

  • 对于 AWS Glue 版本 2.0 作业,您可以指定工作线程数和工作线程类型,但不指定 maxCapacity