本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon EMR 容器默认分类
概述
可在 emr-containers-defaults 分类下进行以下设置:
-
job-start-timeout -
默认情况下,如果作业无法启动,则会超时,并在
SUBMITTED状态下等待 15 分钟。此配置会更改作业超时前等待的秒数。 -
executor.logging -
启用或禁用执行器 pod 上的日志记录。当将其设置为
DISABLED时,日志容器将从执行器 pod 中移除,这将禁用对中指定的这些 pod 的任何日志记录monitoringConfiguration,例如s3MonitoringConfiguration或cloudWatchMonitoringConfiguration。当未设置此设置或设置为任何其他值时,将启用对执行器 pod 的登录。 -
logging.image -
设置用于驱动程序和执行程序容器组上的日志记录容器的自定义映像。
-
logging.request.cores -
为驱动程序和执行程序容器组上的日志记录容器设置 CPU 数量自定义值(以 CPU 单元为单位)。默认情况下,不设置此值。
-
logging.request.memory -
为驱动程序和执行程序容器组上的日志记录容器设置内存量自定义值(以字节为单位)。默认情况下,这设置为 512Mi。mebibyte 是一种类似于 megabyte 的度量单位。
-
logging.eventLog.dir -
使用此配置启用永久应用程序用户界面并将 Spark 事件日志保存到您自己的 S3 位置。设置
logging.eventLog.dir为事件日志的 S3 路径。在monitoringConfiguration中,将persistentAppUI设置为ENABLED。使用spark.eventLog.dir时不要设置logging.eventLog.dir;这两种配置不兼容。如果设置了该配置,spark.eventLog.dir则该配置优先,并且日志容器无法复制 Spark 事件日志。这意味着您指定的 S3 位置将logging.eventLog.dir不会接收事件日志,永久应用程序用户界面也将无法运行。 -
logging.nativeSidecar -
当您将亚马逊 EMR 版本 6.8.0 或更高版本的此属性设置
ENABLED为时,Amazon EMR 会将 Spark 驱动程序和执行器容器上的日志容器配置为Kubernetes原生边车容器(请参阅网站上的详细信息),而不是常规容器。Kubernetes这意味着日志容器会在失败时自动重启,记录容器故障不会导致 pod 失败。 节点版本要求
您的亚马逊 EKS 节点必须运行 1.29 或更高Kubernetes版本。您的 EKS 集群版本可能与您的节点版本不同。如果您的节点运行的版本低于 1.29,则Kubernetes不启用原生 sidecar 功能,并且日志容器会阻止驱动程序启动,从而导致作业超时。
任务提交者分类示例
本节内容
具有自定义任务超时的 StartJobRun请求
{ "name": "spark-python", "virtualClusterId": "virtual-cluster-id", "executionRoleArn": "execution-role-arn", "releaseLabel": "emr-6.11.0-latest", "jobDriver": { "sparkSubmitJobDriver": { "entryPoint": "s3://S3-prefix/trip-count.py" } }, "configurationOverrides": { "applicationConfiguration": [ { "classification": "emr-containers-defaults", "properties": { "job-start-timeout": "1800" } } ], "monitoringConfiguration": { "cloudWatchMonitoringConfiguration": { "logGroupName": "/emr-containers/jobs", "logStreamNamePrefix": "demo" }, "s3MonitoringConfiguration": { "logUri": "s3://joblogs" } } } }
StartJobRun禁用执行器 pod 日志记录的请求
"configurationOverrides": { "applicationConfiguration": [ { "classification": "emr-containers-defaults", "properties": { "executor.logging": "DISABLED" } } ], "monitoringConfiguration": { "cloudWatchMonitoringConfiguration": { "logGroupName": "/emr-containers/jobs", "logStreamNamePrefix": "demo" }, "s3MonitoringConfiguration": { "logUri": "s3://joblogs" } } }
StartJobRun使用驱动程序和执行器 pod 的自定义日志容器镜像、CPU 和内存进行请求
"configurationOverrides": { "applicationConfiguration": [ { "classification": "emr-containers-defaults", "properties": { "logging.image": "YOUR_ECR_IMAGE_URL", "logging.request.memory": "200Mi", "logging.request.cores": "0.5" } } ], "monitoringConfiguration": { "cloudWatchMonitoringConfiguration": { "logGroupName": "/emr-containers/jobs", "logStreamNamePrefix": "demo" }, "s3MonitoringConfiguration": { "logUri": "s3://joblogs" } } }
注意
如果 Fluentd 日志容器遇到内存不足 (OOM) 错误,请增加该值。logging.request.memory例如,将其设置为以1Gi向日志容器分配更多内存并防止 OOM 问题。
StartJobRun使用 Spark 事件日志请求 Amazon S3 目标
以下示例将 Spark 事件日志保存到您自己的 Amazon S3 存储桶中,同时还启用了永久应用程序用户界面。该persistentAppUI设置为ENABLED默认值。
"configurationOverrides": { "applicationConfiguration": [ { "classification": "emr-containers-defaults", "properties": { "logging.eventLog.dir": "s3://my-bucket/event-logs/" } } ], "monitoringConfiguration": { "persistentAppUI": "ENABLED" } }
注意
使用时不要spark.eventLog.dir在spark-defaults分类中设置logging.eventLog.dir。这两种配置不兼容。如果设置了该配置,spark.eventLog.dir则该配置优先,并且日志容器无法复制 Spark 事件日志。这意味着您指定的 S3 位置将logging.eventLog.dir不会接收事件日志,永久应用程序用户界面也将无法运行。
StartJobRun使用原生 sidecar 日志记录请求
以下示例为 Spark 驱动程序和执行器 pod 上的日志容器启用原生 sidecar 模式。启用后,日志容器将作为Kubernetes原生 sidecar 运行,会在出现故障时自动重启,不会影响 Spark pod 的状态。
"configurationOverrides": { "applicationConfiguration": [ { "classification": "emr-containers-defaults", "properties": { "logging.nativeSidecar": "ENABLED" } } ], "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://my-bucket/logs/" } } }
节点版本要求
您的亚马逊 EKS 节点必须运行 1.29 或更高Kubernetes版本。您的 EKS 集群版本可能与您的节点版本不同。如果您的节点运行的版本低于 1.29,则Kubernetes不启用原生 sidecar 功能,并且日志容器会阻止驱动程序启动,从而导致作业超时。