

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# EMR Serverless ジョブの耐障害性
<a name="jobs-resiliency"></a>

 EMR Serverless リリース 7.1.0 以降には、ジョブの耐障害性のサポートが含まれているため、失敗したジョブはユーザーによる手動入力を必要とせず自動的に再試行されます。ジョブの障害耐性のもう 1 つの利点は、AZ で問題が発生した場合に EMR Serverless がジョブ実行を異なるアベイラビリティーゾーン (AZ) に移動することです。

ジョブの障害耐性を有効にするには、ジョブの再試行ポリシーを設定します。再試行ポリシーは、ジョブがいずれかの時点で失敗した場合に EMR Serverless が自動的に再起動するようにします。再試行ポリシーはバッチジョブとストリーミングジョブでサポートされるため、ユースケースに応じてジョブの耐障害性をカスタマイズします。次の表は、バッチジョブとストリーミングジョブ全体におけるジョブの耐障害性の動作と相違点を比較したものです。


|  | バッチジョブ | ストリーミングジョブ | 
| --- | --- | --- | 
| デフォルトの 動作 | ジョブを再実行しません。 | アプリケーションがジョブの実行中にチェックポイントを作成するため、常にジョブの実行を再試行します。 | 
| 再試行ポイント | バッチジョブにはチェックポイントがないため、EMR Serverless は常にジョブを最初から再実行します。 | ストリーミングジョブはチェックポイントをサポートしているため、ランタイム状態を保存し、Amazon S3 のチェックポイントの場所に進むようにストリーミングクエリを設定します。EMR Serverless は、チェックポイントからのジョブ実行を再開します。詳細については、Apache Spark ドキュメントの「[Recovering from failures with Checkpointing](https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#recovering-from-failures-with-checkpointing)」を参照してください。 | 
| 再試行の最大回数 | 最大 10 回の再試行を許可します。 | ストリーミングジョブにはスラッシュ防止コントロールが組み込まれているため、1 時間にわたってジョブが失敗し続けると、アプリケーションは再試行を停止します。1 時間以内のデフォルトの再試行回数は 5 回です。この再試行回数は 1～10 に設定できます。最大試行回数をカスタマイズすることはできません。値 1 は、再試行が行われないことを示します。 | 

EMR Serverless はジョブの再実行を試みる際に、ジョブに試行番号のインデックスも付加するため、試行全体でジョブのライフサイクルを追跡します。

EMR Serverless API オペレーションまたは を使用して AWS CLI 、ジョブの耐障害性を変更したり、ジョブの耐障害性に関連する情報にアクセスしたりできます。詳細については、「[EMR Serverless API guide](https://docs.aws.amazon.com/emr-serverless/latest/APIReference/Welcome.html)」を参照してください。

デフォルトでは、EMR Serverless はバッチジョブを再実行しません。バッチジョブの再試行を有効にするには、バッチジョブの実行を開始するときに `maxAttempts` パラメータを設定します。`maxAttempts` パラメータはバッチジョブにのみ適用されます。デフォルトは 1 です。つまり、ジョブを再実行しません。使用できる値は 1～10 (両端の値を含む) です。

次の例は、ジョブ実行の開始時に最大試行回数として 10 回を指定する方法を示しています。

```
aws emr-serverless start-job-run
 --application-id <APPLICATION_ID> \
 --execution-role-arn <JOB_EXECUTION_ROLE> \
 --mode 'BATCH' \
 --retry-policy '{
    "maxAttempts": 10
 }' \
 --job-driver '{
    "sparkSubmit": {
         "entryPoint": "/usr/lib/spark/examples/jars/spark-examples-does-not-exist.jar",
         "entryPointArguments": ["1"],
         "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi"
     }
}'
```

EMR Serverless は、失敗したストリーミングジョブを無期限に再試行します。回復不可能な障害が繰り返し発生することによるスラッシングを回避するには、`maxFailedAttemptsPerHour` を使用してストリーミングジョブの再試行のスラッシュ防止コントロールを設定します。このパラメータを使用すると、EMR Serverless が再試行を停止するまでの 1 時間に許容される失敗の最大試行回数を指定できます。デフォルトは 5 回です。使用できる値は 1～10 (両端の値を含む) です。

```
aws emr-serverless start-job-run
 --application-id <APPPLICATION_ID> \
 --execution-role-arn <JOB_EXECUTION_ROLE> \
 --mode 'STREAMING' \
 --retry-policy '{
    "maxFailedAttemptsPerHour": 7
 }' \
 --job-driver '{
    "sparkSubmit": {
         "entryPoint": "/usr/lib/spark/examples/jars/spark-examples-does-not-exist.jar",
         "entryPointArguments": ["1"],
         "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi"
     }
}'
```

他のジョブ実行 API オペレーションを使用して、ジョブに関する情報を取得することもできます。例えば、`GetJobRun` オペレーションで `attempt` パラメータを使用して、特定のジョブの試行に関する詳細情報を取得します。`attempt` パラメータを設定しない場合は、オペレーションによって最新の試行に関する情報が返されます。

```
aws emr-serverless get-job-run \
    --job-run-id job-run-id \
    --application-id application-id \
    --attempt 1
```

`ListJobRunAttempts` オペレーションは、ジョブ実行に関連するすべての試行に関する情報を返します。

```
aws emr-serverless list-job-run-attempts \
  --application-id application-id \
  --job-run-id job-run-id
```

`GetDashboardForJobRun` オペレーションは、ジョブ実行のアプリケーション UI にアクセスするために使用する URL を作成して返します。`attempt` パラメータを使用すると、特定の試行の URL を取得できます。`attempt` パラメータを設定しない場合は、オペレーションによって最新の試行に関する情報が返されます。

```
aws emr-serverless get-dashboard-for-job-run \
    --application-id application-id \
    --job-run-id job-run-id \
    --attempt 1
```

## 再試行ポリシーを使用してジョブをモニタリングする
<a name="SECTION-jobs-resiliency-monitor-retry-policy"></a>

ジョブの耐障害性サポートでは、新しいイベント **EMR Serverless ジョブ実行の再試行**も追加されます。EMR Serverless は、ジョブの再試行ごとにこのイベントを発行します。この通知を使用して、ジョブの再試行を追跡できます。イベントの詳細については、「[Amazon EventBridge events](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html)」を参照してください。

## 再試行ポリシーを使用したログ記録
<a name="SECTION-jobs-resiliency-log-retry-policy"></a>

EMR Serverless がジョブを再試行するたびに、試行によって独自のログセットが生成されます。EMR Serverless がこれらのログを上書きせずに Amazon S3 と Amazon CloudWatch に正常に配信できるようにするため、EMR Serverless は S3 ログパスと CloudWatch ログストリーム名の形式にプレフィックスを追加して、ジョブの試行数を設定します。

以下に示しているのは、形式の具体的な例です。

```
'/applications/<applicationId>/jobs/<jobId>/attempts/<attemptNumber>/'.
```

この形式により、EMR Serverless はジョブの試行ごとにすべてのログを Amazon S3 および CloudWatch の独自の指定場所に発行します。詳細については、「[Storing logs](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/logging.html)」を参照してください。

**注記**  
EMR Serverless は、すべてのストリーミングジョブと再試行が有効になっているバッチジョブでのみ、このプレフィックス形式を使用します。