0

跟进Pig:强制 UDF 在 Reducer 中发生或设置映射器数量。我有一个 UDF,它在我的猪工作流程中作为地图步骤运行。它需要一个 X 文件列表,每个从前一步保存的 reducer 1 个。我希望有 X 映射器(每个输入文件 1 个)来运行这个 UDF,因为它非常耗时,所以 Pig 没有像我想要的那样并行运行它。基于Hadoop 流式传输:每个地图的单个文件或多个文件。不要拆分我认为解决方案是防止拆分,所以我做了一个猪 Load Func 之类的。

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;
    }
}

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

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

4

1 回答 1

1

SET pig.noSplitCombination true;

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

于 2013-04-04T13:08:41.203 回答