使用 Dataflow 可攜式 Runner

使用 Dataflow 執行管道時,Dataflow 執行器會將管道程式碼和依附元件上傳至 Cloud Storage bucket,並建立 Dataflow 工作。這項 Dataflow 工作會在Google Cloud的受管理資源上執行管道。

  • 如果批次管道使用 Apache Beam Java SDK 2.54.0 以上版本,系統會預設啟用可攜式執行工具。
  • 如果管道使用 Apache Beam Java SDK,則必須使用 Portable Runner,才能執行多語言管道、使用自訂容器,或使用 Spanner 或 Bigtable 變更串流管道。如果是大規模 Java 串流管道,請使用 Streaming Java (預設) 執行工具。
  • 如果管道使用 Apache Beam Python SDK 2.21.0 以上版本,系統預設會啟用 Portable Runner。如果管道使用 Apache Beam Python SDK 2.45.0 以上版本,則只能使用 Dataflow 可攜式執行器。
  • 如果是 Go 適用的 Apache Beam SDK,可攜式執行工具是唯一可用的 Dataflow 執行工具。

Portable Runner 採用以服務為基礎的架構,可為許多管道帶來以下優勢:

使用建議

除非管道受到本文所述的其中一項限制影響,否則請根據管道需求,按照下列指引選取適當的執行器:

選取可攜式執行工具:

  • 所有批次管道。
  • 使用 Apache Beam Python SDK 或 Apache Beam SDK for Go 的串流管道。
  • 需要 GPU 支援機器學習處理的串流管道。
  • 使用任何可攜式執行器專屬功能的管道。

選取 Streaming Java Runner 的時機:

  • 使用 Apache Beam Java SDK 的串流管道。

限制和規定

Dataflow Portable Runner 具有下列規定和限制:

  • 僅限可攜式執行工具的功能:下列功能僅適用於可攜式執行工具:
    • Java 中的代管轉換和 RunInference。
    • 自訂容器。
    • 以 ARM 為基礎的 worker VM。
    • 可分割的 DoFn。我們正在研究是否支援 Non-Portable 執行器。
  • Dataflow Portable Runner 需要 Streaming Engine 才能執行串流工作。
  • 由於 Dataflow 可攜式執行工具需要 Streaming Engine 才能執行串流工作,因此任何需要 Dataflow 可攜式執行工具的 Apache Beam 轉換,也需要使用 Streaming Engine 執行串流工作。舉例來說,Apache Beam SDK for Python 的 Pub/Sub Lite I/O 連接器是跨語言轉換,需要 Dataflow 可攜式執行工具。如果嘗試為使用這項轉換的工作或範本停用 Streaming Engine,工作會失敗。
  • 在許多批次案例中,可攜式 Runner 的擴充性優於非可攜式 Runner,但固定分片時的記憶體用量可能會較高。
  • Dataflow 傳統範本無法使用與建構時不同的 Dataflow 執行工具版本執行。這表示 Google 提供的傳統範本無法啟用可攜式執行器。如要為自訂範本啟用可攜式 Runner,請在建構範本時設定適當的標記。這個標記取決於您使用的 SDK 版本:
    • Beam SDK 2.74 以上版本:--experiments=enable_portable_runner。
    • Beam SDK 2.73 以下版本:--experiments=use_runner_v2。
  • 由於自動調度資源的已知問題,對於需要有狀態處理的 Java 批次管道,系統預設會停用可攜式 Runner。 您仍可為這些管道啟用可攜式 Runner (請參閱「啟用可攜式 Runner」),但管道效能可能會嚴重受限。

  • 在某些管道中,Portable Runner 可能會增加一致性失敗的頻率。記錄檔中可能會顯示以下錯誤:「內部一致性檢查失敗,輸出內容可能不正確。請重試工作。可能的緩解措施是在 Join/GroupByKey 步驟後新增 Reshuffle 轉換。如果容錯率無法接受,且緩解措施無法解決問題,請嘗試停用 Portable Runner。

啟用可攜式執行工具

如要啟用 Dataflow 可攜式執行工具,請按照 Apache Beam SDK 的設定操作說明進行。

Java

Dataflow Portable Runner 必須使用 Apache Beam Java SDK 2.30.0 以上版本,建議使用 2.44.0 以上版本。

如果批次管道使用 Apache Beam Java SDK 2.54.0 以上版本,系統會預設啟用 Portable Runner。

如要啟用可攜式執行工具,請使用與 Beam SDK 版本和管道類型對應的實驗值執行作業:

  • Beam SDK 2.74 以上版本:enable_portable_runner。
  • Beam SDK 2.73 版和更早版本:use_runner_v2。

詳情請參閱「設定實驗管道選項」。

Python

如果管道使用 Apache Beam Python SDK 2.21.0 以上版本,系統預設會啟用 Portable Runner。

Apache Beam Python SDK 2.20.0 以下版本不支援 Dataflow 可攜式執行器。

在某些情況下,即使管道在支援的 SDK 版本上執行,也可能不會使用可攜式執行工具。如要使用 Portable Runner 執行工作,請設定與 Beam SDK 版本對應的實驗值:

  • Beam SDK 2.74 以上版本:enable_portable_runner。
  • Beam SDK 2.73 版和更早版本:use_runner_v2。

詳情請參閱「設定實驗管道選項」。

Go

Dataflow Portable Runner 是唯一適用於 Apache Beam SDK for Go 的 Dataflow 執行元件,且預設為啟用。

停用可攜式執行工具

如要停用 Dataflow 可攜式執行器,請按照 Apache Beam SDK 的設定說明操作。

Java

如要停用可攜式執行器,請設定與 Beam SDK 版本對應的實驗值:

  • Beam SDK 2.74 以上版本:
    • 如果是批次作業,請使用 disable_portable_runner。
    • 如要串流,請使用 enable_streaming_java_runner。
  • Beam SDK 2.73 以下版本:disable_runner_v2。

這會將工作預設為非可攜式執行工具,或串流 Java 執行工具。詳情請參閱「設定實驗性管道選項」。

Python

Apache Beam Python SDK 2.45.0 以上版本不支援停用可攜式 Runner。

如果是舊版 Python SDK,若系統判定您的工作使用 auto_runner_v2 實驗,您可以設定 disable_runner_v2 實驗,停用可攜式執行工具。詳情請參閱「設定實驗性管道選項」。

Go

Dataflow Portable Runner 無法在 Go 中停用。Portable Runner 是 Apache Beam SDK for Go 唯一可用的 Dataflow 執行工具。

監控工作

使用監控介面查看Dataflow 工作指標,例如記憶體用量、CPU 用量等。

您可以透過 Logs Explorer 和 Dataflow 監控介面,查看 worker VM 記錄。Worker VM 記錄包含執行工具控管程序和 SDK 程序的記錄。您可以使用 VM 記錄檔排解工作問題。

排解 Portable Runner 問題

如要排解使用 Dataflow Portable Runner 的工作問題,請按照標準管道疑難排解步驟操作。下列清單提供 Dataflow Portable Runner 運作方式的額外資訊:

  • Dataflow Portable Runner 工作會在 worker VM 上執行兩種程序:SDK 程序和 Runner Harness 程序。視管道和 VM 類型而定,可能會有一或多個 SDK 程序,但每個 VM 只有一個執行工具架構程序。
  • SDK 程序會執行使用者程式碼和其他語言專屬函式。其餘部分則由執行工具控管程序管理。
  • 執行器安全帶程序會等待所有 SDK 程序連線至該程序,然後才開始向 Dataflow 要求工作。
  • 如果 worker VM 在 SDK 程序啟動期間下載及安裝依附元件,工作可能會延遲。如果 SDK 處理程序發生問題 (例如啟動或安裝程式庫時),工作站會回報狀態為不正常。如果啟動時間變長,請在專案中啟用 Cloud Build API,並使用下列參數提交管道:--prebuild_sdk_container_engine=cloud_build。
  • 由於 Dataflow Portable Runner 使用檢查點,每個 worker 在緩衝處理變更時,最多可能會等待五秒,然後再傳送變更以進行後續處理。因此,延遲時間預計約為六秒。
  • 如要診斷使用者程式碼中的問題,請檢查 SDK 程序中的 worker 記錄。如果在執行器安全帶記錄中發現任何錯誤,請與支援團隊聯絡,回報錯誤。
  • 如要偵錯與 Dataflow 多語言管道相關的常見錯誤,請參閱「多語言管道提示」指南。