我对 map reduce 输出部分文件有一些疑问。
-
1> map reduce输出中part-r-*文件和part-*文件有什么区别?part-r-* 是 mapper 的输出,而 part-* 是 reducer 的输出?
2> 如果reducer没有产生任何结果,mapper的输出会被保留还是会被删除?
通常,part-r-* 来自 reducer。 MultipleOutputs
允许您使用不同的命名约定。如果没有 reduce 步骤,输出将是 part-m-*。据我了解,如果定义了减速器,则无论减速器是否产生任何东西,都会删除映射器输出。通常,即使它们是空的,reducer 输出文件也会生成,除非您使用LazyOutputFormat
. 您在哪里找到不以 m-nnnnn 或 r-nnnnn 结尾的 part-* 文件?
对于旧版本 (< 0.2),它们过去只输出 part-000*。但是现在,我们同时看到了 part-mn*(n 代表数字 ex:part-m-00000)和 part-rn* 文件。part-rn* 用于减速器的输出。part-mn* 是组合器的输出。(如果我不使用组合器,我不会得到任何 part-mn*。我不确定这是否是默认行为。)
part-00000 是映射器或减速器在旧 API 中创建的输出目录。在新的 API 中,它略微更改为 part-m-* 用于映射器输出和 part-r-* 用于减速器输出。有关详细信息,请参阅 OReilly 的 Hadoop 权威指南,第 28 页。