使用 AWS CLI 管理作業執行 - Amazon EMR

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

使用 AWS CLI 管理作業執行

本頁介紹如何使用 AWS Command Line Interface (AWS CLI) 來管理作業執行。

用於設定作業執行的選項

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

  • --execution-role-arn:必須提供用於執行作業的 IAM 角色。如需更多詳細資訊,請參閱 搭配使用作業執行角色與 Amazon EMR on EKS

  • --release-label:可以使用 Amazon EMR 5.32.0 和 6.2.0 及更高版本來部署 Amazon EMR on EKS。舊版 Amazon EMR 不支援 Amazon EMR on EKS。如需更多詳細資訊,請參閱 Amazon EMR on EKS 發行版本

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

    • Spark 提交作業 - 用於透過 Spark 提交來執行命令。可以使用此作業類型,透過 Spark Submit 來執行 Scala、PySpark、SparkR、SparkSQL 以及其他支援的作業。此作業類型具有下列參數:

      • Entrypoint - 這是對您要執行的主要 jar/py 檔案的 HCFS (Hadoop 相容檔案系統) 參考。

      • EntryPointArguments - 這是您要傳遞給主要 jar/py 檔案的引數陣列。應使用 entrypoint 程式碼讀取這些參數。陣列中的每個引數應該以逗號分隔。EntryPointArguments 不能包含括號或圓括號,例如 ()、{} 或 []。

      • SparkSubmitParameters - 這些是您要傳送到作業的其他 spark 參數。使用此參數可覆寫預設 Spark 屬性,例如驅動程式記憶體或 -conf 或 -class 等執行程式的數量。如需其他資訊,請參閱透過 spark-submit 啟動應用程式

    • Spark SQL 作業 - 用於透過 Spark SQL 執行 SQL 查詢檔案。可以使用此作業類型來執行 SparkSQL 作業。此作業類型具有下列參數:

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

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

    • 建立 SparkSession 時提供的組態。

    • 使用 —conf,作為 sparkSubmitParameters 的一部分提供的組態。

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

    • 由 Amazon EMR 針對發行版本選擇的優化組態。

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

    若要使用 Amazon CloudWatch 或 Amazon S3 監控作業執行,必須提供 CloudWatch 的組態詳細資訊。如需詳細資訊,請參閱設定作業執行以使用 Amazon S3 日誌設定作業執行以使用 Amazon CloudWatch Logs。如果 S3 儲存貯體或 CloudWatch 日誌群組不存在,則 Amazon EMR 會在將日誌上傳到儲存貯體之前先建立。

  • 如需 Kubernetes 組態選項的其他清單,請參閱 Kubernetes 上的 Spark 屬性

    不支援以下 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 映像檔。如需更多詳細資訊,請參閱 自訂 Amazon EMR on EKS 的 Docker 映像檔

設定作業執行以使用 Amazon S3 日誌

為了能夠監控作業進度並對失敗進行疑難排解,必須設定作業,以便將日誌資訊傳送到 Amazon S3、Amazon CloudWatch Logs 或兩者。本主題可協助您開始在透過 Amazon EMR on EKS 啟動的作業上將應用程式日誌發布到 Amazon S3。

S3 日誌 IAM 政策

在您的作業可以傳送日誌資料到 Amazon S3 之前,必須在作業執行角色的許可政策中包含下列許可。將 DOC-EXAMPLE-BUCKET-LOGGING 取代為日誌儲存貯體的名稱。

{ "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/*", ] } ] }
注意

Amazon EMR on EKS 也可以建立 Amazon S3 儲存貯體。如果無法使用 Amazon S3 儲存貯體,請在 IAM 政策中包含 “s3:CreateBucket” 許可。

在授予執行角色適當許可以便將日誌傳送到 Amazon S3 之後,當在 start-job-run 請求的 monitoringConfiguration 區段中傳遞 s3MonitoringConfiguration 時,會將日誌資料傳送到以下 Amazon S3 位置,如 使用 AWS CLI 管理作業執行 中所示。

  • 控制器日誌 - /logUri/virtual-cluster-id/jobs/job-id/containers/pod-name/(stderr.gz/stdout.gz)

  • 驅動程式日誌 - /logUri/virtual-cluster-id/jobs/job-id/containers/spark-application-id/spark-job-id-driver/(stderr.gz/stdout.gz)

  • 執行程式日誌 - /logUri/virtual-cluster-id/jobs/job-id/containers/spark-application-id/executor-pod-name/(stderr.gz/stdout.gz)

設定作業執行以使用 Amazon CloudWatch Logs

若要監控作業進度並對失敗進行疑難排解,必須設定作業,以便將日誌資訊傳送到 Amazon S3、Amazon CloudWatch Logs 或兩者。本主題可協助您開始在透過 Amazon EMR on EKS 啟動的作業上使用 CloudWatch Logs。如需有關 CloudWatch Logs 的詳細資訊,請參閱《Amazon CloudWatch 使用者指南》中的監控日誌檔案

CloudWatch Logs IAM 政策

為了讓作業將日誌資料傳送到 CloudWatch Logs,必須在作業執行角色的許可政策中包含下列許可。將 my_log_group_namemy_log_stream_prefix 分別取代為 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/*" ] } ] }
注意

Amazon EMR on EKS 也可以建立日誌串流。如果日誌串流不存在,IAM 政策應包含 "logs:CreateLogGroup" 許可。

在為執行角色提供適當的許可之後,當在 start-job-run 請求的 monitoringConfiguration 區段中傳遞 cloudWatchMonitoringConfiguration 時,應用程式會將其日誌資料傳送至 CloudWatch Logs,如 使用 AWS CLI 管理作業執行 中所示。

StartJobRun API 中,log_group_name 是 CloudWatch 的日誌群組名稱,而 log_stream_prefix 是 CloudWatch 的日誌串流名稱字首。您可以在 AWS Management Console中檢視及搜尋這些日誌。

  • 控制器日誌 - logGroup/logStreamPrefix/virtual-cluster-id/jobs/job-id/containers/pod-name/(stderr/stdout)

  • 驅動程式日誌 - logGroup/logStreamPrefix/virtual-cluster-id/jobs/job-id/containers/spark-application-id/spark-job-id-driver/(stderrstdout)

  • 執行程式日誌 - logGroup/logStreamPrefix/virtual-cluster-id/jobs/job-id/containers/spark-application-id/executor-pod-name/(stderr/stdout)

停止作業執行

可以執行 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