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

运行 Spark ETL 任务,缩短启动时间

Amazon Glue 2.0 版及更高版本提供在 Amazon Glue 中以更短的启动时间运行 Apache Spark ETL(提取、转换和加载)任务的升级基础设施。由于等待时间缩短,数据工程师可以提高工作效率,并增加与 Amazon Glue 的互动性。减少任务开始时间的差异可以帮助您达到或超过使数据可用于分析的 SLA。

要将此功能与 Amazon Glue ETL 任务结合使用,请在创建任务时为 2.0 选择 Glue version 或更高版本。

支持的新功能

本节介绍 Amazon Glue 2.0 版及更高版本支持的新功能。

支持在任务层面指定其他 Python 模块

Amazon 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

Amazon Glue 使用 Python Package Installer(pip3)来安装其他模块。您可以将 python-modules-installer-option 指定的其他选项传递到 pip3,用于安装模块。pip3 的任何不兼容或限制都将适用。

Amazon Glue 2.0 版中已提供的 Python 模块

Amazon Glue 2.0 版支持以下开箱即用的 Python 模块:

  • setuptools—45.2.0

  • subprocess32—3.5.4

  • ptvsd—4.3.2

  • pydevd—1.9.0

  • PyMySQL—0.9.3

  • docutils—0.15.2

  • jmespath—0.9.4

  • six—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

  • requests—2.23.0

  • pyparsing—2.4.6

  • enum34—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

  • pyarrow—0.16.0

  • matplotlib—3.1.3

  • pyhocon—0.3.54

  • mpmath—1.1.0

  • sympy—1.5.1

  • patsy—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

日志记录行为

Amazon Glue 2.0 版及更高版本支持不同的默认日志记录行为。差异包括:

  • 实时进行日志记录。

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

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

驱动程序和执行程序流

驱动程序流由任务运行 ID 标识。执行程序流由任务 <run id>_<executor task id> 标识。例如:

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

输出和错误流

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

  • 日志流:

    • 驱动程序日志流具有 <jr>,其中 <jr> 是任务运行 ID。

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

Amazon Glue 2.0 版的默认日志组如下:

  • 输出为 /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 (输出) 链接指向输出日志组。

日志记录规则

注意

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

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

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

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

  • 驱动程序日志流:<jr>-driver

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

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

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

不支持的功能

不支持以下 Amazon Glue 功能:

  • 开发终端节点

  • Amazon Glue 2.0 版及更高版本不会在 Apache YARN 上运行,因此 YARN 设置不适用

  • Amazon Glue 2.0 版及更高版本没有 Hadoop 分布式文件系统(HDFS)

  • Amazon Glue 2.0 版及更高版本不使用动态分配,因此 ExecutorAllocationManager 指标不可用

  • 对于 Amazon Glue 2.0 版或更高版本任务,您可以指定工作人员数量和工作人员类型,但不指定 maxCapacity

  • Amazon Glue 2.0 版及更高版本不支持 s3n 开箱即用。我们建议使用 s3s3a。如果任务出于任何原因需要使用 s3n,您可以传递以下附加参数:

    --conf spark.hadoop.fs.s3n.impl=com.amazon.ws.emr.hadoop.fs.EmrFileSystem