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


顛覆大數據分析之RDD的表達性

正如前麵在比較Spark及DSM係統時所提到的,由於RDD隻支持粗粒度的操作,因此它有一定的局限性。但是RDD的表達性對於大多數程序而言其實已經足夠好了。AMPLabs團隊他們僅花了數百行代碼就開發出了整個Pregel,這是Spark上的一個小的庫。可以通過RDD及相關的操作來表示的集群計算模型列舉如下:

  • Map-Reduce:如果存在混合器的話,這個可以使用RDD上的flatMap和reduceByKey操作來表示。簡單點的話可以表示成flatMap和groupByKey操作。運算符則對應於Spark中的轉換操作。
  • DryadLINQ:DryadLINQ(Yu等2008)通過結合了聲明性及命令式編程提供了MR所沒有的操作。大多數操作符都能對應上Spark中的轉換操作。Dryad中的apply結構就類似於RDD的map轉換,而Fork結構則類似於flatMap轉換。
  • 整體同步並行(BSP):Pregel (Malewicz等 2010)中的計算由一係列稱為超步驟的迭代所組成。圖中的每個頂點都關聯上一個用戶定義的計算函數;Pregel會確保在每一個超步驟中,用戶定義的函數都會並行地在每一條邊上執行。頂點可以通過邊來發送消息並與其它的頂點交互數據。同樣的,還會有一個全局的柵欄——當所有的計算函數都終止的時候它就會向前移動。熟悉BSP的讀者可能會知道,Pregel是一個完美的BSP的典範——一組實體在並行地計算用戶定義的函數,它們有全局的同步器並可以交換消息。由於同一個用戶函數會作用於所有的頂點,這種情況可以這樣實現,將所有頂點存儲在一個RDD中並在上麵運行flatMap操作來生成一個新的RDD。把它和跟頂點的RDD連接到一塊,這樣就可以實現消息傳遞了。
  • 迭代式Map-Reduce:HaLoop項目也同樣擴展了Hadoop來支持迭代式機器學習算法。HaLoop不僅為迭代式應用提供了編程抽象,同時它還用到了緩存的概念來在迭代間進行數據共享和固定點校驗(迭代的終止)以便提升效率。Twister (Ekanayake等2010)是另一個類似HaLoop的嚐試。這些在Spark中都可以很容易實現,因為它本身非常容易進行迭代式計算。AMPLabs團隊實現HaLoop僅花了200行代碼。
  • 轉載自 並發編程網 - ifeve.com

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

  上一篇:go  如何創建並運行java線程
  下一篇:go  話說模式匹配(1) 什麼是模式?