Spark與Hadoop計算模型的比較分析

Spark與Hadoop計算模型的比較分析


最近不少人都在討論Spark這個貌似通用的分佈式計算模型,國內不少機器學習相關工做者都在研究和使用它。html

  Spark是一個通用的並行計算框架,由UCBerkeley的AMP實驗室開發。web

  那麼Spark和Hadoop有什麼不一樣呢?算法

  1.Spark的中間數據放到內存中,對於迭代運算效率比較高。編程

  Spark aims to extend MapReduce for iterative algorithms, and interactive low latency data mining. One major difference between MapReduce and Sparkis that MapReduce is acyclic. That is, data flows in from a stable source, isprocessed, and flows out to a stable filesystem. Spark allows iterative computation on the same data, which would form a cycle if jobs were visualized.   (旨在延長MapReduce的迭代算法,互動低延遲數據挖掘 MapReduce和Sparkis一個主要區別MapReduce是非週期性也就是說,數據流一個穩定的來源加工流出到一個穩定的文件系統Spark容許相同的數據,這將造成一個週期若是工做可視化迭代計算)緩存

  Spark更適合於迭代運算比較多的ML和DM運算。由於在Spark裏面,有RDD的概念。網絡

  Resilient Distributed Dataset (RDD) serves as an abstraction to rawdata, and some data is kept in memory and cached for later use. This last pointis very important; Spark allows data to be committed in RAM for an approximate20x speedup over MapReduce based on disks. RDDs are immutable and created through parallel transformations such as map, filter, groupBy and reduce.   (彈性分佈式數據集(RDD做爲原始數據抽象一些數據保存在內存緩存供之後使用最後這很重要;星火容許在RAM致力於近似20X基於加速MapReduce的磁盤上的數據RDDs不可改變的經過並行轉換地圖,過濾器,GroupBy和減小建立。)app

  RDD能夠cache到內存中,那麼每次對RDD數據集的操做以後的結果,均可以存放到內存中,下一個操做能夠直接從內存中輸入,省去了MapReduce大量的磁盤IO操做。這對於迭代運算比較常見的機器學習算法來講,效率提高比較大。可是因爲Spark目前只是在UC Berkeley的一個研究項目,目前看到的最大規模也就200臺機器,沒有像Hadoop那樣的部署規模,因此,在大規模使用的時候仍是要慎重考慮的。框架

  2.Spark比Hadoop更通用。機器學習

  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不適用那種異步細粒度更新狀態的應用,例如web服務的存儲或者是增量的web爬蟲和索引。就是對於那種增量修改的應用模型,固然不適合把大量數據拿到內存中了。增量改動完了,也就不用了,不須要迭代了。

  3.容錯性。

  從Spark的論文《Resilient Distributed Datasets: AFault-Tolerant Abstraction for In-Memory Cluster Computing》中沒看出容錯性作的有多好。卻是提到了分佈式數據集計算,作checkpoint的兩種方式,一個是checkpoint data,一個是logging the updates。貌似Spark採用了後者。可是文中後來又提到,雖而後者看似節省存儲空間。可是因爲數據處理模型是相似DAG的操做過程,因爲圖中的某個節點出錯,因爲lineage chains的依賴複雜性,可能會引發所有計算節點的從新計算,這樣成本也不低。他們後來講,是存數據,仍是存更新日誌,作checkpoint仍是由用戶說了算吧。至關於什麼都沒說,又把這個皮球踢給了用戶。因此我看就是由用戶根據業務類型,衡量是存儲數據IO和磁盤空間的代價和從新計算的代價,選擇代價較小的一種策略。

  4.關於Spark和Hadoop的融合

  不知道Apache基金會的人怎麼想的,我看Spark仍是應該融入到Hadoop生態系統中。從Hadoop 0.23把MapReduce作成了庫,看出Hadoop的目標是要支持包括MapReduce在內的更多的並行計算模型,好比MPI,Spark等。畢竟如今Hadoop的單節點CPU利用率並不高,那麼假如這種迭代密集型運算是和現有平臺的互補。同時,這對資源調度系統就提出了更高的要求。有關資源調度方面,UC Berkeley貌似也在作一個Mesos的東西,還用了Linux container,統一調度Hadoop和其餘應用模型。

轉自網絡:http://tech.it168.com/a2012/0401/1333/000001333287.shtml

相關文章
相關標籤/搜索