我使用hadoop 2.0。当我使用job更改映射任务的数量时。setNumMapTasks,这个数字是预期的(在输出文件夹中的序列文件的数量和容器的数量),但它们不是并行运行的,而是一次只有2个。例如,当我将map任务的数量设置为5时,就像是先执行其中的2个,然后是2个,然后是1个。我有一个8核系统,我想充分利用它。我在网上搜索了一下(包括StackOverflow),似乎有一些建议,我尝试了以下方法:
- 调整了参数"mapred.tasktracker.map.tasks"。在mapred-site.xml中设置"Maximum",以设置并行运行的任务数量。我把它设置为8。
- 减少了参数"mapred.max.split.size"。我的输入序列文件大小是8448509或大约8 MB,因此我将其设置为2097152 (2 MB)。
- 降低DFS块大小,"DFS .block"。dfs-site.xml中的大小。我了解到块大小默认为64MB。我将其降低到2097152 (2 MB)。
尽管如此,我没有看到性能有任何变化。它仍然是一次2个地图任务。我没有格式化我的hdfs和重新加载序列文件后3。但我不确定这是否是原因。
你可以在https://www.dropbox.com/sh/jnxsm5m2ic1evn4/zPVcdk8GTp访问我的配置文件。我遗漏了什么吗?
我还有一个问题。有些帖子似乎提到了那份工作。setNumMapTasks只是环境的一个指示器,实际的数量由环境决定。然而,我总是发现任务的数量是我指定的。这在意料之中吗?
谢谢制造
在经典mapreduce框架(MR1)中,您可以通过使用属性mapred.tasktracker.map.tasks.maximum
来设置映射槽的数量。但在YARN中,情况有所不同。参见下面关于YARN中map/reduce槽的讨论
https://groups.google.com/a/cloudera.org/forum/!主题/cdh-user J564g9A8tPE