Hadoop 大小为零的输出文件

Hadoop 大小为零的输出文件,hadoop,mapreduce,Hadoop,Mapreduce,我正在运行Hadoop mapreduce流式作业mappers only作业。在某些情况下,我的作业会写入stdout,从而创建大小非零的输出文件。在某些情况下,我的作业不会向标准输出写入任何内容,但仍然会创建一个大小为零的输出文件。有没有一种方法可以避免在没有向标准输出写入任何内容时创建大小为零的文件。如果您不介意扩展当前的输出格式,只需覆盖OutputCommitter,以便在没有写入数据时“中止”提交任务阶段 请注意,对于空文件序列文件,并非所有输出格式都显示零文件字节。例如,文件有一个

我正在运行Hadoop mapreduce流式作业mappers only作业。在某些情况下,我的作业会写入stdout,从而创建大小非零的输出文件。在某些情况下,我的作业不会向标准输出写入任何内容,但仍然会创建一个大小为零的输出文件。有没有一种方法可以避免在没有向标准输出写入任何内容时创建大小为零的文件。

如果您不介意扩展当前的输出格式,只需覆盖OutputCommitter,以便在没有写入数据时“中止”提交任务阶段

请注意,对于空文件序列文件,并非所有输出格式都显示零文件字节。例如,文件有一个头,因此不能仅检查输出文件大小

查看以下文件的源代码:

OutputCommitter-基本抽象类 FileOutputCommitter-大多数FileOutputFormats都使用此committer,因此这是一个很好的起点。查看私有方法moveTaskOutputs,如果没有写入任何内容,您的逻辑很可能不会复制文件 你在用什么? 如果是,则即使减速机没有要写入输出的内容,multipleOutput也会创建默认文件。 要避免这种默认的零大小输出,可以使用

根据我的经验,即使您使用的是LazyOutputFormat,也会在以下情况下创建零大小的文件:Reducer有一些数据要写入,因此会创建输出文件,但Reducer在写入输出之前会被杀死。我认为这是一个时间问题,所以您可能会注意到HDFS中只存在部分reducer输出文件,或者根本没有注意到这一点

如果你有10个减速机,你可能只有“n”个