使用 Dataflow 可攜式 Runner

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

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

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

使用建議

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

選取可攜式 Runner 的適用對象:

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

選取串流 Java Runner:

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

限制和規定

Dataflow 可攜式 Runner 具有下列規定和限制:

  • 僅限攜帶式跑步機的功能:下列功能僅適用於攜帶式跑步機:
    • Java 中的受管理轉換RunInference
    • 自訂容器。
    • ARM 架構的 worker VM。
    • 可分割的 DoFn。我們正在研究是否支援 Non-Portable 執行器。
  • Dataflow Portable Runner 必須使用 Streaming Engine 處理串流工作。
  • 由於 Dataflow Portable Runner 需要 Streaming Engine 才能執行串流工作,因此任何需要 Dataflow Portable Runner 的 Apache Beam 轉換,也必須使用 Streaming Engine 執行串流工作。舉例來說,Python 適用的 Apache Beam SDK 的 Pub/Sub Lite I/O 連接器是跨語言轉換,需要 Dataflow 可攜式執行器。如果您嘗試為使用這項轉換的工作或範本停用 Streaming Engine,工作就會失敗。
  • 對於使用 Apache Beam Java SDK 的串流管道,可攜式 Runner 不支援 MapStateSetState 類別。如要在 Java 管道中使用 MapStateSetState 類別,請啟用 Streaming Engine、停用 Portable Runner,並使用 Apache Beam SDK 2.58.0 以上版本。
  • 對於使用 Apache Beam Java SDK 的批次和串流管道,系統不支援類別 AfterSynchronizedProcessingTime
  • 在許多情況下,可攜式 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。您仍可為這些管道啟用可攜式執行器 (請參閱「啟用可攜式執行器」),但管道效能可能會嚴重受限。

  • 在某些管道中,Portable Runner 可能會增加一致性失敗的頻率。您可能會在記錄檔中看到以下錯誤:「Internal consistency check failed, the output is likely incorrect. 請重試工作。可能的緩解措施是在 Join/GroupByKey 步驟後新增 Reshuffle 轉換。如果容錯率無法接受,且緩解措施無法解決問題,請嘗試停用 Portable Runner

啟用可攜式 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。

如要啟用可攜式 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 Portable Runner。

在某些情況下,即使管道在支援的 SDK 版本上執行,也可能不會使用可攜式 Runner。如要使用 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 Portable Runner,請按照 Apache Beam SDK 的設定說明操作。

Java

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

  • Beam SDK 2.74 以上版本:
    • 如為批次,請使用 disable_portable_runner
    • 如要進行串流,請使用 enable_streaming_java_runner
  • Beam SDK 2.73 版和更早版本:disable_runner_v2

這項作業會將工作預設為 Non-Portable Runner,或串流的 Streaming Java Runner。詳情請參閱「設定實驗性管道選項」。

Python

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

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

Go

您無法在 Go 中停用 Dataflow Portable Runner。Portable Runner 是適用於 Go 的 Apache Beam SDK 唯一可用的 Dataflow 執行器。

監控工作

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

您可以透過 Logs ExplorerDataflow 監控介面查看 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 只有一個 Runner 繫結程序。
  • SDK 程序會執行使用者程式碼和其他語言專屬函式。其餘所有作業都由 Runner 輔助程序管理。
  • 在開始向 Dataflow 要求工作之前,執行器安全帶程序會等待所有 SDK 程序連線。
  • 如果工作站 VM 在 SDK 程序啟動期間下載及安裝依附元件,工作可能會延遲。如果 SDK 處理程序發生問題 (例如啟動或安裝程式庫時),工作站會回報狀態為不正常。如果啟動時間變長,請在專案中啟用 Cloud Build API,並使用下列參數提交管道:--prebuild_sdk_container_engine=cloud_build
  • 由於 Dataflow Portable Runner 使用檢查點機制,每個 worker 可能會等待最多五秒,緩衝處理變更,然後再傳送變更以供進一步處理。因此,預計會有約六秒的延遲。
  • 如要診斷使用者程式碼中的問題,請檢查 SDK 程序的背景工作記錄。如果發現執行器安全帶記錄中有任何錯誤,請與支援團隊聯絡,回報錯誤。
  • 如要對 Dataflow 多語言管道相關的常見錯誤進行偵錯,請參閱「多語言管道提示」指南。