为您的 map/reduce 作业设置 map/reduce 任务的数量确实定义了将使用多少个 map/reduce 进程来处理您的作业。考虑一下你是否真的需要这么多 java 进程。
也就是说,地图任务的数量大多是自动确定的;设置map任务数量只是一个提示,可以增加Hadoop确定的map数量。
对于 reduce 任务,默认值为 1,实际限制为 1,000 左右。
见:http ://wiki.apache.org/hadoop/HowManyMapsAndReduces
了解集群的每个节点也有最大数量的可以同时执行的 map/reduce 任务也很重要。这是由以下配置设置设置的:
mapred.tasktracker.map.tasks.maximum 和 mapred.tasktracker.reduce.tasks.maximum
这两个的默认值都是 2。
因此,增加 map/reduce 任务的数量将受限于每个节点可以同时运行的任务数量。这可能是您没有看到工作执行时间发生变化的原因之一。
见:http ://hadoop.apache.org/docs/stable/mapred-default.html
总结就是:让 Hadoop 决定地图的数量,除非你想要更多的地图任务。
使用 mapred.tasktracker..tasks.maximum 设置来控制一次可以运行多少个任务。
reduce 任务数的最大值应该在 1 或 2 * (mapred.tasktracker.reduce.tasks.maximum * #nodes) 之间。您还必须考虑您希望一次运行多少个 map/reduce 作业,以便单个作业不会消耗所有可用的 reduce 槽。
几乎可以肯定,1,000,000 的值对于任何一种设置都太高了。运行那么多java进程是不切实际的。我希望如此高的价值会被忽略。
在将 mapred.tasktracker..tasks.maximum 设置为您的节点能够同时运行的任务数后,然后尝试逐步增加作业的 map/reduce 任务。
您可以在 job.xml 文件中查看作业使用的实际任务数,以验证您的设置。