2011-09-29 112 views
43

要創建MapReduce作業,您可以使用舊的org.apache.hadoop.mapred程序包或較新的org.apache.hadoop.mapreduce程序包對Mappers and Reducers,Jobs ...第一個標記爲已棄用,但此時已恢復。現在我想知道使用舊的mapred軟件包還是新的mapreduce軟件包來創建工作以及爲什麼更好。還是僅僅取決於你是否需要諸如舊的mapred軟件包中可用的MultipleTextOutputFormat之類的東西?使用mapred或mapreduce包創建Hadoop作業會更好嗎?

+0

'但是這得到了恢復meanwhile'你確定嗎? –

+5

例如r0.21.0中org.apache.hadoop.mapred.lib包中的接口映射器在r0.20.2中被標記爲已棄用時未被標記爲已棄用。 – momo13

回答

39

功能方面,舊的(o.a.h.mapred)和新的(o.a.h.mapreduce)API之間沒有太大的區別。唯一重要的區別是記錄被推送到舊API中的映射器/縮減器。而新的API支持拉/推機制。你可以得到更多關於拉機制here的信息。

此外,舊的API已從012.以來0.21。你可以找到更多有關新的API here的信息。

正如你所提到的,一些類(如MultipleTextOutputFormat)沒有被遷移到新的API,由於這個和上述原因,最好堅持舊API(儘管翻譯通常很簡單)。

+4

爲什麼javadocs沒有提到這些? – cmcginty

+3

[Hadoop - 權威指南](http://shop.oreilly.com/product/0636920021773.do)擁有新API中的大部分代碼。 –

+3

作爲一個附註 - MRUnit使用新的API,.mapreduce。所以如果你在你的代碼中使用.mapred,它會拋出錯誤。你不會很高興。 – wmute

14

舊的和新的API都很好。新的API雖然更清潔。儘可能使用新的API,並且在需要特定類別的地方使用舊的API(例如MultipleTextOutputFormat

但是務必不要在新舊API中混合使用相同的Mapreduce作業。這會導致奇怪的問題。

2

舊的API(mapred)

  1. 存在問題的包org.apache.hadoop.mapred

  2. 提供地圖/減少作業配置。

  3. 減少值對於給定的密鑰,基於所述迭代器
  4. Summary

新的API(MapReduce的)

  • 存在問題的包裝org.apache.hadoop.mapreduce

  • 作業配置由獨立的類完成,稱爲JobConf,它是外延的配置

  • 的nsion減少值給定鍵的基礎上,可迭代

  • Package Summary

  • +0

    org.apache.hadoop.mapred是舊的API,org.apache.hadoop.mapreduce是新的。您可能想要更改您的答案 – Harinder

    +0

    @ Dennis更新了答案 – anish

    +3

    此外,JobConf是mapred API的一部分,而不是mapreduce API – ryanbwork

    相關問題