Hadoop與Spark等資料處理系統哪個是最好的?

banq發表於2015-04-28
如今我們擁有廣泛的資料處理系統選擇:Hadoop, Spark, Naiad, PowerGraph, Metis 和 GraphChi 等,這些不同框架的最佳效能其實高度依賴於高階的工作流程,其次,沒有某個單個系統總是會比其他系統效能高,也就是說,幾乎每個系統都有自己特定場景下的最好效能表現。

所以,選擇一個資料處理系統應該將其工作負載貼近其最佳設計點,但是我們很容易忽視這點,導致宗教式的爭論:哪個資料處理系統是最好的,這些爭論往往沒有背景前提。

選擇一個正確的並行資料處理系統是困難的,它需要大量的關於程式設計正規化、設計目標和許多可用性的實現等專家知識。

影響系統效能的四個關鍵因素有:
1.輸入資料的大小,對於較小的資料輸入,單機架構要優於分散式架構。
2.資料的結構,這會影響I/O效能和工作分發。
3.資料處理系統的自身建設中的工程決策,比如它是如何有效率的載入資料
4.計算型別,因為越專業的系統會更有效的運作。
所有系統資料來源與最終目地都是在HDFS檔案中。

下圖橫座標是資料量大小,縱座標是時間。可見資料輸入量小於0.5GB,其中紫紅的Metis單機MapReduce效能最好:

[img index=1]

對於40-80%的job提交到MapReduce系統,最好選擇是執行在單機系統。一個大型的join產生29GB的系統採取Hadoop比較合適。

一旦資料規模增長,Hive, Spark 和 Hadoop都會優於單機的Metis,至少是因為他們都能將HDFS的進出資料並行流化處理,但是不管如何,因為在工作流程中沒有資料重用,Spark效能會更差於Hadoop,它在進行計算前會將所有資料都載入到分散式記憶體RDD。

對於涉及圖的迭代計算時,毫不奇怪特定的圖形處理系統會更好。面向圖的正規化有很強的優勢,執行在Naiad上的GraphLINQ會明顯優於其他系統,PowerGraph也表現得很好,因為它的vertex-centric分片會降低通訊開銷,它在PageRank領域一直佔據主導。當然,最快的系統並不總是最有效的。

總結:實驗表明,對於一個工作流變化很大的系統最好的選擇取決於,這個最好是指最快或最有效的系統,這些依賴於工作流本身、輸入資料大小和並行規模。

Musketeer – Part I : What’s the best data processi


[該貼被banq於2015-04-28 08:14修改過]

相關文章