首页 > 代码库 > yarn的资源管理。

yarn的资源管理。

把CDH搭建起来了,跑其中的例子程序word-count。在控制台界面一直显示map 0%  reduce 0% , 通过web页面查看job的状态一直是run,但是map没有执行。感觉是是资源的分配有问题。接着查看了任务的日志。

2014-07-04 17:30:37,492 INFO [RMCommunicator Allocator] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: Recalculating schedule, headroom=0
2014-07-04 17:30:37,492 INFO [RMCommunicator Allocator] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: Reduce slow start threshold not met. completedMapsForReduceSlowstart 2
2014-07-04 17:30:38,496 INFO [RMCommunicator Allocator] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: Ramping down all scheduled reduces:0
2014-07-04 17:30:38,496 INFO [RMCommunicator Allocator] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: Going to preempt 0

日志中没有任何的错误,但是一直打印该信息,应该是RM资源分配不够。

YARN中,资源包括内存和CPU,资源的管理是由ResourceManager和NodeManager共同完成,ResourceManager负责所有节点资源的管理和调度。NodeManager负责进程所在结点资源的分配和隔离。ResourceManager将某个NodeManager上资源分配给任务。下面详细介绍其中的一些重要参数。

yarn.nodemanager.resource.memory-mb

每个节点可用的内存,单位是mb,默认是8G,用于供NodeManager分配的。我出现的问题是资源分配太小,只有1G。

yarn.scheduler.minimum-allocation-mb

单个任务可申请的最小内存,默认是1024mb,稍微大一点,避免小的资源浪费情况,我本机资源少,所以给他分配了512mb, 失败的原因也就是这个分配过大。

yarn.scheduler.maximum-allocation-mb

单个任务可申请的最大内存,默认是8192mb. 如果是spark任务的话,这里调大吧

mapreduce.map.memory.mb

每个map任务的物理内存限制,应该大于或等于yarn.scheduler.minimum-allocation-mb

mapreduce.reduce.memory.mb

每个reduce任务的物理内存限制

mapreduce.map.java.opts

每个map进程的jvm堆的大小

mapreduce.reduce.java.opts

每个reduce进程的jvm堆的大小


每个节点可以运行map数和redue输,由yarn.nodemanager.resource.memory-mb除于mapreduce.map.memory.mb和mapreduce.reduce.memory.mb得到


http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-memory-cpu-scheduling/   还有一些参数参考这里