Hadoop集群单数据节点仅运行2个任务,并发任务执行受限求助
解决方案
1. 先排查YARN集群总资源配置
问题核心在YARN的资源调度限制,而非单个MapReduce任务的map数量。先检查yarn-site.xml中的关键参数:
yarn.nodemanager.resource.memory-mb:每个节点的总可用内存,比如设置为8192(8G)yarn.nodemanager.resource.cpu-vcores:每个节点的总可用CPU核数,比如设置为4yarn.scheduler.maximum-allocation-mb:单个容器可申请的最大内存yarn.scheduler.maximum-allocation-vcores:单个容器可申请的最大CPU核数
你的集群有3个节点(主节点+2数据节点),按单节点4核8G计算,总资源为12核24G,需确保参数配置匹配硬件实际情况。
2. 调整MapReduce任务的资源配置
修改mapred-site.xml,给单个MR任务的map/reduce进程分配合理资源:
mapreduce.map.memory.mb:每个Map任务内存,建议设为1024(1G)mapreduce.reduce.memory.mb:每个Reduce任务内存,建议设为2048(2G)mapreduce.map.cpu.vcores:每个Map任务CPU核数,设为1mapreduce.reduce.cpu.vcores:每个Reduce任务CPU核数,设为1mapreduce.jobtracker.maxtasks.per.job:单个MR任务允许的最大并发任务数(这才是控制单任务并发的关键,mapreduce.map.tasks只是YARN的参考值,不直接生效)
同时确认mapreduce.framework.name配置为yarn,确保MR运行在YARN框架上。
3. 调整Spark任务的资源申请规则
Spark任务可通过提交命令指定资源,或修改默认配置文件:
- 提交命令时直接追加参数:
spark-submit --deploy-mode client --class org.apache.spark.examples.SparkPi \ --executor-memory 1G --executor-cores 1 --num-executors 5 \ /opt/spark-3.1.2/examples/jars/spark-examples_2.12-3.1.2.jar 10 - 或在
spark-defaults.conf中设置默认值:spark.executor.memory 1g spark.executor.cores 1 spark.driver.memory 1g
4. 检查YARN调度器队列配置
默认使用CapacityScheduler,查看capacity-scheduler.xml:
yarn.scheduler.capacity.root.default.capacity:默认队列的资源占比,设为100%(如果仅使用默认队列)yarn.scheduler.capacity.root.default.maximum-capacity:默认队列的最大资源占比,设为100%yarn.scheduler.capacity.root.default.user-limit-factor:单个用户可使用的资源倍数,设为5,允许单个用户同时运行多个任务
5. 验证资源使用状态
通过命令或WebUI确认资源分配情况:
- 查看节点资源:
yarn node -list -all - 查看运行中的应用:
yarn application -list - 访问YARN WebUI(默认端口8088),在Nodes和Applications页面查看资源分配细节
关键提醒
mapreduce.map.tasks只是YARN用来估算map数量的参考值,实际并发任务数由集群总资源和单个任务的资源申请量决定,调整该参数无法解决总并发任务数受限的问题。
内容的提问来源于stack exchange,提问作者Vishal Muralidharan
相关产品推荐
相关产品推荐

