

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

# 使用 Spark 容器日志轮换
<a name="emr-eks-log-rotation-container"></a>

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

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

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

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

**`rotationSize`**  
`rotationSize` 参数指定日志轮换的文件大小。可行值的范围从 `2KB` 到 `2GB` 不等。`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`](emr-eks-jobs-submit.md) 命令中包含您使用这些参数配置的 json 文件的路径。

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