概觀
本頁包含針對在未使用 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-arm64
和 linux-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 不符或需要在執行時提供其他二進位檔的問題。