具有寬限期的 EMR Serverless 任務執行取消 - Amazon EMR

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

具有寬限期的 EMR Serverless 任務執行取消

在資料處理系統中,突然終止可能會導致資源浪費、不完整的操作和潛在的資料不一致。Amazon EMR Serverless 可讓您在取消任務執行時指定寬限期。此功能允許在任務終止之前適當清除和完成進行中工作的時間。

取消任務執行時,您可以使用 參數指定寬限期 (以秒為單位),shutdownGracePeriodInSeconds在此期間任務可以在最終終止之前執行清除操作。行為和預設設定因批次和串流任務而異。

批次任務的寬限期

對於批次任務,EMR Serverless 可讓您實作在寬限期內執行的自訂清除操作。您可以在應用程式程式碼中將這些清除操作註冊為 JVM 關機掛鉤的一部分。

預設行為

關機的預設行為是沒有寬限期。它包含下列兩個動作:

  • 立即終止

  • 資源會立即釋出

組態選項

您可以指定導致正常關機的設定:

  • 關閉寬限期的有效範圍: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 秒寬限期。

  • 內建串流查詢接聽程式可管理正常關機。

組態選項

  • 關閉寬限期的有效範圍: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 分鐘。

    • 如果重試失敗,任務將強制終止。

帳單

任務會針對使用的運算資源計費,直到任務完全關閉為止,包括在寬限期內採取的任何時間。