首先了解一下Mapreduce
它最本質的兩個過程就是Map和Reduce,Map的應用在於我們需要數據一對一的元素的映射轉換,比如說進行截取,進行過濾,或者任何的轉換操作,這些一對一的元素轉換就稱作是Map;Reduce主要就是元素的聚合,就是多個元素對一個元素的聚合,比如求Sum等,這就是Reduce。
Mapreduce是Hadoop1.0的核心,Spark出現慢慢替代Mapreduce。那么為什么Mapreduce還在被使用呢?因為有很多現有的應用還依賴於它,它不是一個獨立的存在,已經成為其他生態不可替代的部分,比如pig,hive等。
盡管MapReduce極大的簡化了大數據分析,但是隨着大數據需求和使用模式的擴大,用戶的需求也越來越多:
1. 更復雜的多重處理需求(比如迭代計算, ML, Graph);
2. 低延遲的交互式查詢需求(比如ad-hoc query)
而MapReduce計算模型的架構導致上述兩類應用先天緩慢,用戶迫切需要一種更快的計算模型,來補充MapReduce的先天不足。
Spark的出現就彌補了這些不足,我們來了解一些Spark的優勢:
1.每一個作業獨立調度,可以把所有的作業做一個圖進行調度,各個作業之間相互依賴,在調度過程中一起調度,速度快。
2.所有過程都基於內存,所以通常也將Spark稱作是基於內存的迭代式運算框架。
3.spark提供了更豐富的算子,讓操作更方便。
4.更容易的API:支持Python,Scala和Java
其實spark里面也可以實現Mapreduce,但是這里它並不是算法,只是提供了map階段和reduce階段,但是在兩個階段提供了很多算法。如Map階段的map, flatMap, filter, keyBy,Reduce階段的reduceByKey, sortByKey, mean, gourpBy, sort等。
為什么Spark比Map Reduced運算速度快???
這個問題包含了很多元素在里面
個人觀點:Spark計算比MapReduce快的根本原因在於DAG計算模型。一般而言,DAG相比Hadoop的MapReduce在大多數情況下可以減少shuffle次數。
Hadoop每次計算的結果都要保存到hdfs,然后每次計算都需要從hdfs上讀書數據,磁盤上的I/O開銷比較大。
spark一次讀取數據緩存在內存中,內存的數據讀取比磁盤數據讀取快很多。還有一點就是spark的RDD數據結構,RDD在每次transformation后並不立即執行,而且action后才執行,有進一步減少了I/O操作。
所以spark比Hadoop運行要快,尤其是對於需要迭代的程序。
