首页 > 代码库 > 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/ 还有一些参数参考这里