概觀

本頁包含針對在未使用 linux 作業系統或 amd64 架構的機器上開始使用 Go SDK 管道的使用者提供的技術詳細資訊。

Go 是一種靜態編譯的程式語言。若要在機器上執行 Go 二進位檔,必須針對相符的作業系統和處理器架構進行編譯。這會影響 Go SDK 管道在工作站上的執行方式。

開發:使用 go run

當針對遠端執行器啟動開發中的管道時,您可以從開發環境中使用 go run。Go SDK 會將您的管道跨平台編譯為 linux-amd64,並將其用作管道的工作站二進位檔。

或者,某些本機執行器支援迴路執行。設定旗標 --environment_type=LOOPBACK 可以讓執行器連回到本機二進位檔作為工作站。這可以簡化開發和除錯,方法是避免將記錄輸出隱藏在容器中。

生產:覆寫工作站二進位檔

Go SDK 管道二進位檔具有 --worker_binary 旗標,可設定所需工作站二進位檔的路徑。本節將教您如何使用此旗標來建立穩健的 Go 管道。

在生產設定中,通常只能存取已編譯的成品。對於 Go SDK 管道,您可能需要兩個:一個用於啟動平台,另一個用於工作站平台。

為了在特定平台上執行 Go 程式,該程式必須建置為目標平台的作業系統和架構。Go 編譯器可以藉由設定建置的$GOOS$GOARCH 環境變數來跨平台編譯為目標架構。

例如,您可能會從 M1 Macbook 啟動管道,但在具有 amd64 處理器的 Linux VM 上執行的 Flink 叢集上執行作業。在這種情況下,您需要為啟動的 darwin-arm64linux-amd64 編譯管道二進位檔。

# Build binary for the launching platform.
# This uses the defaults for your machine, so no new environment variables are needed.
$ go build path/to/my/pipeline -o output/launcher

# Build binary for the worker platform, linux-amd64
$ GOOS=linux GOARCH=amd64 go build path/to/my/pipeline -o output/worker

執行管道時,將 --worker_binary 旗標設定為所需的二進位檔。

# Launch the pipeline specifying the worker binary.
$ ./output/launcher --worker_binary=output/worker --runner=flink --endpoint=... <...other flags...>

SDK 容器

Apache Beam 發布特定於 SDK 的容器,供執行器用來啟動工作站。這些容器會佈建並初始化工作站二進位檔,使其適合 SDK。

目前,Go SDK 工作站容器僅針對 linux-amd64 平台建置。如需 ARM64 容器支援的目前狀態,請參閱Issue 20807

由於 Go 是靜態編譯的,因此容器對特定 Go 版本沒有執行階段相依性。但是,根據您建置二進位檔的方式,用來編譯二進位檔的 Go 版本會是您的工作站執行的版本。請務必更新到最新的Go 版本,以獲得最佳效能。

CG0_ENABLED=0 和 glibc

從 Beam 2.48.0 開始,預設的跨平台編譯會設定 CGO_ENABLED=0,以減少開機容器和 glibc 版本的問題。如果您的管道需要 CGO 才能執行,請參閱上方的「覆寫工作站二進位檔」,以瞭解如何使用您自己建置的二進位檔。

Beam 使用最小的 debian 容器作為基礎。如果您的二進位檔有特定的執行需求,可以從發佈的容器衍生自訂容器以滿足它們。使用自訂容器來解決 glibc 不符或需要在執行時提供其他二進位檔的問題。