Hadoop映射/减少排序

时间:2012-11-14 20:10:43

标签: hadoop

我有一个map-reduce作业,我只使用mapper,因为每个mapper的输出肯定会有一个唯一的键。我的问题是当这个工作运行的时候我得到了输出文件,就像part-m-00000,part-m-00001 ......它们会按键的顺序排序吗?

或者我是否需要实现一个除了将它们写入part-r-00000,part-r-000001之类的文件之外什么都不做的reducer。这些是否保证输出按键的顺序排序。

3 个答案:

答案 0 :(得分:0)

如果要对文件中的键进行排序,并确保当i小于j时文件中的键小于文件j中的键,则不仅需要使用reducer,还需要使用分区器。你可能想考虑使用像Pig这样的东西来做这件事,因为这将是微不足道的。如果您想使用MR进行操作,请使用已排序的字段作为密钥并编写分区程序以确保您的密钥最终位于正确的减速器中。

答案 1 :(得分:0)

当您的地图功能输出密钥时,它会转到partition function which does a sort。因此,默认情况下,键将按排序顺序排列,您可以使用标识缩减器。

答案 2 :(得分:0)

如果您想保证排序顺序,只需使用一个IdentityReducer

如果您希望它可以更加并行化,您可以指定更多的reducers,但是默认情况下输出将仅在文件中排序,而不是在文件之间排序。即,每个文件都将被排序,但是part-r-00000不一定会出现在part-r-00001之前。如果您希望对文件进行排序,则可以使用基于排序顺序进行分区的自定义分区程序。 I.E.,reducer 0获取所有最低键,然后是reducer 1,...和reducer N获得所有最高键。