EMR サーバーレスジョブの耐障害性 - Amazon EMR

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

EMR サーバーレスジョブの耐障害性

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

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

バッチジョブ ストリーミングジョブ
デフォルトの動作 ジョブを再実行しません。 アプリケーションがジョブの実行中にチェックポイントを作成するため、常にジョブの実行を再試行します。
再試行ポイント バッチジョブにはチェックポイントがないため、EMRサーバーレスは常にジョブを最初から再実行します。 ストリーミングジョブはチェックポイントをサポートするため、Amazon S3 のチェックポイントの場所にランタイム状態と進行状況を保存するようにストリーミングクエリを設定できます。EMR サーバーレスはチェックポイントからジョブ実行を再開します。詳細については、Apache Spark ドキュメントの「チェックポイントによる障害からの回復」を参照してください。
再試行の最大回数 最大 10 回の再試行を許可します。 ストリーミングジョブにはスラッシュ防止コントロールが組み込まれているため、1 時間後にジョブが失敗し続けると、アプリケーションは再試行を停止します。1 時間以内のデフォルトの再試行回数は 5 回です。この再試行回数は 1~10 回に設定できます。最大試行回数をカスタマイズすることはできません。値が 1 の場合、再試行がないことを示します。

EMR Serverless がジョブを再実行しようとすると、ジョブに試行番号のインデックスも付けられるため、試行全体のジョブのライフサイクルを追跡できます。

EMR Serverless APIオペレーションまたは AWS CLI は、ジョブの耐障害性を変更したり、ジョブの耐障害性に関連する情報を表示したりします。詳細については、EMR「サーバーレスAPIガイド」を参照してください。

デフォルトでは、EMRサーバーレスはバッチジョブを再実行しません。バッチジョブの再試行を有効にするには、バッチジョブの実行を開始するときに 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 サーバーレスは、失敗したストリーミングジョブを無期限に再試行します。回復不可能な障害が繰り返し発生するためにスラッシュを防ぐには、 を使用して、ストリーミングジョブの再試行のスラッシュ防止コントロールmaxFailedAttemptsPerHourを設定します。このパラメータを使用すると、EMRサーバーレスが再試行を停止するまでの 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オペレーションを使用して、ジョブに関する情報を取得することもできます。例えば、 attemptパラメータを GetJobRunオペレーションで使用して、特定のジョブの試行に関する詳細を取得できます。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 オペレーションは、ジョブ実行UIsのアプリケーションにアクセスするためにURL使用できる を作成して返します。attempt パラメータを使用すると、特定の試行URLに対して を取得できます。attempt パラメータを含めない場合、オペレーションは最新の試行に関する情報を返します。

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

再試行ポリシーを使用してジョブをモニタリングする

ジョブの耐障害性のサポートでは、新しいイベント EMR Serverless ジョブ実行再試行 も追加されます。EMR Serverless は、ジョブの再試行ごとにこのイベントを発行します。この通知を使用して、ジョブの再試行を追跡できます。イベントの詳細については、「Amazon EventBridge イベント」を参照してください。

再試行ポリシーによるログ記録

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

形式の例を次に示します。

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

この形式により、EMRServerless はジョブの試行ごとにすべてのログを Amazon S3 および 内の独自の指定された場所に発行します CloudWatch。詳細については、「ログの保存」を参照してください。

注記

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