gpt4 book ai didi

java - 使用 MultipleOutputs 时如何在 Hadoop 中命名文件?

转载 作者:可可西里 更新时间:2023-11-01 15:39:22 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

是的,如果您想要单个文件作为输出,您必须合并文件(即通过 diff reducer 将 attrib 包含不同的文件)。您可以在作业完成后合并文件。您可以查看此附加文件的方法。 public FSDataOutputStream append(Path f) 抛出 IOException

关于java - 使用 MultipleOutputs 时如何在 Hadoop 中命名文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19243374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com