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
作为运行脚本时的命令行选项之一)