簡體   English   中英

如何在 GCP 上使用 Apache Beam 數據流手動將可執行文件復制到工作人員

[英]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 會自動將所有必需的代碼移動到工作人員。 但是,當您調用外部代碼時,您需要手動移動代碼。  要移動代碼,請執行以下操作:

  1. 將編譯后的外部代碼連同版本信息一起存儲在 Cloud Storage 中。
  2. 在@Setup 方法中,創建一個同步塊來檢查代碼文件是否在本地資源上可用。 您可以在第一個線程完成時使用 static 變量確認可用性,而不是實施物理檢查。
  3. 如果文件不可用,請使用 Cloud Storage 客戶端庫將文件從 Cloud Storage 存儲分區拉取到本地工作器。 推薦的方法是為此任務使用 Beam FileSystems 類。
  4. 移動文件后,確認在代碼文件上設置了執行位。
  5. 在生產系統中,檢查二進制文件的 hash 以確保文件已正確復制。

我查看了 FileSystems class,我想我明白了,但我不知道我需要將文件復制到哪里。 是否有工作人員使用的已知目錄或文件路徑? 我正在使用數據流運行器。

您可以將文件復制到工作人員本地文件系統中您想要的任何位置,例如,您可以使用tempfile模塊創建一個新的空臨時目錄,在運行之前復制您的可執行文件。

使用自定義容器也可能是一個很好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM