我目前正在开发一个四节点多群集。任何人都可以建议我使用适当的块大小来处理22GB的输入文件? 提前谢谢。
以下是我的效果结果: 64M - 32分钟 128M - 19.4分钟 256M - 15分钟
现在,我应该考虑将其大大增加到1GB / 2GB吗?如果这样做,请解释是否有任何问题。
修改 此外,如果性能随着20GB输入文件的块大小的增加而增加,为什么默认块大小为64MB或128MB? Kindly answer similar question over here
答案 0 :(得分:1)
您将用于处理此文件的分割大小是多少?如果它略大于默认的块大小,那么我建议您将块大小更改为拆分大小值。这应该增加映射器的数据位置的机会,从而提高作业吞吐量。
分割大小由输入格式计算。
protected long computeSplitSize(long blockSize, long minSize,
long maxSize) {
return Math.max(minSize, Math.min(maxSize, blockSize));
}
minSize和maxSize可以使用以下配置参数进行操作,
mapreduce.input.fileinputformat.split.minsize
mapreduce.input.fileinputformat.split.maxsize
您可以在FileInputFormat类中找到详细的数据流。
答案 1 :(得分:0)
每线处理有多重?如果它只是一种" grep"那么你应该可以将块大小增加到1GB。为什么不简单地尝试一下呢?您的性能数字表示已经增加块大小的正面结果。
如果每条线需要大量的辅助处理,则考虑较小的块大小。但鉴于您已经确定的表现趋势,这是值得怀疑的。