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更便宜的設定和可擴充套件性。
相關文章
- 技術分享|SQL和 NoSQL資料庫之間的差異:MySQL(VS)MongoDB資料庫MySqlMongoDB
- Bootstrap和Tailwind CSS之間的差異?bootAICSS
- 示例解讀 Python 2 和 Python 3 之間的主要差異Python
- 工作流和BPM之間的差異
- 大資料開發:剖析Hadoop和Spark的Shuffle過程差異大資料HadoopSpark
- 對於 JavaScript 中迴圈之間的技術差異概述JavaScript
- ARM(RISC)和x86(CISC)的技術差異
- GPRS與4G網路的技術差異與應用選擇
- Spark 模型選擇和調參Spark模型
- GPRS與4G網路:技術差異與應用選擇
- 網路虛擬化、NFV和SDN之間的差異
- [技術] CDM技術分析和產品選擇建議
- 程式碼的清晰和簡潔之間的選擇
- 運營和技術之間不可調和的“矛盾”
- 好程式設計師技術解析Hadoop和spark的效能比較程式設計師HadoopSpark
- 系統之間差異
- Apache Spark技術實戰之3 -- Spark Cassandra Connector的安裝和使用ApacheSpark
- 碼農和程式設計師之間的5個關鍵差異程式設計師
- hadoop和spark的區別HadoopSpark
- UDP和TCP的差異UDPTCP
- vue和react的差異VueReact
- 程式設計師的技術選擇:已開發國家和發展中國家有這些差異程式設計師
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之五:函式的差異(五)筆記SQLOracle函式
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之五:函式的差異(三)筆記SQLOracle函式
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之五:函式的差異(一)筆記SQLOracle函式
- EXPLAIN PLAN FOR 和 SET AUTOTRACE之間的差別AI
- ERP差異來源和差異處理
- Node.js 和 Python之間如何進行選擇?Node.jsPython
- UI vs UX:使用者介面和使用者體驗之間的差異UIUX
- Git比對檔案之間的差異Git
- 程式、會話、連線之間的差異會話
- 技術人才的出路在哪裡,5種選擇和2種思路
- 大資料技術與Hadoop之間的關係大資料Hadoop
- 如何掌握Spark和Hadoop的架構SparkHadoop架構
- 人工智慧和機器學習之間的差異及其重要性,一定要分清楚人工智慧機器學習
- [譯] 測試原生,Flutter 和 React Native 移動開發之間的效能差異FlutterReact Native移動開發
- 非易失性儲存器Flash和EEPROM之間的差異與優缺點
- Oracle中exists和in的效能差異Oracle