Spark是一個計算框架算法
Hadoop是包含計算框架MapReducehe分佈式文件系統HDFS。編程
Spark是MapReduce的替代方案,並且兼容HDFS、Hive等分佈式存儲系統,可融入Hadoop生態。緩存
Spark與Hadoop MapReduce優點以下框架
1 中間結果輸出機器學習
MapReduce的計算引擎將中間結果存儲在磁盤上,進行存儲和容錯。分佈式
Spark將執行模型抽象爲有向無環圖執行計劃(DAG),這能夠將多個Stage的任務串聯或者並行執行,而無須將Stage中間結果輸出到HDFS中。oop
2 數據格式和內存佈局佈局
MapReduce Schema on Read處理方式會引發較大的處理開銷。Spark抽象出分佈式內存存儲結構彈性分佈式數據集RDD,進行數據的存儲。RDD能支持粗粒度寫操做,可是對於讀取操做,RDD能夠精確到每條記錄,這使得RDD能夠用來做分佈式索引。Spark的特性是能控制數據節點上的分區,用戶能夠自定義分區策略,如Hash分區等。Shark 和Spark SQL在Spark的基礎之上實現了列存儲和列存儲壓縮。性能
3 執行策略學習
MapReduce在數據Shuffle以前花費了大量的時間來排序,Spark則能夠減輕上述問題帶來的開銷。由於Spark任務在Shuffle中不是全部情景都須要排序,因此支持基於Hash的分佈式聚合,調度中採用更爲通用的任務執行計劃圖(DAG),每一輪次的輸出結果在內存緩存。
4 任務調度開銷
傳統的MapReduce系統,如Hadoop,是爲了運行長達數小時的批量做業而設計的,在某些極端狀況下,提交一個任務的延遲很是高。
Spark採用了事件驅動的類庫AKKA來啓動任務,經過線程池複用線程來避免進程或線程啓動和切換開銷。
Hadoop:分佈式批處理計算,強調批處理,經常使用於數據挖掘和數據分析。
Spark:是一個基於內存計算的開源的集羣計算系統,目的是讓數據分析更加快速, Spark 是一種與 Hadoop 類似的開源集羣計算環境,可是二者之間還存在一些不一樣之處,這些有用的不一樣之處使 Spark 在某些工做負載方面表現得更加優越,換句話說,Spark 啓用了內存分佈數據集,除了可以提供交互式查詢外,它還能夠優化迭代工做負載。
Spark 是在 Scala 語言中實現的,它將 Scala 用做其應用程序框架。與 Hadoop 不一樣,Spark 和 Scala 可以緊密集成,其中的 Scala 能夠像操做本地集合對象同樣輕鬆地操做分佈式數據集。
儘管建立 Spark 是爲了支持分佈式數據集上的迭代做業,可是實際上它是對 Hadoop 的補充,能夠在 Hadoop 文件系統中並行運行。經過名爲Mesos的第三方集羣框架能夠支持此行爲。
雖然 Spark 與 Hadoop 有類似之處,但它提供了具備有用差別的一個新的集羣計算框架。首先,Spark 是爲集羣計算中的特定類型的工做負載而設計,即那些在並行操做之間重用工做數據集(好比機器學習算法)的工做負載。爲了優化這些類型的工做負載,Spark 引進了內存集羣計算的概念,可在內存集羣計算中將數據集緩存在內存中,以縮短訪問延遲。
在大數據處理方面相信你們對hadoop已經耳熟能詳,基於GoogleMap/Reduce來實現的Hadoop爲開發者提供了map、reduce原語,使並行批處理程序變得很是地簡單和優美。Spark提供的數據集操做類型有不少種,不像Hadoop只提供了Map和Reduce兩種操做。好比map,filter, flatMap,sample, groupByKey, reduceByKey, union,join, cogroup,mapValues, sort,partionBy等多種操做類型,他們把這些操做稱爲Transformations。同時還提供Count,collect, reduce, lookup, save等多種actions。這些多種多樣的數據集操做類型,給上層應用者提供了方便。各個處理節點之間的通訊模型再也不像Hadoop那樣就是惟一的Data Shuffle一種模式。用戶能夠命名,物化,控制中間結果的分區等。能夠說編程模型比Hadoop更靈活。
Spark提供了高的性能和大數據處理能力,使得用戶能夠快速獲得反饋體驗更好。另外一類應用是作數據挖掘,由於Spark充分利用內存進行緩存,利用DAG消除沒必要要的步驟,因此比較合適作迭代式的運算。而有至關一部分機器學習算法是經過屢次迭代收斂的算法,因此適合用Spark來實現。
Spark配有一個流數據處理模型,與Twitter的 Storm框架相比,Spark採用了一種有趣並且獨特的辦法。Storm基本上是像是放入獨立事務的管道,在其中事務會獲得分佈式的處理。相反,Spark採用一個模型收集事務,而後在短期內(咱們假設是5秒)以批處理的方式處理事件。所收集的數據成爲他們本身的RDD,而後使用Spark應用程序中經常使用的一組進行處理。做者聲稱這種模式是在緩慢節點和故障狀況下會更加穩健,並且5秒的時間間隔一般對於大多數應用已經足夠快了。這種方法也很好地統一了流式處理與非流式處理部分。