2013-02-21 124 views
6

我正在做一個課程的任務,這需要我在功能語言中實現一個並行MapReduce引擎,然後使用它來解決某些簡單問題做MapReduce的最佳功能語言?

你認爲我應該使用哪種功能語言?

這裏是我的要求:

  • 應該是比較容易學習,因爲我只有大約2周爲這項任務。
  • 現有的MapReduce實現可以在網上找到 - 我的課程確實是而不是禁止我使用一般的開源代碼或互聯網資源。
  • 應該適合這個問題,並且要成爲一種總體上有價值的語言來學習(一種相對流行的語言)。

我目前正在考慮Haskell和Clojure,但這兩種語言對我來說都是新手 - 我不知道這些語言是否真的適合這種情況。

+1

您將使用多少個計算節點?多核心?還是集羣? – 2013-02-21 22:37:15

+3

你的背景是什麼?一門語言學習多麼容易取決於你的經驗。 – luqui 2013-02-21 22:37:26

+0

我從來沒有用功能語言編寫過非平凡的程序。我在Prolog和Haskell中編寫了TRIVIAL程序。但是,我已經使用命令式語言(C,C++,Python)進行編程超過10年。我認爲自己是一名C程序員。 @DonStewart:這不是一個真實世界的程序,而只是一個班級的作業。 2核心是好的。 – 2013-02-21 22:43:34

回答

7

由於不同的原因,Clojure和Haskell絕對值得學習。如果你有機會,我會嘗試兩種。我也建議將Scala添加到你的列表中。

如果一定要選一個,我會選擇Clojure的,有以下原因:

  • 這是一個Lisp的 - 每個人都應該學習的Lisp。見http://www.paulgraham.com/avg.html
  • 它併發一個獨特的方法 - 看http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey
  • 這是一個JVM語言,這使得它立即從實踐的角度有用:JVM上庫&工具生態系統是非常好的,更好的比任何其他平臺恕我直言。如果你想做嚴肅的技術。在企業或啓動領域工作,對JVM有很好的瞭解是非常有幫助的。 FWIW,Scala也屬於這類「有趣的JVM語言」。

另外,Clojure使平行map-reduce非常容易。下面是一個開始:

(reduce + (pmap inc (range 1000))) 
=> 500500 

使用pmap而非map就足以給你一個並行映射操作。也有平行的減速,如果你使用的Clojure 1.5,看到reducers framework更多細節

1

Cascalog and Clojure會給你一個相當轉向關鍵的入門方式。如果你必須建立自己的羣集,那麼我建議使用pallet-hadoop來部署hadoop羣集,但出於教育目的,cascalog在本地運行良好。

1

我個人推薦使用Scalding,這是一個在Cascading之上的Scala抽象,用於抽象低級Hadoop細節。它是在Twitter上開發的,今天看來已經夠成熟了,所以你可以開始真正使用它,而不會有太多的麻煩。

下面是一個例子,你會怎麼做一個WORDCOUNT在滾燙:

package com.twitter.scalding.examples 

import com.twitter.scalding._ 

class WordCountJob(args : Args) extends Job(args) { 
    TextLine(args("input")) 
    .flatMap('line -> 'word) { line : String => tokenize(line) } 
    .groupBy('word) { _.size } 
    .write(Tsv(args("output"))) 

    // Split a piece of text into individual words. 
    def tokenize(text : String) : Array[String] = { 
    // Lowercase each word and remove punctuation. 
    text.toLowerCase.replaceAll("[^a-zA-Z0-9\\s]", "").split("\\s+") 
    } 
} 

我認爲這是一個很好的選擇,因爲,因爲它使用Scala的它不是從正規地圖太遠/ Reduce的Java程序,即使你不知道斯卡拉,拿起它並不難。

+0

您是否考慮到需要編寫實際的MapReduce ENGINE?在你的例子中,你似乎正在使用現有的內置引擎。燙傷是編寫MapReduce ENGINE的好語言嗎? – 2013-02-22 03:03:22

0

至於你的發動機起步的地方,你可能會感興趣的文件Google's MapReduce Programming Model -- Revisited,它描述了從功能上看MapReduce的。類型使用Haskell符號來描述,但應該很容易翻譯成您選擇的任何語言。

7

Cloud Haskell對於在其上實現map/reduce模型的分佈式系統引擎將是一個合適的選擇。但是,對於雙核本地系統,只需使用GHC運行時中的現有並行支持,直接在GHC中實現就足夠了。提供輕量級線程,工作竊取隊列和其他有用的基元。

如果我正在實現一個/ new/MapReduce引擎,我會使用GHC。類型,並行調試工具(如ThreadScope)和優化編譯器確保您能夠從代碼中獲得所需性能,而優異的多核運行時將會使用let you scale well.