1. 程式人生 > 其它 >Spark和Hadoop以及區別

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的特點:

速度快: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。

Hadoop是什麼?

 Hadoop是專案的總稱。主要是由HDFS和MapReduce組成。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基礎上進行分類彙總。

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適合處理線上的實時的大資料。