2014-09-02 42 views
6

我在尋找類似於Spark中Hadoop的分佈式緩存的功能。我需要一個相對較小的數據文件(帶有一些索引值)出現在所有節點中,以便進行一些計算。有什麼辦法可以讓Spark在Spark中成爲可能嗎?Spark中的Hadoop DistributedCache功能

我到目前爲止的解決方法是將索引文件作爲正常處理進行分發和減少,這在我的應用程序中需要大約10秒。在那之後,我堅持表明它作爲廣播變量的文件,內容如下:

JavaRDD<String> indexFile = ctx.textFile("s3n://mybucket/input/indexFile.txt",1); 
ArrayList<String> localIndex = (ArrayList<String>) indexFile.collect();  

final Broadcast<ArrayList<String>> globalIndex = ctx.broadcast(indexVar); 

這使得能夠了解哪些變量globalIndex包含程序。到目前爲止,它對我來說可能是一個補丁,但我認爲這不是最好的解決方案。如果數據集相當大或變量數量很大,它是否仍然有效?

注意:我正在使用位於多個EC2實例的獨立羣集上運行的Spark 1.0.0。

+0

你不能緩存文件嗎?基本上存儲爲RDD。將可擴展。 – Venkat 2014-09-02 15:20:45

+0

我想廣播這個變量和緩存它是一樣的。我的問題主要是直接瞭解是否存在直接緩存方法,而不必先「處理」它。 – 2014-09-02 15:56:52

+0

因此,我個人認爲廣播變量在可用性方面比distcache更好,但是有沒有一個原因可以使用Hadoop的分佈式緩存 – aaronman 2014-09-02 16:07:45

回答

5

請看看SparkContext.addFile()的方法。 猜猜這就是你要找的。

0

只要我們使用廣播變量,它也應該對大數據集有效。

從星火文檔 「廣播變量允許程序員保持每臺機器上一個只讀變量緩存,而不是出貨的副本與任務,他們可以使用,例如,給每以有效的方式節點大型輸入數據集的副本。「