增加地图数量和减少功能

时间:2013-10-04 10:06:57

标签: hadoop mapreduce cassandra

我有一个问题。 我想增加我的地图并将函数减少到输入数据的数量。当我执行System.out.println(conf.getNumReduceTasks())System.out.println(conf.getNumMapTasks())时,它会显示我:

1  1

当我执行conf.setNumReduceTasks(1000000)conf.setNumMapTasks(1000000)并再次执行println方法时,它会向我显示:

1000000  1000000

但我认为我的mapreduce程序执行时间没有变化。我的输入来自cassandra,实际上它是cassandra列族的行,大约是362000行。 我想设置我的map和reduce函数到输入行的数量..

我该怎么办?

1 个答案:

答案 0 :(得分:1)

为map / reduce作业设置map / reduce任务的数量确定了将使用多少map / reduce进程来处理您的作业。考虑一下你是否真的需要这么多的java进程。

也就是说,地图任务的数量主要是自动确定的;设置map任务的数量只是一个提示,可以增加Hadoop确定的地图数量。

对于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文件中查看作业使用的实际任务数,以验证您的设置。