本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Spark 容器日誌輪換
使用 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
參數的數值單位部分會以整數形式傳遞。由於不支援小數值,因此可以使用值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": "--classmain_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