Pig:强制每个输入文件一个映射器



Follow to Pig:强制UDF发生在Reducer中或设置映射器的数量。我有一个UDF,它在我的猪工作流中作为一个映射步骤运行。它接受X个文件的列表,每个reducer一个,每个reducer从前面的步骤中保存它。我希望有X个映射器(每个输入文件1个)来运行这个UDF,因为它非常耗时,所以Pig没有像我希望的那样并行运行它。基于Hadoop流:每个map单个文件或多个文件。Don't Split我认为解决方案是防止分裂,所以我创建了一个pig Load函数,就像。

public class ForceMapperPerInputFile extends PigStorage {
    @Override
    public InputFormat getInputFormat() {
        return new MapperPerFileInputFormat();
    }
}
class MapperPerFileInputFormat extends PigTextInputFormat {
    @Override
    protected boolean isSplitable(JobContext context, Path file) {
       return false;
    }
}

当我使用这个时,它的效果与我想要的完全相反,映射器任务的数量减少了近一半。

我如何才能真正强制每个输入文件只有一个映射器?

SET pig.noSplitCombination true;

(或-Dpig.noSplitCombination=true作为运行脚本时的命令行选项之一)

最新更新