【问题标题】:Pig: Force one mapper per input filePig:强制每个输入文件使用一个映射器
【发布时间】:2013-04-03 19:50:52
【问题描述】:

关注Pig: Force UDF to occur in Reducer or set number of mappers。我有一个 UDF,它在我的猪工作流程中作为地图步骤运行。它需要一个 X 文件列表,每个从前一步保存它的减速器 1 个。我希望有 X 映射器(每个输入文件 1 个)来运行这个 UDF,因为它非常耗时,所以 Pig 没有像我想要的那样并行运行它。基于Hadoop streaming: single file or multi file per map. Don't Split,我认为解决方案是防止分裂,所以我做了一个猪加载函数。

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

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

我怎样才能真正为每个输入文件强制使用一个映射器?

【问题讨论】:

    标签: apache-pig input-split


    【解决方案1】:

    SET pig.noSplitCombination true;

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

    【讨论】:

    • 显然我的输入文件有足够的偏差,这让事情变得更糟,但感谢这确实强制每个输入文件使用一个映射器。
    • 这不会导致每个块有一个映射器吗?对于大于块大小的文件,您仍然会获得超过 1 个映射器,对吗?如果我的文件是 5GB 并且我想将它们强制到一个映射器中,我将如何处理?而且我不想将 maxCombinedSplitSize 设置为任意数字...
    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多