2017-07-07 46 views
1

如果我只有一個內存爲25 GB的執行程序,並且它一次只能運行一個任務,那麼是否有可能處理(轉換和操作)1 TB數據它將被讀取並且中間數據將被存儲在哪裏?Spark如何處理大於羣集內存的數據

同樣的情況下,如果hadoop文件有300輸入拆分,那麼RDD中將有300個分區,所以在這種情況下,這些分區將是什麼? 它只會保留在hadoop磁盤上,我的單​​個任務將運行300次?

回答

1

我在hortonworks網站上找到了一個很好的答案。

與普遍認爲Spark是不是內存僅

一)簡單的讀無洗牌(無連接,...)

對於初始讀起來像MapReduce的Spark在讀取數據一個流,並>它處理它。即除非有理由,spark不會實現內存中的完整RDD(如果你想緩存一個小數據集,你可以告訴他這樣做)。RDD是有彈性的,因爲spark知道如何重新創建它(從hdfs重新讀取塊例如)不是因爲它存儲在不同位置的mem中。 (雖然也可以這樣做)。

因此,如果您過濾掉大部分數據或者在地圖上進行聚合的高效聚合,則永遠不會在內存中擁有完整的表。

b)中隨機播放

這樣做是非常相似的MapReduce因爲它寫入映射輸出到光盤,並與通過http各減速讀取它們。然而,Spark在Linux文件系統上使用了積極的文件系統緩衝策略,因此如果操作系統具有可用內存,數據將不會實際寫入物理磁盤。

C)洗牌後洗牌後

RDDS通常由發動機緩存(否則失敗節點或RDD將需要工作的完整的重新運行),然而作爲的Abdelkrim提到星火可波及這些到光盤上,除非你推翻這一點。

d)Spark Streaming

這有點不同。除非您覆蓋設置,否則Spark流預期所有數據都適合內存。

Here's is the original page.

而由馬·薩里亞最初的Spark的設計論文也有幫助。 (section 2.6.4 Behavior with Insufficient Memory)

希望有一些有用的東西。

+0

當你說在磁盤上存儲,它是工作機磁盤還是hdfs? – Rahul

+0

我認爲它是工人機器磁盤,就像mapreduce。 – neilron