管理工作執行時,使用AWS CLI - Amazon EMR

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

管理工作執行時,使用AWS CLI

本主題說明如何使用AWS Command Line Interface(AWS CLI。

提交任務執行

使用具有指定參數的 JSON 檔案提交工作執行

  1. 建立start-job-run-request.jsonfile 並指定工作執行所需的參數,如下列範例 JSON 檔案所示。如需這些參數的詳細資訊,請參閱 設定任務執行的選項

    { "name": "myjob", "virtualClusterId": "123456", "executionRoleArn": "iam_role_name_for_job_execution", "releaseLabel": "emr-6.2.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" } } } }
  2. 使用start-job-run具有路徑的指令start-job-run-request.json檔案儲存在本機或 Amazon S3 中。

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

啟動任務執行start-job-run命令

  1. 提供所有指定的參數StartJobRun命令,如下列範例示範。

    aws emr-containers start-job-run \ --virtual-cluster-id 123456 \ --name myjob \ --execution-role-arn execution-role-arn \ --release-label emr-6.2.0-latest \ --job-driver '{"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"}}' \ --configuration-overrides '{"applicationConfiguration": [{"classification": "spark-defaults", "properties": {"spark.driver.memory": "2G"}}], "monitoringConfiguration": {"cloudWatchMonitoringConfiguration": {"logGroupName": "log_group_name", "logStreamNamePrefix": "log_stream_prefix"}, "persistentAppUI":"ENABLED", "s3MonitoringConfiguration": {"logUri": "s3://my_s3_log_location" }}}'
  2. 對於星火 SQL,提供所有指定的參數StartJobRun命令,如下列範例示範。

    aws emr-containers start-job-run \ --virtual-cluster-id 123456 \ --name myjob \ --execution-role-arn execution-role-arn \ --release-label emr-6.7.0-latest \ --job-driver '{"sparkSqlJobDriver": {"entryPoint": "entryPoint_location", "sparkSqlParameters": "--conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1"}}' \ --configuration-overrides '{"applicationConfiguration": [{"classification": "spark-defaults", "properties": {"spark.driver.memory": "2G"}}], "monitoringConfiguration": {"cloudWatchMonitoringConfiguration": {"logGroupName": "log_group_name", "logStreamNamePrefix": "log_stream_prefix"}, "persistentAppUI":"ENABLED", "s3MonitoringConfiguration": {"logUri": "s3://my_s3_log_location" }}}'

設定任務執行的選項

使用下列選項來設定工作執行參數:

  • --execution-role-arn:您必須提供用於執行工作的 IAM 角色。如需詳細資訊,請參閱 將任務執行角色與 EKS 上的 Amazon EMR

  • --release-label: 您可以使用亞馬遜 EMR 5.32.0 和 6.2.0 及更新版本在 EKS 上部署亞馬遜 EMR。舊版亞馬遜 EMR 發行版本不支援 EKS 上的亞馬遜 EMR。如需詳細資訊,請參閱 EKS 上的 Amazon EMR

  • --job-driver:Job 驅動程式用於提供主要工作的輸入。這是一個聯集類型欄位,您只能傳遞您要執行之工作類型的其中一個值。支援的工作類型包括:

    • 星火提交作業-用於通過 Spark 提交運行命令。你可以使用這個作業類型來運行 Scala, PySpark、Sparkr、SparkSQL 和任何其他支援的工作,透過星火提交。此任務類型具有下列參數:

      • 入口點-這是 HCFS(Hadoop 兼容的文件系統)參考要運行的主 JAR /py 文件。

      • EntryPointArguments -這是您想要傳遞至主 jar/py 檔案的引數陣列。您應該使用入口點代碼處理讀取這些參數。陣列中的每個引數應該以逗號分隔。

      • SparkSubmitParameters -這些是您要發送給作業的其他火花參數。使用這個參數來覆蓋默認的 Spark 屬性,如驅動程序內存或執行程序的數量,如 —conf 或 —class。如需其他資訊,請參閱使用火花提交啟動應用程式

    • 星火 SQL 作業-用於通過星火 SQL 運行 SQL 查詢文件。您可以使用此工作類型來執行 SparkSQL 工作。此任務類型具有下列參數:

  • --configuration-overrides:您可以提供配置物件來覆寫應用程式的預設組態。您可以使用簡寫語法來提供配置,或者您可以在 JSON 文件中引用配置對象。組態物件是由分類、屬性和選用的巢狀組態所組成。屬性由該檔案中您想要覆寫的設定組成。您可以在單一 JSON 物件中,為多個應用程式指定多個分類。可用的組態分類隨 Amazon EMR 發行版本而有所不同。如需每個 Amazon EMR 發行版本可用的組態分類清單,請參閱EKS 上的 Amazon EMR

    如果您在應用程式覆寫和 Spark 提交參數中傳遞相同的組態,Spark 提交參數會優先採用。完整的組態優先順序清單如下,以最高優先順序到最低優先順序排列。

    • 建立時提供的組態SparkSession

    • 配置作為的一部分提供sparkSubmitParameters運用—conf

    • 作為應用程式覆寫的一部分提供的組態。

    • 由亞馬遜 EMR 針對發行版本選擇的最佳化組態。

    • 應用程式的預設開放原始碼組態。

    使用亞馬遜監控任務執行 CloudWatch 或 Amazon S3,您必須提供的組態詳細資訊 CloudWatch。如需詳細資訊,請參閱設定任務執行以使用 S3 日誌設定任務執行以使用亞馬遜 CloudWatch 日誌。如果 S3 儲存貯體或 CloudWatch 日誌群組不存在,Amazon EMR 會在將日誌上傳到儲存貯體之前建立該群組。

  • 如需 Kubernetes 組態選項的其他清單,請參閱在庫伯尼特火花屬性

    下列 Spark 組態不受支援。

    • spark.kubernetes.authenticate.driver.serviceAccountName

    • spark.kubernetes.authenticate.executor.serviceAccountName

    • spark.kubernetes.namespace

    • spark.kubernetes.driver.pod.name

    • spark.kubernetes.container.image.pullPolicy

    • spark.kubernetes.container.image

      注意

      您可以使用spark.kubernetes.container.image定制 Docker 映像。如需詳細資訊,請參閱 自訂 EKS 上的 Amazon EMR Docker 影像

設定任務執行以使用 S3 日誌

為了能夠監控任務進度並對故障進行故障排除,您必須設定任務以將日誌資訊傳送到 Amazon S3、Amazon CloudWatch 日誌,或兩者兼而有之。本主題可協助您開始在 EKS 上透過 Amazon EMR 啟動的任務上,將應用程式日誌發佈到 Amazon S3。

S3 日誌存取權管理政策

在您的任務可以傳送日誌資料到 Amazon S3 之前,必須在任務執行角色的許可政策中包含下列許可。取代文檔示例,儲存貯體日誌取代為您的日誌儲存貯體的名稱。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET-LOGGING", "arn:aws:s3:::DOC-EXAMPLE-BUCKET-LOGGING/*", ] } ] }
注意

EKS 上的 Amazon EMR 也可以建立 Amazon S3 儲存貯體。如果 Amazon S3 儲存貯體不可用,請包含“s3:CreateBucket”IAM 政策中的許可。

將日誌傳送到 Amazon S3 的適當許可後,您的執行角色將日誌資料傳送到下列 Amazon S3 位置:s3MonitoringConfiguration被傳入monitoringConfiguration的區段start-job-run請求,如管理工作執行時,使用AWS CLI

  • 控制器日誌-/LogUri/virtual-cluster-id/工作/任務/容器Pod/(標準輸出 .gz)

  • 驅動程式記錄-/LogUri/virtual-cluster-id/工作/任務/容器spark-application-id/火花-任務-驅動程序/(標準錯誤/標準輸出 .gz)

  • 執行程序日誌-/LogUri/virtual-cluster-id/工作/任務/容器spark-application-id/executor-pod-name/(標準輸出 .gz)

設定任務執行以使用亞馬遜 CloudWatch 日誌

若要監控任務進度並對故障進行故障排除,您必須設定任務以將日誌資訊傳送到 Amazon S3、Amazon CloudWatch 日誌,或兩者兼而有之。本主題可協助您開始使用 CloudWatch EKS 上的 Amazon EMR 啟動任務的日誌。如需的詳細資訊 CloudWatch 記錄檔,請參閱監控日誌檔在亞馬遜 CloudWatch 使用者指南

CloudWatch 記錄檔 IAM 政策

讓您的任務將日誌資料傳送到 CloudWatch 記錄檔時,工作執行角色的權限原則中必須包含下列權限。取代我的群組名稱我的流前綴與您的名字 CloudWatch 分別為日誌群組和日誌串流名稱。如果日誌群組和日誌串流不存在,只要執行角色 ARN 具有適當的許可,Amazon EMR 就會建立日誌群組和日誌串流。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:*" ] }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:log-group:my_log_group_name:log-stream:my_log_stream_prefix/*" ] } ] }
注意

EKS 上的亞馬遜 EMR 也可以建立日誌串流。如果記錄串流不存在,則 IAM 政策應包含"logs:CreateLogGroup"許可

在您為執行角色提供適當權限之後,您的應用程式會將其記錄檔資料傳送至 CloudWatch 記錄時機cloudWatchMonitoringConfiguration被傳入monitoringConfiguration的區段start-job-run請求,如管理工作執行時,使用AWS CLI

StartJobRunAPI,log_group_name是下列項目的日誌群組名稱 CloudWatch,以及流前綴是下列項目的記錄資料流名稱前置詞 CloudWatch。您可以在 AWS Management Console中檢視及搜尋這些日誌。

  • 控制器日誌-logGroup/logStreamPrefix/virtual-cluster-id/工作/任務/容器Pod/(標準錯誤/標準輸出)

  • 驅動程式日誌-logGroup/logStreamPrefix/virtual-cluster-id/工作/任務/容器spark-application-id/火花-任務-驅動程序/(標準輸出)

  • 執行程序日誌-logGroup/logStreamPrefix/virtual-cluster-id/工作/任務/容器spark-application-id/executor-pod-name/(標準錯誤/標準輸出)

列出任務執行

你可以跑list-job-run以顯示工作執行的狀態,如下列範例所示。

aws emr-containers list-job-runs --virtual-cluster-id <cluster-id>

描述任務執行

你可以跑describe-job-run以取得有關工作的詳細資訊,例如工作狀態、狀態詳細資料和工作名稱,如下列範例所示。

aws emr-containers describe-job-run --virtual-cluster-id cluster-id --id job-run-id

取消任務執行

你可以跑cancel-job-run以取消執行中的工作,如下列範例所示。

aws emr-containers cancel-job-run --virtual-cluster-id cluster-id --id job-run-id