【问题标题】:How are files named in Hadoop when using MultipleOutputs?使用 MultipleOutputs 时,Hadoop 中的文件如何命名?
【发布时间】:2013-10-15 02:53:35
【问题描述】:

我正在使用 MultipleOutputs 编写三个文件,即名称、属性、其他文件,并使用 6 个还原器。 我在我的输出目录中获得了这些文件:

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 reducers 有不同的文件)?另外,有没有办法可以从我的输出文件名中删除 -r-xxxxx ?

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

【问题讨论】:

    标签: java hadoop mapreduce


    【解决方案1】:

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

    是的,如果您希望将单个文件作为输出,您必须合并文件(即,通过 diff reducers 将拥有不同的文件)。您可以在作业完成后合并文件。您可以查看此方法来附加文件。 public FSDataOutputStream append(Path f) throws IOException.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多