Spark和Hadoop之間的主要技術差異和選擇
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更便宜的設定和可擴充套件性。
相關文章
- 示例解讀 Python 2 和 Python 3 之間的主要差異Python
- 技術分享|SQL和 NoSQL資料庫之間的差異:MySQL(VS)MongoDB資料庫MySqlMongoDB
- Bootstrap和Tailwind CSS之間的差異?bootAICSS
- 大資料開發:剖析Hadoop和Spark的Shuffle過程差異大資料HadoopSpark
- 工作流和BPM之間的差異
- 對於 JavaScript 中迴圈之間的技術差異概述JavaScript
- GPRS與4G網路的技術差異與應用選擇
- Spark 模型選擇和調參Spark模型
- GPRS與4G網路:技術差異與應用選擇
- 好程式設計師技術解析Hadoop和spark的效能比較程式設計師HadoopSpark
- CentOS/RHEL 7:Chrony vs NTP(ntpd和chronyd之間的差異)CentOS
- hadoop和spark的區別HadoopSpark
- [技術] CDM技術分析和產品選擇建議
- 能動性:知識分子和企業家之間的差異
- UDP和TCP的差異UDPTCP
- 如何掌握Spark和Hadoop的架構SparkHadoop架構
- 大資料技術與Hadoop之間的關係大資料Hadoop
- Node.js 和 Python之間如何進行選擇?Node.jsPython
- 5G和Wi-Fi 6之間究竟有什麼差異
- [譯] 測試原生,Flutter 和 React Native 移動開發之間的效能差異FlutterReact Native移動開發
- Q:Spark和Hadoop的架構區別SparkHadoop架構
- Git比對檔案之間的差異Git
- SQL Server 2017 各版本之間的差異SQLServer
- Python和C#之間如何選擇?區別介紹PythonC#
- 譯:原生iOS應用程式和原生Android應用程式設計之間的差異iOSAndroid程式設計
- 非易失性儲存器Flash和EEPROM之間的差異與優缺點
- Akka 和 Storm 的設計差異ORM
- Oracle中exists和in的效能差異Oracle
- 在 C# 和 JavaScript 之間選擇進行網頁抓取C#JavaScript網頁
- js中split,splice,slice方法之間的差異。JS
- Hadoop技術內幕:深入解析Hadoop和HDFS 1.3準備 Hadoop 原始碼Hadoop原始碼
- 順序控制和狀態機之間的差別
- VLAN技術和VLAN間路由路由
- VLAN技術和VLAN間 路由路由
- 談談Hadoop MapReduce和Spark MR實現HadoopSpark
- 線上json差異比較工具--遞迴比較兩個json的節點和值的差異,並支援差異數預覽和逐個檢視差異JSON遞迴
- 常見的七種Hadoop和Spark專案案例HadoopSpark
- 聊聊t-io和netty的差異Netty