2012-06-07 125 views
0

我对map缩小输出零件文件有一些疑问。map reduce output files:part-r- * and part- *

    1> map-reduce输出中的part-r- *文件和part- *文件有什么区别? part-r- *从mapper输出,part- *从reducer输出?
    2>如果reducer没有产生任何结果,mapper输出将停留或将被删除?

回答

2

通常,part-r- *来自减速器。 MultipleOutputs允许您使用不同的命名约定。如果没有减少步骤,输出将是部分m- *。据我了解,如果定义了reducer,不管reducer是否产生任何东西,mapper输出都会被删除。通常还会生成减速器输出文件,即使它们是空的,除非您使用LazyOutputFormat。你在哪里找到没有以m-nnnnn或r-nnnnn结尾的part- *文件?

1

对于旧版本(< 0.2),它们用于仅输出part-000 *。但现在,我们看到部分m-n *(n代表编号ex:part-m-00000)和part-r-n *文件。 part-r-n *用于从reducer输出。 part-m-n *是组合器的输出。 (如果我不使用组合器,我没有得到任何部分*我不确定它是否是默认行为。)

+0

part-m-X是映射器的输出,而不是组合器的输出... – OhadR

0

part-00000是由mappers或reducer创建的输出目录旧的API。在新API中,它稍微更改为part-m- *用于mapper输出,part-r- *用于reducers输出。 有关更多详细信息,请参阅OReilly的Hadoop权威指南,页码28.