使用 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 可用。
可攜式 Runner 採用以服務為基礎的架構,可為許多管道帶來以下優勢:
Dataflow Portable Runner 可讓您預先建構 Python 容器,進而縮短 VM 啟動時間,並提升水平自動調度資源效能。詳情請參閱「預先建構 Python 依附元件」。
Dataflow 可攜式執行器支援多語言管道,這項功能可讓 Apache Beam 管道使用其他 Apache Beam SDK 中定義的轉換。Dataflow 可攜式 Runner 支援從 Python SDK 管道使用 Java 轉換,以及從 Java SDK 管道使用 Python 轉換。如果您執行 Apache Beam 管道時未使用可攜式執行器,Dataflow 執行器會使用特定語言的工作站。
限制和規定
Dataflow 可攜式 Runner 具有下列規定和限制:
- 僅限可攜式功能:下列功能僅支援可攜式跑步機:
- Java 中的受管理轉換和
RunInference。 - 自訂容器。
- ARM 架構的 worker VM。
- 可分割的 DoFn。我們正在研究是否支援 Non-Portable 執行器。
- Java 中的受管理轉換和
- 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 不支援
MapState和SetState類別。如要在 Java 管道中使用MapState和SetState類別,請啟用 Streaming Engine、停用可攜式 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。
- Beam SDK 2.74 以上版本:
由於自動調度資源的已知問題,對於需要有狀態處理的 Java 批次管道,系統預設會停用可攜式 Runner。您仍可為這些管道啟用可攜式 Runner (請參閱「啟用可攜式 Runner」),但管道效能可能會嚴重受限。
在某些管道中,Portable Runner 可能會提高一致性失敗的頻率。您可能會在記錄檔中看到以下錯誤:「Internal consistency check failed, the output is likely incorrect. 請重試工作」。可能的緩解措施是在
Join/GrouByKey步驟後新增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(批次) 或enable_streaming_java_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 可攜式執行器是唯一適用於 Apache Beam SDK for Go 的 Dataflow 執行器,且預設為啟用狀態。
停用可攜式執行器
如要停用 Dataflow Portable Runner,請按照 Apache Beam SDK 的設定說明操作。
Java
如要停用可攜式 Runner,請設定與 Beam SDK 版本對應的實驗值:
- Beam SDK 2.74 以上版本:
disable_portable_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 可攜式執行器。可攜式執行器是 Apache Beam SDK for Go 唯一可用的 Dataflow 執行器。
監控工作
使用監控介面查看Dataflow 工作指標,例如記憶體用量和 CPU 用量等。
您可以透過 Logs Explorer 和 Dataflow 監控介面查看 Worker VM 記錄。工作站 VM 記錄包括執行器安全帶程序的記錄,以及 SDK 程序的記錄。您可以使用 VM 記錄排解工作問題。
排解可攜式 Runner 問題
如要使用 Dataflow Portable Runner 排解工作問題,請按照標準管道疑難排解步驟操作。下列清單提供 Dataflow 可攜式 Runner 運作方式的額外資訊:
- 使用 Dataflow Portable Runner 的工作會在工作站 VM 上執行兩種程序:SDK 程序和 Runner 繫結程序。視管道和 VM 類型而定,可能有一個或多個 SDK 程序,但每個 VM 只有一個 Runner Harness 程序。
- SDK 程序會執行使用者程式碼和其他語言專屬函式。其他所有工作都由執行器架構程序管理。
- 在開始向 Dataflow 要求工作之前,執行器安全帶程序會等待所有 SDK 程序連線。
- 如果工作站 VM 在 SDK 程序啟動期間下載及安裝依附元件,工作可能會延遲。如果 SDK 處理程序發生問題 (例如啟動或安裝程式庫時),工作站會回報狀態為不正常。如果啟動時間變長,請在專案中啟用 Cloud Build API,並使用下列參數提交管道:
--prebuild_sdk_container_engine=cloud_build。 - 由於 Dataflow Portable Runner 使用檢查點,每個 worker 最多可能會等待五秒,緩衝處理變更,然後再傳送變更以進行後續處理。因此,預計會有約六秒的延遲。
- 如要診斷使用者程式碼中的問題,請檢查 SDK 程序的背景工作記錄。如果發現執行器安全帶記錄中有任何錯誤,請與支援團隊聯絡,回報錯誤。
- 如要對 Dataflow 多語言管道相關的常見錯誤進行偵錯,請參閱「多語言管道提示」指南。