閱讀172 返回首頁    go 阿裏雲 go 技術社區[雲棲]


顛覆大數據分析之Spark VS分布式共享內存係統

Spark可以看作是一個分布式共享集合係統,和Stumm和Zhou (1990)以及Nitzber和Lo (1991)所提到的傳統的分布式共享內存(DSM)係統則略有不同。DSM係統允許單獨讀寫內存,而Spark隻允許進行粗粒度的RDD轉換。盡管這限製了能夠使用Spark的應用種類,但它對於實現高效的容錯性卻很有幫助。DSM係統可能會需要檢查點相互協作來完成容錯,比如說使用Boukerche等人(2005)所提出的協議。相反的,Spark隻需要存儲世係圖來進行容錯。恢複需要在RDD丟失的分區上進行重構操作——但這個可以並行地高效完成。Spark與DSM係統的另一個根本的不同在於,由於RDD的隻讀特性,Spark中可以使用流浪者緩解策略——這使得備份任務可以並行地完成,這類似於MR中的推測執行(Dinu和Ng 2012)。而在DSM中則很難緩解流浪者或者備份任務,因為這兩者都可能會產生內存競爭。Spark的另一個優點是當RDD的大小超出集群的所有內存時可以優雅地進行降級。它的缺點就是RDD的轉換本質上是粗粒度的,這限製了能夠開發的應用的種類。比如說,需要細粒度共享狀態訪問的應用,像WEB爬蟲或者其它WEB應用,都很難在Spark上實現。Piccolo (Power和 Li 2010)提供了一個以數據為中心的異步編程模型,這或許是這類應用的一個更好的選擇。

在Spark中,開發人員調用map,filter或reduce操作時可以傳入函數或者閉包。一般來說,當Spark在工作節點上運行這些函數的時候,函數使用域內的本地變量會被拷貝出來。Spark有一個共享變量的概念,它使用廣播變量和累加器來模擬“全局”變量。開發人員使用廣播變量一次性地將隻讀數據拷貝給所有的工作者。(類共軛梯度下降的算法中的靜態矩陣可以使用廣播變量來表示)累加器是隻能由工作者來增加並由驅動程序去讀取的變量——這樣並行聚合可以實現成支持容錯的。值得注意的是全局變量是在Spark中模仿DSM功能的一種特殊方式。

最後更新:2017-05-22 20:03:36

  上一篇:go  Java並發性和多線程介紹目錄
  下一篇:go  阿姆達爾定律