EMR Serverless ジョブ実行のキャンセルと猶予期間 - Amazon EMR

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

EMR Serverless ジョブ実行のキャンセルと猶予期間

データ処理システムでは、突然終了すると、リソースの無駄、不完全なオペレーション、潜在的なデータの不整合が発生する可能性があります。Amazon EMR Serverless では、ジョブ実行をキャンセルするときに猶予期間を指定できます。この機能を使用すると、ジョブが終了する前に、適切なクリーンアップと進行中の作業の完了にかかる時間を確保できます。

ジョブ実行をキャンセルするときは、 パラメータを使用して猶予期間 (秒単位) を指定できます。このshutdownGracePeriodInSeconds間、ジョブは最終終了前にクリーンアップオペレーションを実行できます。動作とデフォルト設定は、バッチジョブとストリーミングジョブによって異なります。

バッチジョブの猶予期間

バッチジョブの場合、EMR Serverless では、猶予期間中に実行されるカスタムクリーンアップオペレーションを実装できます。これらのクリーンアップオペレーションは、JVM シャットダウンフックの一部としてアプリケーションコードに登録できます。

デフォルトの動作

シャットダウンのデフォルトの動作は、猶予期間がないことです。これは、次の 2 つのアクションで構成されます。

  • 即時終了

  • リソースはすぐにリリースされます

設定オプション

正常なシャットダウンにつながる設定を指定できます。

  • Shutdown Grace 期間の有効な範囲: 15~1800 秒 (オプション)

  • 即時終了 (猶予期間なし): 0 秒

正常なシャットダウンを有効にする

バッチジョブの正常なシャットダウンを実装するには、次の手順に従います。

  1. カスタムシャットダウンロジックを含むアプリケーションコードにシャットダウンフックを追加します。

    Example in Scala
    import org.apache.hadoop.util.ShutdownHookManager // Register shutdown hook with priority (second argument) // Higher priority hooks run first ShutdownHookManager.get().addShutdownHook(() => { logger.info("Performing cleanup operations...") }, 100)

    ShutdownHookManager の使用

    Example in PySpark
    import atexit def cleanup(): # Your cleanup logic here print("Performing cleanup operations...") # Register the cleanup function atexit.register(cleanup)
  2. ジョブをキャンセルするときに猶予期間を指定して、上記で追加されたフックの実行に時間を確保します。

    # Default (immediate termination) aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID # With 5-minute grace period aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID \ --shutdown-grace-period-in-seconds 300

ストリーミングジョブの猶予期間

Spark 構造化ストリーミングでは、計算に外部データソースとの読み取りまたは書き込みが含まれるため、突然シャットダウンすると望ましくない結果が生じる可能性があります。ストリーミングジョブはマイクロバッチでデータを処理し、これらのオペレーションを途中で中断すると、その後の試行で処理が重複する可能性があります。これは、前のマイクロバッチの最新チェックポイントが書き込まれなかった場合に発生し、ストリーミングジョブの再起動時に同じデータが再度処理されます。このような重複処理はコンピューティングリソースを浪費するだけでなく、ビジネスオペレーションにも影響するため、突然のシャットダウンを避けることが重要です。

EMR Serverless は、ストリーミングクエリリスナーによる正常なシャットダウンを組み込みでサポートします。これにより、ジョブの終了前に進行中のマイクロバッチが適切に完了します。このサービスは、ストリーミングアプリケーションのマイクロバッチ間の正常なシャットダウンを自動的に管理し、現在のマイクロバッチが処理を完了し、チェックポイントが適切に書き込まれ、シャットダウンプロセス中に新しいデータを取り込まずにストリーミングコンテキストがクリーンに終了されるようにします。

デフォルトの動作

  • デフォルトで有効になっている 120 秒の猶予期間。

  • 組み込みのストリーミングクエリリスナーは、正常なシャットダウンを管理します。

設定オプション

  • Shutdown Grace 期間の有効な範囲: 15~1800 秒 (オプション)

  • 即時終了: 0 秒

グレースフルシャットダウンを有効にする

ストリーミングジョブに正常なシャットダウンを実装するには:

ジョブをキャンセルするときに猶予期間を指定して、進行中のマイクロバッチが完了するまでの時間を確保します。

# Default graceful shutdown (120 seconds) aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID # Custom grace period (e.g. 300 seconds) aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID \ --shutdown-grace-period-in-seconds 300 # Immediate Termination aws emr-serverless cancel-job-run \ --application-id APPLICATION_ID \ --job-run-id JOB_RUN_ID \ --shutdown-grace-period-in-seconds 0

カスタムシャットダウンフックを追加する (オプション)

EMR Serverless は、組み込みのストリーミングクエリリスナーを通じてデフォルトで正常なシャットダウンを管理しますが、オプションで個々のストリーミングクエリにカスタムシャットダウンロジックを実装できます。EMR Serverless は、正常なシャットダウンリスナーを優先度 60 (ShutdownHookManager を使用) で登録します。優先度の高いフックが最初に実行されるため、カスタムクリーンアップオペレーションを 60 を超える優先度で登録して、EMR Serverless のシャットダウンプロセスが開始される前に実行されるようにすることができます。

カスタムフックを追加するには、アプリケーションコードにシャットダウンフックを追加する方法を示すこのトピックの最初の例を参照してください。ここで、優先度は 100 で、60 より大きくなります。したがって、このようなシャットダウンフックが最初に実行されます。

注記

カスタムシャットダウンフックはオプションであり、EMR Serverless によって自動的に処理される正常なシャットダウン機能には必要ありません。

猶予期間の料金とバッチ期間

猶予期間 (120 秒) のデフォルト値を使用する場合:

  • バッチ期間が 120 秒未満の場合は、バッチの完了に必要な実際の時間に対してのみ課金されます。

  • バッチ期間が 120 秒を超える場合、最大猶予期間 (120 秒) に対して課金されますが、クエリは強制終了されるため、正常にシャットダウンされない場合があります。

コストを最適化し、正常なシャットダウンを確保するには:

  • バッチ期間 > 120 秒の場合: バッチ期間に合わせて猶予期間を増やすことを検討してください

  • バッチ期間 < 120 秒の場合: 実際の処理時間に対してのみ課金されるため、猶予期間を調整する必要はありません

考慮事項

猶予期間の動作

  • 猶予期間は、登録されたシャットダウンフックが完了するまでの時間を提供します。

  • ジョブは、猶予期間よりかなり前であっても、シャットダウンフックが終了するとすぐに終了します。

  • クリーンアップオペレーションが猶予期間を超えると、ジョブは強制的に終了します。

サービスの動作

  • 猶予期間のシャットダウンは、RUNNING 状態のジョブでのみ使用できます。

  • CANCELLING 状態の後続のキャンセルリクエストは無視されます。

  • 内部サービスエラーが原因で EMR Serverless が猶予期間シャットダウンの開始に失敗した場合:

    • サービスは最大 2 分間再試行します。

    • 再試行が失敗すると、ジョブは強制的に終了します。

「請求」

ジョブは、猶予期間中にかかった時間を含め、ジョブが完全にシャットダウンするまで使用されたコンピューティングリソースに対して請求されます。