2015-05-09 88 views
2

如果數據集適合內存,Spark會表現最好,如果數據集不適合,它將使用磁盤,因此它與hadoop一樣快。我們假設我正在處理Tera/Peta字節的數據。與一個小羣集。顯然,沒有辦法使它適應記憶。 我的觀察是,在大數據時代,如果不是更多,大部分數據集都是千兆字節。具有大量數據的內存中處理引擎的好處是什麼?

那麼內存處理引擎的好處是什麼?

+3

你已經知道內存引擎的好處了。儘管如此,千兆內存並不多;我的桌面上有32G,我用過的一些機器有128G物理和更多。並非所有大數據都需要一次以PB計算*。 –

+0

Spark不是「內存中的處理引擎」。這是一種常見的誤解,部分原因在於Spark早期如何提升。 Spark非常好地利用了內存,但它不需要將它在內存中處理的所有數據存儲爲快速。例如,Spark最近[打破了100TB的排序記錄](https://databricks.com/blog/2014/10/10/spark-petabyte-sort.html)。它所贏得的排序基準稱爲Daytona Gray,要求在開始時從磁盤讀取所有數據,並對數據進行排序,然後在最後寫回磁盤。沒有「內存中計算」快捷方式。 –

+0

當您在數據集上進行迭代計算時(最常用機器學習完成),內存中處理會帶來最大優勢。在迭代時能夠將海量數據集的一部分保留在內存中比每次迭代讀取和寫入磁盤的中間結果要快得多。 –

回答

1

我發現Spark相比Hadoop的MapReduce的優勢不僅僅是in-memory computation engine甚至是磁盤輸入。至於我的關注,至少有兩大進步:

  1. 星火的DAG execution engine過的MapReduce的two phase execution
  2. Thread level parallel execution超過Process level parallel execution

要詳細一點:

  1. 對於一個複雜的執行計劃,Spark的DAGScheduler會將你的計劃分階段劃分,在洗牌邊緣,但你不需要dd虛擬映射階段,因此,可以消除不必要的將輸出減少到HDFS並作爲映射輸入讀回的功能。
  2. Hadoop的MapReduce具有衆所周知的高延遲,因爲map reduce中的每個任務都是一個進程,與spark的線程級並行性相比,JVM級並行性的權重很大。
相關問題