如何在Hadoop中为多个作业分配特定数量的映射器?

时间:2013-07-24 06:32:02

标签: hadoop apache-pig

我正在执行多个PIG脚本,例如script1,script2,script3,script4。在那里我执行脚本1并且脚本执行后并行执行脚本2,3,4执行。 我提供大小为7-8 GB的输入文件。因此,在执行script1之后,我观察到,而不是并行执行脚本2,3,4,只有script2正在执行,因为它消耗了33-35个映射器。其他保留在队列中(意味着script3,4没有得到映射器分配)。由于这需要太多时间来执行所有脚本。

所以我想的是,如果我能够为每个脚本设置mapper的限制,那么执行的时间可能会减少,因为所有脚本都可以分配映射器。

那么有没有办法将特定数量的映射器分配给多个脚本?

2 个答案:

答案 0 :(得分:0)

如果您的地图编号已正确设置(根据您的核心/节点和磁盘/节点值),那么让1个作业消耗所有地图或使用N个作业消耗MapNumber / N地图将具有相同的结果。但是,如果您真的想在一定数量的工作上分配地图,您可以设置每个工作地图编号(我认为mapreduce.job.maps中的mapred-site.xml)。

考虑到你还有免费的地图插槽,有一些配置可以启用作业并行执行,如下所述:Running jobs parallely in hadoop

如果你提供一个job.xml,你可以在其中设置你的地图编号为hadoop命令,你也可以为每个作业设置一个地图编号(即使我不确定它是否真的有效)。

答案 1 :(得分:0)

您可以在脚本的开头添加以下行:

设置mapred.map.tasks 8

这将让你的所有脚本同时运行。

请注意,如果你的机器已经饱和,这不会影响所有脚本的运行时间