使用MultipleOutputs时,Hadoop中的文件是如何命名的?

时间:2013-10-08 09:03:09

标签: java hadoop mapreduce

我正在使用MultipleOutputs来编写三个文件,即name,attrib,others和使用6个redcuers。 我在输出目录中获取这些文件:

attrib-r-00003  name-r-00004   part-r-00000  part-r-00002  part-r-00004  _SUCCESS
_logs           other-r-00001  part-r-00001  part-r-00003  part-r-00005

我的问题是,这些文件是如何命名的(因为为什么-r-0003附加到attrib文件,是否任务0003编译了这个文件?)。我目前正在伪模式下运行Hadoop,在真正的集群上是否需要组合文件(即,由diff diffrs提供不同的文件)?另外,有没有办法可以从输出文件名中删除-r-xxxxx?

P.S我对Hadoop的了解非常有限。

1 个答案:

答案 0 :(得分:1)

MultipleOutputs允许您将数据写入名称来自的文件 输出键和值,或实际上来自任意字符串。这允许每个减速器(或 mapper in a only-only job)创建多个文件。文件名是形式的 name-m-nnnnn 用于地图输出, name-r-nnnnn 用于减少输出,其中name是 由程序设置的任意名称,nnnnn是指定该部分的整数 数字,从零开始。部件号确保从不同分区(映射器或缩减器)写入的输出在同名的情况下不会发生冲突。

是的,您需要组合文件(即,如果您想要将单个文件作为输出,则可以通过差异缩减器使用不同的文件)。您可以在作业完成后合并文件。您可以查看此方法以附加文件。 public FSDataOutputStream append(Path f) throws IOException