2012-05-15 78 views
2

因此,我一直在玩Akka Actors,並且已經編寫了一些代碼,可以將計算分佈到集羣中的多臺機器上。在運行「主要」代碼之前,我需要在將要部署的每臺計算機上等待一個ActorSystem,我通常通過一個Python腳本執行此操作,該腳本將SSH傳入所有機器,並通過執行類似cd /into/the/proper/folder/和然後sbt 'run-main ActorSystemCode'在幾臺(集羣)機器上同時運行SBT(Scala)

我在其中一臺機器上運行這個Python腳本(稱爲「Machine X」),所以我將在我的機器X SSH會話中看到SSH'ing輸出到所有其他機器中。每當我運行這個腳本時,似乎所有的機器在實際運行之前都會重新編譯整個代碼,這讓我在做任何有用的事情之前坐在那裏幾分鐘。

我的問題是這樣的:

  1. 爲什麼他們需要重新編譯呢?所有機器上都有相同的JVM,所以不應該馬上運行?

  2. 我該如何解決這個讓每臺機器編譯「它自己的副本」的問題?

回答

5

sbt是一個構建工具,而不是一個應用程序運行。使用sbt-assembly在一個jar中構建一個all,並將jar放在每臺機器上,並使用scalajava命令運行它。

+0

嗯,它是一個集羣,所以他們都共享相同的分區(NFS)..一個jar可以在多臺機器上運行嗎? – adelbertc

+0

我不明白爲什麼它不應該工作。試試看,如果它不起作用,你仍然可以創建該jar的多個副本。 – drexin

4

羣集通常在每個節點上安裝單個分區(通過NFS或samba)。您只需在該分區上覆制工件,並且它們將在每個節點中直接訪問。如果不是這種情況,你應該問你的系統管理員來安裝它。

然後你將需要啓動應用程序。再次,大多數羣集帶有MPI來到 。工具mpirun(或mpiexec)不僅限於真正的MPI應用程序,並將在多個節點上啓動所需的任何腳本。

+0

我認爲集羣在每個節點上都有一個使用NFS的分區。如果是這種情況(對不起,我對這個術語不太熟悉),我需要複製這個「神器」是什麼? – adelbertc

+0

主要是jar文件。 (以及您可能需要的任何資源,如配置文件,輸入文件等) – paradigmatic

相關問題