【问题标题】:increase the number of map and reduce function增加map和reduce函数的数量
【发布时间】:2013-10-05 12:40:22
【问题描述】:

我有一个问题。 我想增加我的地图并将函数减少到我的输入数据的数量。当我执行 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 函数的数量设置为输入行的数量..

我该怎么办?

【问题讨论】:

    标签: hadoop mapreduce cassandra


    【解决方案1】:

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

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

    对于reduce任务,默认为1,实际限制为1000左右。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多