2014-09-04 75 views
2

我在Spark上實現了一個具有Spark節點的自定義數據層,該節點在本地持久保存了一些數據並向Spark主機宣佈其數據的持久性。通過在每個Spark節點上運行一些自定義代碼並掌握我們已經編寫的代碼,這很好,但現在我希望在我的集羣中實現複製協議。我想要建立的是,一旦主節點從節點獲得一條消息說它是持久數據,那麼主節點可以隨機選擇其他兩個節點並讓它們保持相同的數據。以編程方式訪問實時Spark節點列表

我一直在挖掘文檔,但我沒有看到SparkContext的一個明顯的方式給我一個活節點列表。我錯過了什麼嗎?

回答

6

沒有一個公開的API來做到這一點。但是,您可以使用Developer API SparkListener(http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.scheduler.SparkListener)。您可以創建自定義SparkListener類,並把它添加到SparkContext爲

sc.addSparkListener(yourListener) 

系統將類onBlockManagerAdded,當一個圖塊管理員被添加或刪除onBlockManagerRemoved,並從圖塊管理員的ID,我相信你能得到的URL運行Spark live執行程序的節點(運行BlockManagers)。

我同意這是一個小黑客。 :)