当执行Pig脚本,出现Map的数量极小,但是执行速度慢时。可以通过适当减小set pig.maxCombinedSplitSize的值来增加map的数量,从而加快执行速度。
因为,本地执行job占全部job的比例越高,则执行速度越快。
在MapReduce Application 监控web页面中,Job Counter中有:
Rack-local map tasks: 在同一个机柜中执行的map task数目
Launched map tasks: 启动的map task数目
Data-local map tasks: 本地执行的map task数目
此外,还有最终成功执行的map task的个数: successful map tasks。
则,通过data-local map tasks / successful map tasks = 本地执行的map tasks的比例作为指标来衡量在map阶段的效率。
本地执行的map tasks的比例越高,则map task的执行效率越快。如果不是大多数文件size都大大小于dfs.block.size,如果输出的文件数目能够接受且不会产生异常的情况下,当然是每个block对应一个mapper的效率最高了。当然,如果文件数目过多,使得每个block对应一个mapper,将导致内存溢出。所以,在内存允许的情况下,应该使得本地执行job的比例尽量高的目标去设置maxCombineSplitSize。