Hadoop 3.0.0中如何限制每个DataNode同时运行的Map任务数?
如何限制Hadoop 3.0.0中每个DataNode上同时运行的Map任务数量?
首先得给你提个醒:你配置的mapreduce.tasktracker.map.tasks.maximum是Hadoop 1.x时代的参数,在YARN框架(也就是你设置的mapreduce.framework.name=yarn)下这个参数已经完全失效了——因为Hadoop 2.x及以后版本用NodeManager替代了原来的TaskTracker,资源管理逻辑已经全部迁移到YARN组件里了。
针对你的Hadoop 3.0.0环境(1个NameNode + 5个DataNode),要限制每个DataNode上同时运行的Map任务数量,需要调整以下两类配置文件:
1. 修改YARN节点配置(yarn-site.xml)
这个文件控制每个NodeManager(对应DataNode)的整体资源上限:
- 配置每个NodeManager可用的总内存:
<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>8192</value> <description>每个NodeManager可使用的物理内存总量,单位MB,根据服务器实际内存调整</description> </property>
- 配置每个NodeManager可用的CPU核数:
<property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>8</value> <description>每个NodeManager可使用的CPU核总数,根据服务器CPU情况调整</description> </property>
2. 修改MapReduce任务资源配置(mapred-site.xml)
这里定义单个Map任务的资源占用,YARN会根据NodeManager的总资源自动计算可同时运行的Map任务数:
- 单个Map任务占用的内存:
<property> <name>mapreduce.map.memory.mb</name> <value>1024</value> <description>单个Map任务申请的内存大小,单位MB</description> </property>
- 单个Map任务占用的CPU核数:
<property> <name>mapreduce.map.cpu.vcores</name> <value>1</value> <description>单个Map任务申请的CPU核数</description> </property>
手动强制限制每个节点的Map任务数(可选)
如果你不想通过资源自动计算,而是要强制每个NodeManager最多同时运行3个Map任务,可以添加以下配置到mapred-site.xml:
<property> <name>mapreduce.job.map.tasks.maximum.per.node</name> <value>3</value> <description>每个节点上可同时运行的Map任务最大数量</description> </property>
最后注意事项
- 修改完配置后,需要重启所有NodeManager和ResourceManager才能生效。
- 配置数值要根据你的服务器硬件实际情况调整,避免资源浪费或不足。比如如果单个Map任务设为1GB内存,NodeManager总内存8GB,那理论上最多能运行8个Map任务(还要预留一部分内存给NodeManager本身)。
内容的提问来源于stack exchange,提问作者Honghe.Wu
相关产品推荐
相关产品推荐

