深度:Hadoop對Spark五大維度正面比拼報告!
每年,市場上都會出現種種不同的資料管理規模、型別與速度表現的分散式系統。在這些系統中,Spark和hadoop是獲得最大關注的兩個。然而該怎麼判斷哪一款適合你?
如果想批處理流量資料,並將其匯入HDFS或使用Spark Streaming是否合理?如果想要進行機器學習和預測建模,Mahout或MLLib會更好地滿足您的需求嗎?
為了增加混淆,Spark和Hadoop經常與位於HDFS,Hadoop檔案系統中的Spark處理資料一起工作。但是,它們都是獨立個體,每一個體都有自己的優點和缺點以及特定的商業案例。
本文將從以下幾個角度對Spark和Hadoop進行對比:體系結構,效能,成本,安全性和機器學習。
什麼是Hadoop?
Hadoop在2006年開始成為雅虎專案,隨後成為頂級的Apache開源專案。它是一種通用的分散式處理形式,具有多個元件:
HDFS(分散式檔案系統),它將檔案以Hadoop本機格式儲存,並在叢集中並行化;
YARN,協調應用程式執行時的排程程式;
MapReduce,實際並行處理資料的演算法。
Hadoop使用Java搭建,可通過多種程式語言訪問,用於通過Thrift客戶端編寫MapReduce程式碼(包括Python)。
除了這些基本元件外,Hadoop還包括:
Sqoop,它將關係資料移入HDFS;
Hive,一種類似SQL的介面,允許使用者在HDFS上執行查詢;
Mahout,機器學習。
除了將HDFS用於檔案儲存之外,Hadoop現在還可以配置為使用S3儲存桶或Azure blob作為輸入。
它可以通過Apache發行版開源,也可以通過Cloudera(規模和範圍最大的Hadoop供應商),MapR或HortonWorks等廠商提供。
什麼是Spark?
Spark是一個較新的專案,最初於2012年在加州大學伯克利分校的AMPLab開發。它也是一個頂級Apache專案,專注於在群集中並行處理資料,但最大的區別在於它在記憶體中執行。
鑑於Hadoop讀取和寫入檔案到HDFS,Spark使用稱為RDD,彈性分散式資料集的概念處理RAM中的資料。 Spark可以以獨立模式執行,Hadoop叢集可用作資料來源,也可以與Mesos一起執行。在後一種情況下,Mesos主站將取代Spark主站或YARN以進行排程。
Spark是圍繞Spark Core搭建的,Spark Core是驅動排程,優化和RDD抽象的引擎,並將Spark連線到正確的檔案系統(HDFS,S3,RDBM或Elasticsearch)。有幾個庫在Spark Core上執行,包括Spark SQL,它允許在分散式資料集上執行類似SQL的命令,用於機器學習的MLLib,用於圖形問題的GraphX以及允許連續流式傳輸的流式傳輸記錄資料。
Spark有幾個API。原始介面是用Scala編寫的,基於資料科學家的大量使用,還新增了Python和R端點。 Java是編寫Spark作業的另一種選擇。
Databricks由也Spark創始人Matei Zaharia建立的,致力於提供基於 Spark 的雲服務,可用於資料整合,資料管道等任務
1. 架構
Hadoop
首先,所有傳入HDFS的檔案都被分割成塊。根據配置的塊大小和複製因子,每個塊在整個群集中被複制指定的次數。該資訊被傳遞給NameNode,它跟蹤整個叢集中的所有內容。 NameNode將這些檔案分配給一些資料節點,然後將這些檔案寫入其中。 2012年實施高可用性,允許NameNode故障轉移到備份節點上,以跟蹤群集中的所有檔案。
MapReduce演算法位於HDFS之上,由JobTracker組成。一旦應用程式以其中一種語言編寫,Hadoop接受JobTracker,然後分配工作(可包括計算單詞和清理日誌檔案的任何內容),以便在儲存在Hive倉庫中的資料之上執行HiveQL查詢)到偵聽其他節點的TaskTracker。
YARN分配JobTracker加速並監控它們的資源,以提高效率。然後將所有來自MapReduce階段的結果彙總並寫入HDFS中的磁碟。
Spark
除了計算在記憶體中執行並在那裡儲存直到使用者積極儲存它們之外,Spark處理的工作方式與Hadoop類似。最初,Spark從HDFS,S3或其他檔案儲存中的檔案讀取到名為SparkContext的已建立機制。除此之外,Spark建立了一個名為RDD或彈性分散式資料集的結構,它表示一組可並行操作的元素的不可變集合。
隨著RDD和相關操作的建立,Spark還建立了一個DAG或有向無環圖,以便視覺化DAG中的操作順序和操作之間的關係。每個DAG都有階段和步驟;通過這種方式,它與SQL中的解釋計劃類似。
您可以對RDD執行轉換,中間步驟,操作或最終步驟。給定轉換的結果進入DAG,但不會保留到磁碟,但操作的結果會將記憶體中的所有資料保留到磁碟。
Spark中的一個新抽象是DataFrames,它是在Spark 2.0中作為RDD的配套介面開發的。這兩者非常相似,但DataFrames將資料組織成命名列,類似於Python的熊貓或R包。這使得它們比RDD更方便使用者,RDD沒有類似的一系列列級標題引用。 SparkSQL還允許使用者像關係資料儲存中的SQL表一樣查詢DataFrame。
2. 效能
發現Spark在記憶體中執行速度快100倍,在磁碟上執行速度快10倍。在十分之一的機器上,它也被用於對100 TB資料進行排序,比Hadoop MapReduce快3倍。特別發現Spark在機器學習應用中更快,例如樸素貝葉斯和k-means。
由處理速度衡量的Spark效能已經發現比Hadoop更優,原因如下:
每次執行MapReduce任務的選定部分時,Spark都不會受到輸入輸出問題的束縛。事實證明,應用程式的速度要快得多
Spark的DAG可以在步驟之間進行優化。 Hadoop在MapReduce步驟之間沒有任何週期性連線,這意味著在該級別不會發生效能調整。
但是,如果Spark與其他共享服務在YARN上執行,則效能可能會降低並導致RAM開銷記憶體洩漏。出於這個原因,如果使用者有批處理的用例,Hadoop被認為是更高效的系統。
3. 成本
Spark和Hadoop都可以作為開源Apache專案免費獲得,這意味著您可以以零安裝成本執行它。但是,重要的是要考慮總體擁有成本,其中包括維護,硬體和軟體購買以及僱用瞭解群集管理的團隊。內部安裝的一般經驗法則是Hadoop需要更多的磁碟記憶體,而Spark需要更多的記憶體,這意味著設定Spark叢集可能會更加昂貴。此外,由於Spark是較新的系統,因此它的專家更為稀少,而且成本更高。另一種選擇是使用供應商進行安裝,例如Cloudera for Hadoop或Spark for DataBricks,或使用AWS在雲中執行EMR / Mapreduce流程。
由於Hadoop和Spark是串聯執行的,即使在配置為在安裝Spark的情況下執行的EMR例項上,也可以將提取定價比較分離出來。對於非常高階別的比較,假設您為Hadoop選擇計算優化的EMR群集,最小例項c4.large的成本為每小時0.026美元。 Spark最小的記憶體優化叢集每小時成本為0.067美元。因此,Spark每小時更昂貴,但對計算時間進行優化,類似的任務應該在Spark叢集上花費更少的時間。
4. 安全性
Hadoop具有高度容錯性,因為它旨在跨多個節點複製資料。每個檔案都被分割成塊,並在許多機器上覆制無數次,以確保如果單臺機器停機,可以從別處的其他塊重建檔案。
Spark的容錯主要是通過RDD操作來實現的。最初,靜態資料儲存在HDFS中,通過Hadoop的體系結構進行容錯。隨著RDD的建立,譜系也是如此,它記住了資料集是如何構建的,並且由於它是不可變的,如果需要可以從頭開始重建。跨Spark分割槽的資料也可以基於DAG跨資料節點重建。資料在執行器節點之間複製,如果執行器和驅動程式之間的節點或通訊失敗,通常可能會損壞資料。
Spark和Hadoop都可以支援Kerberos身份驗證,但Hadoop對HDFS具有更加細化的安全控制。 Apache Sentry是一個用於執行細粒度後設資料訪問的系統,是另一個專門用於HDFS級別安全性的專案。
Spark的安全模型目前很少,但允許通過共享金鑰進行身份驗證。
5. 機器學習
Hadoop使用Mahout來處理資料。 Mahout包括叢集,分類和基於批處理的協作過濾,所有這些都在MapReduce之上執行。目前正在逐步推出支援Scala支援的DSL語言Samsara,允許使用者進行記憶體和代數操作,並允許使用者編寫自己的演算法。
Spark有一個機器學習庫MLLib,用於記憶體迭代機器學習應用程式。它可用於Java,Scala,Python或R,包括分類和迴歸,以及通過超引數調整構建機器學習管道的能力。
總結
那麼它是Hadoop還是Spark?這些系統是目前市場上處理資料最重要的兩個分散式系統。 Hadoop主要用於使用MapReduce範例的大規模磁碟操作,而Spark則是一種更靈活,但成本更高的記憶體處理架構。兩者都是Apache的頂級專案,經常一起使用,並且有相似之處,但在決定使用它們時,瞭解每個專案的特徵是非常重要的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31077337/viewspace-2155684/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 技術解讀:Hadoop、PostgreSQL與Storm正面比拼報告!HadoopSQLORM
- IDC最新報告,7大維度11家大模型廠商比拼,唯一全優是誰?大模型
- Magna:品牌信任維度報告
- 大資料框架對比 - Hadoop、Spark、Storm、Samza、Spark、Flink大資料框架HadoopSparkORM
- 360 度評估大揭秘:個人報告深度解析
- 360 度評估大揭秘:團隊報告深度解析
- Hadoop與Spark關係HadoopSpark
- 【hadoop/Spark】相關命令HadoopSpark
- hadoop:spark-project專案的hadoop配置HadoopSparkProject
- Hadoop技術學習報告Hadoop
- hadoop和spark的區別HadoopSpark
- hadoop+spark偽分散式HadoopSpark分散式
- Hadoop/Spark 太重,esProc SPL 很輕HadoopSpark
- 進度報告
- Kong mesh深度分析報告
- 深度測評 | 五大主流多端開發框架全面對比框架
- 如何掌握Spark和Hadoop的架構SparkHadoop架構
- 【版本升級】PerfDog新增多維度測試報告對比功能、iOS電量測試功能升級測試報告iOS
- 進度報告12
- 進度報告10
- 進度報告9
- 進度報告6
- 進度報告二
- Spark學習進度-Spark環境搭建&Spark shellSpark
- 原神深度分析報告(上)
- spark核心原始碼深度剖析Spark原始碼
- 談談Hadoop MapReduce和Spark MR實現HadoopSpark
- Q:Spark和Hadoop的架構區別SparkHadoop架構
- Spark讀取Hbase報錯NoSuchMethodError: org.apache.hadoop.conf.Configuration.getPassword(Ljava/lang/String;SparkErrorApacheHadoopJava
- 測試人必看:五大維度解讀軟體測試分類
- Hadoop/Spark相關面試問題總結HadoopSpark面試
- hadoop基礎學習三十一(spark-streaming)HadoopSpark
- CDH版Hadoop-zookeeper-hbase-spark安裝文件HadoopSpark
- spark問題hadoop歷史伺服器hadoop102:19888訪問不了SparkHadoop伺服器
- spark報錯Spark
- 2019年度Pornhub報告
- 假期周進度報告6
- 第七週進度報告