1. 程式人生 > >顛覆大資料分析之RDD的表達性

顛覆大資料分析之RDD的表達性

顛覆大資料分析之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行程式碼。