Spark和Hadoop之間的主要技術差異和選擇

banq發表於2022-03-02

Hadoop 和 Spark 都是開源軟體的集合,由 Apache 軟體基金會維護,用於大規模資料處理。Hadoop 是兩者中較老的一個,曾經是處理大資料的首選。然而,自從 Spark 推出以來,它的增長速度遠快於 Hadoop,後者不再是該領域無可爭議的領導者。
隨著 Spark 的普及,在Spark和 Hadoop 之間進行選擇是現實世界中許多公司面臨的問題。不幸的是,這個問題的答案並不簡單。兩種系統都有優點和缺點,正確的選擇將取決於相關用例的複雜性。

Spark導致了某些任務的大規模提速。其主要技術原因是,Spark在RAM(隨機存取儲存器)中處理資料,而Hadoop則在磁碟上讀寫檔案(我們在此注意到,Spark可以使用HDFS作為資料來源,但仍將在RAM中處理資料,而不是像Hadoop那樣在磁碟上處理)。RAM要比磁碟快得多,原因有二:
  • 首先,RAM使用固態技術來儲存資訊,而磁碟是透過磁力來儲存。
  • 其次,與儲存在磁碟上的資訊相比,RAM離CPU更近,連線速度也更快,因此RAM中的資料被訪問的速度更快。


這種技術上的差異導致同一資料集被多次重複使用的應用程式的速度提高了很多個數量級。Hadoop導致這些任務的顯著延遲(延遲),因為每次查詢都需要一個單獨的MapReduce作業,這涉及到每次從磁碟重新載入資料。
然而,在Spark中,資料保持在RAM中,所以從那裡而不是磁碟中讀取。這導致Spark在某些情況下表現出比Hadoop快100倍的速度,在這些情況下我們會多次重複使用相同的資料。因此,在這樣的情況下,我會選擇Spark而不是Hadoop。常見的例子是迭代作業和互動分析。
  
反覆使用同一資料集的迭代任務的一個具體和非常常見的例子是機器學習(ML)模型的訓練。ML模型的訓練通常是透過反覆傳遞相同的訓練資料集,以嘗試透過使用梯度下降等最佳化演算法達到誤差函式的全域性最小值。在這樣的任務中,Spark實現的效能提升水平在資料被查詢的次數越多時就越突出。例如,如果你在Hadoop和Spark上訓練一個ML模型,只使用一次資料(epoch),就不會有明顯的加速,因為資料需要從磁碟載入到RAM,以便在Spark上進行第一次迭代。然而,Spark上的每個後續迭代將在一小部分時間內執行,而Hadoop的每個後續迭代將花費與第一次迭代相同的時間,因為每次都要從磁碟上檢索資料。因此,在處理ML應用時,Spark通常比Hadoop更受歡迎。
 
儘管在許多應用中這是一個巨大的優勢,但值得注意的是,在有些情況下,Spark的記憶體計算會有缺陷。例如,如果我們所處理的資料集非常大,以至於超過了可用的RAM,那麼Hadoop就是首選。
此外,同樣由於記憶體和磁碟的差異,Hadoop與Spark相比,在擴充套件方面相對容易和便宜。因此,儘管時間有限的企業可能最好使用Spark,但有資本限制的企業可能更好地使用Hadoop更便宜的設定和可擴充套件性
 

相關文章