跟进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;
}
}
当我使用它时,它的效果与我想要的完全相反,映射器任务的数量减少了近一半。
我如何才能真正强制每个输入文件只有一个映射器?