ジョブ再試行ポリシーの使用 - Amazon EMR

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

ジョブ再試行ポリシーの使用

Amazon EMR on EKS バージョン 6.9.0 以降では、ジョブ実行の再試行ポリシーを設定できます。再試行ポリシーにより、ジョブドライバーポッドが失敗したり削除されたりすると、自動的に再起動されます。これにより、長時間実行されている Spark ストリーミングジョブの障害に対する耐性が高まります。

ジョブの再試行ポリシーの設定

再試行ポリシーを設定するには、StartJobRun 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://DOC-EXAMPLE-BUCKET-LOGGING" } } }'
注記

retryPolicyConfiguration は AWS CLI 1.27.68 バージョン以降でのみ利用可能です。AWS CLI を最新バージョンに更新するには、「AWS CLI の最新バージョンを使用してインストールまたは更新を行う」を参照してください

maxAttempts フィールドには、ジョブドライバーポッドが失敗したり削除されたりした場合に再起動する最大回数を設定します。ジョブドライバーが 2 回再試行する間の実行間隔は、Kubernetes ドキュメントで説明されているように、指数関数的な再試行間隔 (10 秒、20 秒、40 秒...) で、上限は 6 分です。

注記

ジョブドライバーを追加実行するたびに、別のジョブ実行として請求され、Amazon EMR on EKS 料金が適用されます。

再試行ポリシー設定値

  • ジョブのデフォルト再試行ポリシー: StartJobRun には、デフォルトで最大試行回数 1 回に設定された再試行ポリシーが含まれます。再試行ポリシーは、必要に応じて設定できます。

    注記

    retryPolicyConfigurationmaxAttempts が 1 に設定されている場合、失敗時にドライバーポッドを起動するための再試行は行われません。

  • ジョブの再試行ポリシーを無効にする: 再試行ポリシーを無効にするには、retryPolicyConfiguration の最大試行値を 1 に設定します。

    "retryPolicyConfiguration": { "maxAttempts": 1 }
  • 有効範囲内のジョブに maxAttempts を設定する: maxAttempts 値が有効範囲外の場合、StartJobRun 呼び出しは失敗します。有効な maxAttempts 範囲は 1 から 2,147,483,647 (32 ビット整数) で、これは Kubernetes の backOffLimit 構成設定でサポートされている範囲です。詳細については、Kubernetes ドキュメントの「Pod 失敗のバックオフポリシー」を参照してください。maxAttempts 値が無効な場合、以下のエラーメッセージが返されます。

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

ジョブの再試行ポリシーステータスの取得

ListJobRuns および DescribeJobRun API を使用して、ジョブの再試行のステータスを表示できます。再試行ポリシー設定が有効になっているジョブをリクエストすると、ListJobRun および DescribeJobRun レスポンスには、RetryPolicyExecution フィールドの再試行ポリシーのステータスが含まれます。さらに、DescribeJobRun レスポンスにはジョブの StartJobRun リクエストに入力された RetryPolicyConfiguration が含まれます。

レスポンス例

ListJobRuns response
{ "jobRuns": [ ... ... "retryPolicyExecution" : { "currentAttemptCount": 2 } ... ... ] }
DescribeJobRun response
{ ... ... "retryPolicyConfiguration": { "maxAttempts": 5 }, "retryPolicyExecution" : { "currentAttemptCount": 2 }, ... ... }

これらのフィールドは、以下の「再試行ポリシー設定値」で説明するように、ジョブで再試行ポリシーが無効になっている場合は表示されません。

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

再試行ポリシーを有効にすると、作成されたジョブドライバーごとに CloudWatch イベントが生成されます。これらのイベントをサブスクライブするには、以下のコマンドを使用して CloudWatch イベントルールを設定します。

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

このイベントはジョブドライバーの newDriverPodNamenewDriverCreatedAt タイムスタンプ、previousDriverFailureMessage、および currentAttemptCount に関する情報を返します。再試行ポリシーが無効になっている場合、これらのイベントは作成されません。

CloudWatch イベントを使用してジョブをモニタリングする方法の詳細については、「Amazon CloudWatch Events でジョブをモニタリングする」を参照してください。

ドライバーとエグゼキュター用のログを検索する

ドライバーポッド名は形式 spark-<job id>-driver-<random-suffix> に従います。ドライバーが生成するエグゼキューターポッド名にも同じ random-suffix が追加されます。この random-suffix を使用すると、ドライバーとそれに関連するエグゼキューターのログを検索できます。random-suffix は、そのジョブの再試行ポリシーが有効になっている場合にのみ存在します。それ以外の場合は、random-suffix は存在しません。

ログ記録用のモニタリング設定を使用してジョブを設定する方法の詳細については、「Spark アプリケーションの実行」を参照してください。