[英]Write to ConfluentCloud from Apache Beam (GCP Dataflow)
[英]How to manually copy executable to workers with Apache Beam Dataflow on GCP
Beam 和 GCP 有點新。 按照本文檔並使用 Beam 的“子流程”示例,我一直在研究一個簡單的 Java 管道,該管道運行 C 二進制文件。 使用 directRunner 時它運行良好,我現在正試圖讓它在雲中運行。 隨着文件暫存在 gs 存儲桶中,我收到錯誤消息:'無法運行程序“gs://mybucketname/tmp/grid_working_files/Echo”:錯誤 = 2,沒有這樣的文件或目錄'這是有道理的,因為我猜你可以'不直接從雲存儲中執行? 我現在卡住的地方是如何將可執行文件移動到工作人員。 該文件指出:
當您使用本機 Apache Beam 語言(Java 或 Python)時,Beam SDK 會自動將所有必需的代碼移動到工作人員。 但是,當您調用外部代碼時,您需要手動移動代碼。  要移動代碼,請執行以下操作:
- 將編譯后的外部代碼連同版本信息一起存儲在 Cloud Storage 中。
- 在@Setup 方法中,創建一個同步塊來檢查代碼文件是否在本地資源上可用。 您可以在第一個線程完成時使用 static 變量確認可用性,而不是實施物理檢查。
- 如果文件不可用,請使用 Cloud Storage 客戶端庫將文件從 Cloud Storage 存儲分區拉取到本地工作器。 推薦的方法是為此任務使用 Beam FileSystems 類。
- 移動文件后,確認在代碼文件上設置了執行位。
- 在生產系統中,檢查二進制文件的 hash 以確保文件已正確復制。
我查看了 FileSystems class,我想我明白了,但我不知道我需要將文件復制到哪里。 是否有工作人員使用的已知目錄或文件路徑? 我正在使用數據流運行器。
您可以將文件復制到工作人員本地文件系統中您想要的任何位置,例如,您可以使用tempfile
模塊創建一個新的空臨時目錄,在運行之前復制您的可執行文件。
使用自定義容器也可能是一個很好的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.