我正在为MapReduce编写一个索引应用程序。我能够使用NLineInputFormat分割输入,现在我的应用程序中有几百个映射器。然而,其中只有2/machine同时处于活动状态,其余的都是"PENDING"。我认为这样的行为会显著降低应用程序的运行速度。
如何让hadoop在每台机器上同时运行至少100个?
我使用旧的hadoop api语法。以下是我到目前为止所做的尝试:
conf.setNumMapTasks(1000);
conf.setNumTasksToExecutePerJvm(500);
这些似乎都没有任何效果。
任何想法我可以使映射器实际上并行运行?
JobConf.setNumMapTasks()只是对MR框架的一个提示,我不确定调用它的效果。在您的示例中,整个作业中的map任务总数应该等于输入中的总行数除以NLineInputFormat中配置的行数。您可以在这里找到有关整个作业中map/reduce任务总数的更多详细信息。
mapred.tasktracker.map.tasks.maximum的描述为
一个任务跟踪器将同时运行的map任务的最大数目。
您需要配置mapred.tasktracker.map.tasks.maximum(默认为2)来更改任务跟踪器在特定节点上并行运行的map任务的数量。我无法获得0.20.2的文档,所以我不确定参数是否存在,或者是否在0.20.2版本中使用相同的参数名称。