使用 Spark 容器日志轮换 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Spark 容器日志轮换

借助 Amazon EMR 6.11.0 及更高版本,您可以启用 Amazon EMR on EKS 的 Spark 容器日志轮换功能。此功能根据配置的轮换大小轮替文件,删除最旧的容器日志文件,而不是生成单个 stdoutstderr 日志文件。

轮替 Spark 容器日志,可以助您避免因长时间运行或串流任务生成大型 Spark 日志文件出现的潜在问题。例如,在您启动一个长时间运行的 Spark 任务后,Spark 驱动程序会生成一个容器日志文件。如果任务运行数小时或数天,并且 Kubernetes 节点上的磁盘空间有限,则容器日志文件可以占用所有可用磁盘空间。启用 Spark 容器日志轮换功能后,可将日志文件拆分为多个文件,并删除最旧的文件。

要打开 Spark 容器日志轮换功能,请配置以下 Spark 参数:

containerLogRotationConfiguration

monitoringConfiguration 中加入此参数可开启日志轮换功能。默认情况下它是禁用的。除了 s3MonitoringConfiguration,还必须使用 containerLogRotationConfiguration

rotationSize

rotationSize 参数指定日志轮换的文件大小。可行值的范围从 2KB2GB 不等。rotationSize 参数的数字单位部分以整数形式传递。由于不支持十进制值,您可以指定 1.5GB 的轮换大小,例如值 1500MB

maxFilesToKeep

maxFilesToKeep 参数指定轮换后要在容器中保留的最大文件数。最小值为 1,最大值为 50。

您可以在 StartJobRun API 的 monitoringConfiguration 部分制定这些参数,如以下示例所示。在此示例中,当 rotationSize = "10 MB"maxFilesToKeep = 3 时,Amazon EMR on EKS 会在 10MB 时轮换日志,生成新的日志文件,然后在日志文件数量达到 3 个时清除最早的日志文件。

{ "name": "my-long-running-job", "virtualClusterId": "123456", "executionRoleArn": "iam_role_name_for_job_execution", "releaseLabel": "emr-6.11.0-latest", "jobDriver": { "sparkSubmitJobDriver": { "entryPoint": "entryPoint_location", "entryPointArguments": ["argument1", "argument2", ...], "sparkSubmitParameters": "--class main_class --conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1" } }, "configurationOverrides": { "applicationConfiguration": [ { "classification": "spark-defaults", "properties": { "spark.driver.memory":"2G" } } ], "monitoringConfiguration": { "persistentAppUI": "ENABLED", "cloudWatchMonitoringConfiguration": { "logGroupName": "my_log_group", "logStreamNamePrefix": "log_stream_prefix" }, "s3MonitoringConfiguration": { "logUri": "s3://my_s3_log_location" }, "containerLogRotationConfiguration": { "rotationSize":"10MB", "maxFilesToKeep":"3" } } } }

要启动使用 Spark 容器日志轮换运行的任务,请在 StartJobRun 命令中包含您使用这些参数配置的 json 文件的路径。

aws emr-containers start-job-run \ --cli-input-json file://path-to-json-request-file