本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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 作業。此作業類型具有下列參數:
-
Entrypoint - 這是對您要執行的 SQL 查詢檔案的 HCFS (Hadoop 相容檔案系統) 參考。
如需可用於 Spark SQL 作業的其他 Spark 參數清單,請參閱 透過 StartJobRun API 執行 Spark SQL 指令碼。
-
-
-
--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_name
和 my_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
--idjob-run-id
取消作業執行
可以執行 cancel-job-run
以取消執行中的作業,如下列範例所示。
aws emr-containers cancel-job-run --virtual-cluster-id
cluster-id
--idjob-run-id