

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

# 使用作業重試政策
<a name="jobruns-using-retry-policies"></a>

在 Amazon EMR on EKS 6.9.0 版及更新版本中，可為作業執行設定重試政策。重試政策會導致作業驅動程式 Pod 在失敗或遭到刪除時自動重新啟動。這讓長時間執行的 Spark 串流作業對故障更具彈性。

## 設定作業的重試政策
<a name="setting-retry-policy"></a>

若要設定重試政策，可以使用 [StartJobRun](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_StartJobRun.html) API 提供 `RetryPolicyConfiguration` 欄位。`retryPolicyConfiguration` 範例如下所示：

```
aws emr-containers start-job-run \
--virtual-cluster-id cluster_id \
--name sample-job-name \
--execution-role-arn execution-role-arn \
--release-label emr-6.9.0-latest \
--job-driver '{
  "sparkSubmitJobDriver": {
    "entryPoint": "local:///usr/lib/spark/examples/src/main/python/pi.py",
    "entryPointArguments": [ "2" ],
    "sparkSubmitParameters": "--conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1"
  }
}' \
--retry-policy-configuration '{
    "maxAttempts": 5
  }' \
--configuration-overrides '{
  "monitoringConfiguration": {
    "cloudWatchMonitoringConfiguration": {
      "logGroupName": "my_log_group_name",
      "logStreamNamePrefix": "my_log_stream_prefix"
    },
    "s3MonitoringConfiguration": {
       "logUri": "s3://amzn-s3-demo-logging-bucket"
    }
  }
}'
```

**注意**  
`retryPolicyConfiguration` 僅適用於 AWS CLI 1.27.68 之後的版本。若要將 更新 AWS CLI 至最新版本，請參閱[安裝或更新最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)

將 `maxAttempts` 欄位設定為您希望作業驅動程式 Pod 在失敗或遭到刪除時重新啟動的次數上限。兩次作業驅動程式重試嘗試之間的執行間隔為指數重試間隔 (10 秒、20 秒、40 秒...)，上限為 6 分鐘，如 [Kubernetes](https://kubernetes.io/docs/concepts/workloads/controllers/job/#pod-backoff-failure-policy) 文件所述。

**注意**  
每個額外的作業驅動程式執行將按照另一個作業執行計費，且將受到 [Amazon EMR on EKS](https://aws.amazon.com/emr/pricing/#Amazon_EMR_on_Amazon_EKS) 定價的約束。

### 重試政策組態值
<a name="retry-config"></a>
+ **作業的預設重試政策：**根據預設，`StartJobRun` 包含設定為最多 1 次的重試政策。可以視需要設定重試政策。
**注意**  
如果 `retryPolicyConfiguration` 的 `maxAttempts` 設定為 1，則表示在失敗時不會進行重試來啟動驅動程式 Pod。
+ **停用作業的重試政策：**若要停用重試政策，請將 retryPolicyConfiguration 中的嘗試次數上限設為 1。

  ```
  "retryPolicyConfiguration": {
      "maxAttempts": 1
  }
  ```
+ **將作業的 maxAttempts 設定在有效範圍內：**如果 `maxAttempts` 值超出有效範圍，`StartJobRun` 呼叫將失敗。有效 `maxAttempts` 範圍介於 1 到 2,147,483,647 (32 位元整數) 之間，這是 Kubernetes 的 `backOffLimit` 組態設定所支援的範圍。如需詳細資訊，請參閱 Kubernetes 文件的 [Pod 退避失敗政策](https://kubernetes.io/docs/concepts/workloads/controllers/job/#pod-backoff-failure-policy)。如果 `maxAttempts` 值無效，則會傳回下列錯誤訊息：

  ```
  {
   "message": "Retry policy configuration's parameter value of maxAttempts is invalid"
  }
  ```

## 擷取作業的重試政策狀態
<a name="retrieve-policy"></a>

可以使用 [https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_ListJobRuns.html](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_ListJobRuns.html) 和 [https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_DescribeJobRun.html](https://docs.aws.amazon.com/emr-on-eks/latest/APIReference/API_DescribeJobRun.html) API 檢視作業的重試嘗試狀態。一旦請求具有已啟用重試政策組態的作業，`ListJobRun` 和 `DescribeJobRun` 回應就會在 `RetryPolicyExecution` 欄位中包含重試政策的狀態。此外，`DescribeJobRun` 回應將包含在作業的 `StartJobRun` 請求中輸入的 `RetryPolicyConfiguration`。

**回應範例**

------
#### [ ListJobRuns response ]

```
{
  "jobRuns": [
    ...
    ...
    "retryPolicyExecution" : {
      "currentAttemptCount": 2
    }
    ...
    ...
  ]
}
```

------
#### [ DescribeJobRun response ]

```
{
  ...
  ...
  "retryPolicyConfiguration": {
    "maxAttempts": 5
   },
   "retryPolicyExecution" : {
    "currentAttemptCount": 2
  },
  ...
  ...
}
```

------

在作業中停用重試政策後，將不會顯示這些欄位，如下面的 [重試政策組態值](#retry-config) 中所述。

## 使用重試政策監控作業
<a name="monitoring-retry"></a>

啟用重試政策時，會為建立的每個作業驅動程式產生 CloudWatch 事件。若要訂閱這些事件，請使用下列命令設定 CloudWatch 事件規則：

```
aws events put-rule \
--name cwe-test \
--event-pattern '{"detail-type": ["EMR Job Run New Driver Attempt"]}'
```

此事件將傳回作業驅動程式的 `newDriverPodName`、`newDriverCreatedAt` 時間戳記、`previousDriverFailureMessage` 和 `currentAttemptCount` 的相關資訊。如果停用重試政策，將不會建立這些事件。

如需有關如何使用 CloudWatch 事件監控作業的詳細資訊，請參閱 [使用 Amazon CloudWatch Events 監控作業](monitoring.md#monitoring-cloudwatch-events)。

## 尋找驅動程式和執行程式的日誌
<a name="finding-logs"></a>

驅動程式 Pod 名稱遵循 `spark-<job id>-driver-<random-suffix>` 格式。相同的 `random-suffix` 會新增至驅動程式產生的執行程式 Pod 名稱。使用此 `random-suffix` 時，可尋找驅動程式及其關聯執行程式的日誌。只有在為作業[啟用重試政策](#retry-config)時，才會顯示 `random-suffix`；否則，`random-suffix` 就不存在。

如需有關如何使用日誌的監控組態來設定作業的詳細資訊，請參閱 [執行 Spark 應用程式](getting-started.md#getting-started-run-spark-app)。