

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

# 使用 管理任務執行 AWS CLI
<a name="emr-eks-jobs-CLI"></a>

本主題說明如何使用 AWS Command Line Interface () 管理任務執行AWS CLI。它詳細介紹了屬性，例如安全參數、驅動程式和各種覆寫設定。它還包含子主題，涵蓋各種設定記錄的方式。

**Topics**
+ [用於設定作業執行的選項](#emr-eks-jobs-parameters)
+ [設定作業執行以使用 Amazon S3 日誌](emr-eks-jobs-s3.md)
+ [設定作業執行以使用 Amazon CloudWatch Logs](emr-eks-jobs-cloudwatch.md)
+ [停止作業執行](#emr-eks-jobs-list)
+ [描述作業執行](#emr-eks-jobs-describe)
+ [取消作業執行](#emr-eks-jobs-cancel)

## 用於設定作業執行的選項
<a name="emr-eks-jobs-parameters"></a>

使用下列選項來設定作業執行參數：
+ `--execution-role-arn`：必須提供用於執行作業的 IAM 角色。如需詳細資訊，請參閱[搭配使用作業執行角色與 Amazon EMR on EKS](iam-execution-role.md)。
+ `--release-label`：可以使用 Amazon EMR 5.32.0 和 6.2.0 及更高版本來部署 Amazon EMR on EKS。舊版 Amazon EMR 不支援 Amazon EMR on EKS。如需詳細資訊，請參閱[Amazon EMR on EKS 發行版本](emr-eks-releases.md)。
+ `--job-driver`：作業驅動程式用於提供主要作業的輸入。這是一個聯合類型欄位，只能在其中傳遞您要執行之作業類型的其中一個值。支援的作業類型包括：
  + Spark 提交作業 - 用於透過 Spark 提交來執行命令。可以使用此作業類型，透過 Spark Submit 來執行 Scala、PySpark、SparkR、SparkSQL 以及其他支援的作業。此作業類型具有下列參數：
    + Entrypoint - 這是對您要執行的主要 jar/py 檔案的 HCFS (Hadoop 相容檔案系統) 參考。
    + EntryPointArguments - 這是您要傳遞給主要 jar/py 檔案的引數陣列。應使用 entrypoint 程式碼讀取這些參數。陣列中的每個引數應該以逗號分隔。EntryPointArguments 不能包含括號或圓括號，例如 ()、\$1\$1 或 []。
    + SparkSubmitParameters - 這些是您要傳送到作業的其他 spark 參數。使用此參數可覆寫預設 Spark 屬性，例如驅動程式記憶體或 -conf 或 -class 等執行程式的數量。如需其他資訊，請參閱透過 [spark-submit 啟動應用程式](https://spark.apache.org/docs/latest/submitting-applications.html#launching-applications-with-spark-submit)。
  + Spark SQL 作業 - 用於透過 Spark SQL 執行 SQL 查詢檔案。可以使用此作業類型來執行 SparkSQL 作業。此作業類型具有下列參數：
    + Entrypoint - 這是對您要執行的 SQL 查詢檔案的 HCFS (Hadoop 相容檔案系統) 參考。

      如需可用於 Spark SQL 作業的其他 Spark 參數清單，請參閱 [透過 StartJobRun API 執行 Spark SQL 指令碼](emr-eks-jobs-spark-sql-parameters.md)。
+ `--configuration-overrides`：可以透過提供組態物件來覆寫應用程式的預設組態。您可以使用速記語法，以提供組態或參考 JSON 檔案中物件的組態。組態物件是由分類、屬性和選用的巢狀組態所組成。屬性由您想要在檔案中覆寫的設定組成。您可以在單一 JSON 物件中，為多個應用程式指定多個分類。可用的組態分類隨 Amazon EMR 發行版本而有所不同。如需每個 Amazon EMR 發行版本可用的組態分類清單，請參閱 [Amazon EMR on EKS 發行版本](emr-eks-releases.md)。

  如果在應用程式中覆寫和 Spark 提交參數中傳遞相同的組態，會優先採用 Spark 提交參數。完整的組態優先順序清單如下，以最高優先順序到最低優先順序排列。
  + 建立 `SparkSession` 時提供的組態。
  + 使用 `—conf`，作為 `sparkSubmitParameters` 的一部分提供的組態。
  + 作為應用程式覆寫的一部分提供的組態。
  + 由 Amazon EMR 針對發行版本選擇的優化組態。
  + 應用程式的預設開放原始碼組態。

  若要使用 Amazon CloudWatch 或 Amazon S3 監控作業執行，必須提供 CloudWatch 的組態詳細資訊。如需詳細資訊，請參閱[設定作業執行以使用 Amazon S3 日誌](emr-eks-jobs-s3.md)及[設定作業執行以使用 Amazon CloudWatch Logs](emr-eks-jobs-cloudwatch.md)。如果 S3 儲存貯體或 CloudWatch 日誌群組不存在，則 Amazon EMR 會在將日誌上傳到儲存貯體之前先建立。
+ 如需 Kubernetes 組態選項的其他清單，請參閱 [Kubernetes 上的 Spark 屬性](https://spark.apache.org/docs/latest/running-on-kubernetes.html#configuration)。

  不支援以下 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 映像檔](docker-custom-images.md)。

# 設定作業執行以使用 Amazon S3 日誌
<a name="emr-eks-jobs-s3"></a>

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

**S3 日誌 IAM 政策**

在您的作業可以傳送日誌資料到 Amazon S3 之前，必須在作業執行角色的許可政策中包含下列許可。將 *amzn-s3-demo-logging-bucket* 取代為您的記錄儲存貯體名稱。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket",
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Sid": "AllowS3Putobject"
    }
  ]
}
```

------

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

在授予執行角色適當許可以便將日誌傳送到 Amazon S3 之後，當在 `start-job-run` 請求的 `monitoringConfiguration` 區段中傳遞 `s3MonitoringConfiguration` 時，會將日誌資料傳送到以下 Amazon S3 位置，如 [使用 管理任務執行 AWS CLI](emr-eks-jobs-CLI.md) 中所示。
+ 提交者日誌 - /*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
<a name="emr-eks-jobs-cloudwatch"></a>

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

**CloudWatch Logs IAM 政策**

為了讓作業將日誌資料傳送到 CloudWatch Logs，必須在作業執行角色的許可政策中包含下列許可。將 *my\$1log\$1group\$1name* 和 *my\$1log\$1stream\$1prefix* 分別取代為 CloudWatch 日誌群組名稱和日誌串流名稱。如果日誌群組和日誌串流不存在，只要執行角色 ARN 具有適當的許可，Amazon EMR 就會建立它們。

------
#### [ JSON ]

****  

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

------

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

在為執行角色提供適當的許可之後，當在 `start-job-run` 請求的 `monitoringConfiguration` 區段中傳遞 `cloudWatchMonitoringConfiguration` 時，應用程式會將其日誌資料傳送至 CloudWatch Logs，如 [使用 管理任務執行 AWS CLI](emr-eks-jobs-CLI.md) 中所示。

在 `StartJobRun` API 中，*log\$1group\$1name* 是 CloudWatch 的日誌群組名稱，而 *log\$1stream\$1prefix* 是 CloudWatch 的日誌串流名稱字首。您可以在 AWS 管理主控台中檢視及搜尋這些日誌。
+ 提交者日誌 - *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)

## 停止作業執行
<a name="emr-eks-jobs-list"></a>

可以執行 `list-job-run` 以顯示作業執行的狀態，如下列範例所示。

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

## 描述作業執行
<a name="emr-eks-jobs-describe"></a>

可以執行 `describe-job-run` 以取得有關作業的詳細資訊，例如作業狀態、狀態詳細資料和作業名稱，如下列範例所示。

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

## 取消作業執行
<a name="emr-eks-jobs-cancel"></a>

可以執行 `cancel-job-run` 以取消執行中的作業，如下列範例所示。

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