天天看點

颠覆大資料分析之Spark VS分布式共享記憶體系統

颠覆大資料分析之spark vs分布式共享記憶體系統

譯者:黃經業    購書

spark可以看作是一個分布式共享集合系統,和stumm和zhou (1990)以及nitzber和lo (1991)所提到的傳統的分布式共享記憶體(dsm)系統則略有不

颠覆大資料分析之Spark VS分布式共享記憶體系統

同。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功能的一種特殊方式。 

繼續閱讀