使用 Spark 容器日誌輪換 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 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 參數指定日誌輪換的檔案大小。可能的值範圍為 2KB2GBrotationSize 參數的數值單位部分會以整數形式傳遞。由於不支援小數值,因此可以使用值 1500MB 來指定 1.5GB 的輪換大小。

maxFilesToKeep

maxFilesToKeep 參數會指定輪換發生後,要在容器中保留的檔案數上限。下限值是 1,上限值是 50。

可以在 StartJobRun API 的 monitoringConfiguration 區段中指定這些參數,如下列範例所示。在此範例中,使用 rotationSize = "10 MB"maxFilesToKeep = 3,Amazon EMR on EKS 在 10 MB 時輪換日誌,產生新的日誌檔案,然後在日誌檔案數量達到 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