大數據Spark和Hadoop以及區別(乾貨)

1. Spark是什麼?

Spark,是一種通用的大數據計算框架,正如傳統大數據技術Hadoop的MapReduce、Hive引擎,以及Storm流式實時計算引擎等。

Spark包含了大數據領域常見的各種計算框架:比如Spark Core用於離線計算,Spark SQL用於交互式查詢,Spark Streaming用於實時流式計算,Spark MLlib用於機器學習,Spark GraphX用於圖計算。

Spark主要用於大數據的計算,而Hadoop以後主要用於大數據的存儲(比如HDFS、Hive、HBase等),以及資源調度(Yarn)。


2.Spark整體架構

大數據Spark和Hadoop以及區別(乾貨)

Spark的特點:

速度快:Spark基於內存進行計算(當然也有部分計算基於磁盤,比如shuffle)。

容易上手開發:Spark的基於RDD的計算模型,比Hadoop的基於Map-Reduce的計算模型要更加易於理解,更加易於上手開發,實現各種複雜功能,比如二次排序、topn等複雜操作時,更加便捷。

超強的通用性:Spark提供了Spark RDD、Spark SQL、Spark Streaming、Spark MLlib、Spark GraphX等技術組件,可以一站式地完成大數據領域的離線批處理、交互式查詢、流式計算、機器學習、圖計算等常見的任務。

集成Hadoop:Spark並不是要成為一個大數據領域的“獨裁者”,一個人霸佔大數據領域所有的“地盤”,而是與Hadoop進行了高度的集成,兩者可以完美的配合使用。Hadoop的HDFS、Hive、HBase負責存儲,YARN負責資源調度;Spark複雜大數據計算。實際上,Hadoop+Spark的組合,是一種“double win”的組合。

極高的活躍度:Spark目前是Apache基金會的頂級項目,全世界有大量的優秀工程師是Spark的committer。並且世界上很多頂級的IT公司都在大規模地使用Spark。

大數據Spark和Hadoop以及區別(乾貨)


Hadoop是什麼?

 Hadoop是項目的總稱。主要是由HDFSMapReduce組成。HDFS是Google File System(GFS)的開源實現。MapReduce是Google MapReduce的開源實現。 具體而言,Apache Hadoop軟件庫是一個允許使用簡單編程模型跨計算機集群處理大型數據集合的框架,其設計的初衷是將單個服務器擴展成上千個機器組成的一個集群為大數據提供計算服務,其中每個機器都提供本地計算和存儲服務。

Hadoop的核心:

1.HDFS和MapReduce是Hadoop的兩大核心。通過HDFS來實現對分佈式儲存的底層支持,達到高速並行讀寫與大容量的儲存擴展。

2.通過MapReduce實現對分佈式任務進行處理程序支持,保證高速分區處理數據。

MapReduce的計算模型分為Map和Reduce兩個過程。在日常經驗裡,我們統計數據需要分類,分類越細、參與統計的人數越多,計算的時間就越短,這就是Map的形象比喻,在大數據計算中,成百上千臺機器同時讀取目標文件的各個部分,然後對每個部分的統計量進行計算,Map就是負責這一工作的;而Reduce就是對分類計數之後的合計,是大數據計算的第二階段。可見,數據的計算過程就是在HDFS基礎上進行分類彙總。

大數據Spark和Hadoop以及區別(乾貨)

HDFS把節點分成兩類:NameNode和DataNode。NameNode是唯一的,程序與之通信,然後從DataNode上存取文件。這些操作是透明的,與普通的文件系統API沒有區別。

MapReduce則是JobTracker節點為主,分配工作以及負責和用戶程序通信。


Spark和Hadoop的區別和比較:

1.原理比較:

Hadoop和Spark都是並行計算,兩者都是用MR模型進行計算

Hadoop一個作業稱為一個Job,Job裡面分為Map Task和Reduce Task階段,每個Task都在自己的進程中運行,當Task結束時,進程也會隨之結束;

Spark用戶提交的任務稱為application,一個application對應一個SparkContext,app中存在多個job,每觸發一次action操作就會產生一個job。這些job可以並行或串行執行,每個job中有多個stage,stage是shuffle過程中DAGScheduler通過RDD之間的依賴關係劃分job而來的,每個stage裡面有多個task,組成taskset,由TaskScheduler分發到各個executor中執行;executor的生命週期是和app一樣的,即使沒有job運行也是存在的,所以task可以快速啟動讀取內存進行計算。

2.數據的存儲和處理:

hadoop:

Hadoop實質上更多是一個分佈式系統基礎架構: 它將巨大的數據集分派到一個由普通計算機組成的集群中的多個節點進行存儲,同時還會索引和跟蹤這些數據,大幅度提升大數據處理和分析效率。Hadoop 可以獨立完成數據的存儲和處理工作,因為其除了提供HDFS分佈式數據存儲功能,還提供MapReduce數據處理功能。

spark:

Spark 是一個專門用來對那些分佈式存儲的大數據進行處理的工具,沒有提供文件管理系統,自身不會進行數據的存儲。它必須和其他的分佈式文件系統進行集成才能運作。可以選擇Hadoop的HDFS,也可以選擇其他平臺。

3.處理速度:

hadoop:

Hadoop是磁盤級計算,計算時需要在磁盤中讀取數據;其採用的是MapReduce的邏輯,把數據進行切片計算用這種方式來處理大量的離線數據.

spark:

Spark,它會在內存中以接近“實時”的時間完成所有的數據分析。Spark的批處理速度比MapReduce快近10倍,內存中的數據分析速度則快近100倍。

4.恢復性:

hadoop:

Hadoop將每次處理後的數據寫入磁盤中,對應對系統錯誤具有天生優勢。

spark:

Spark的數據對象存儲在彈性分佈式數據集(RDD:)中。“這些數據對象既可放在內存,也可以放在磁盤,所以RDD也提供完整的災難恢復功能。

5.處理數據:

hadoop:

Hadoop適合處理靜態數據,對於迭代式流式數據的處理能力差;

spark:

Spark通過在內存中緩存處理的數據,提高了處理流式數據和迭代式數據的性能;

6.中間結果:

hadoop:

Hadoop中中間結果存放在HDFS中,每次MR都需要刷寫-調用,

spark:

而Spark中間結果存放優先存放在內存中,內存不夠再存放在磁盤中,不放入HDFS,避免了大量的IO和刷寫讀取操作;


三大分佈式計算系統:

Hadoop適合處理離線的靜態的大數據;

Spark適合處理離線的流式的大數據;

Storm/Flink適合處理在線的實時的大數據。


大數據Spark和Hadoop以及區別(乾貨)

記錄學習,每天進步一點點的橘子大王。

喜歡就關注我吧。


分享到:


相關文章: