Spark作為UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的并行計(jì)算框架,其基于map reduce算法實(shí)現(xiàn)的分布式計(jì)算,擁有Hadoop MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是Job中間輸出和結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的map reduce的算法。其架構(gòu)如下圖所示:spark-framwork
Spark與Hadoop的比較
Spark的中間數(shù)據(jù)放到內(nèi)存中,對于迭代運(yùn)算效率更高。 ?Spark更適合于迭代運(yùn)算比較多的ML和DM運(yùn)算。因?yàn)樵赟park里面,有RDD的抽象概念。
Spark比Hadoop更通用。 ?Spark提供的數(shù)據(jù)集操作類型有很多種,不像Hadoop只提供了Map和Reduce兩種操作。比如map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues, sort,partionBy等多種操作類型,Spark把這些操作稱為Transformations。同時(shí)還提供Count, collect, reduce, lookup, save等多種actions操作。
這些多種多樣的數(shù)據(jù)集操作類型,給給開發(fā)上層應(yīng)用的用戶提供了方便。各個(gè)處理節(jié)點(diǎn)之間的通信模型不再像Hadoop那樣就是唯一的Data Shuffle一種模式。用戶可以命名,物化,控制中間結(jié)果的存儲(chǔ)、分區(qū)等。可以說編程模型比Hadoop更靈活。
不過由于RDD的特性,Spark不適用那種異步細(xì)粒度更新狀態(tài)的應(yīng)用,例如web服務(wù)的存儲(chǔ)或者是增量的web爬蟲和索引。就是對于那種增量修改的應(yīng)用模型不適合。
容錯(cuò)性、在分布式數(shù)據(jù)集計(jì)算時(shí)通過checkpoint來實(shí)現(xiàn)容錯(cuò),而checkpoint有兩種方式,一個(gè)是checkpoint data,一個(gè)是logging the updates。用戶可以控制采用哪種方式來實(shí)現(xiàn)容錯(cuò)。
可用性、Spark通過提供豐富的Scala, Java,Python API及交互式Shell來提高可用性。
Spark與Hadoop的結(jié)合
Spark可以直接對HDFS進(jìn)行數(shù)據(jù)的讀寫,同樣支持Spark on YARN。Spark可以與MapReduce運(yùn)行于同集群中,共享存儲(chǔ)資源與計(jì)算,數(shù)據(jù)倉庫Shark實(shí)現(xiàn)上借用Hive,幾乎與Hive完全兼容。
Spark的適用場景
Spark是基于內(nèi)存的迭代計(jì)算框架,適用于需要多次操作特定數(shù)據(jù)集的應(yīng)用場合。需要反復(fù)操作的次數(shù)越多,所需讀取的數(shù)據(jù)量越大,受益越大,數(shù)據(jù)量小但是計(jì)算密集度較大的場合,受益就相對較小
由于RDD的特性,Spark不適用那種異步細(xì)粒度更新狀態(tài)的應(yīng)用,例如web服務(wù)的存儲(chǔ)或者是增量的web爬蟲和索引。就是對于那種增量修改的應(yīng)用模型不適合。
總之Spark作為一種非常高校的分布式計(jì)算系統(tǒng),其在互聯(lián)網(wǎng)行業(yè)當(dāng)中擁有十分廣泛和通用的應(yīng)用前景。