一、YARN调优
### --- NM配置 ~~~ 可用内存 ~~~ 除分配给操作系统和其他服务的内存外,剩余资源应尽可能分配给操作系统YARN。 ~~~ 默认情况下,Map或Reduce container使用一个虚拟CPU内核和1024MB内存, ~~~ ApplicationMaster使用1536MB内存。 yarn.nodemanager.resource.memory-mb // 默认是8192
### --- CPU虚拟核数 ~~~ 建议在逻辑核数1中设置此配置.5~2倍之间。如果CPU计算能力要求不高, ~~~ 逻辑可以配置两倍CPU。 ~~~ 该节点上YARN可用的虚拟CPU默认,默认为8。 ~~~ 目前建议将该值设值为逻辑CPU核数的1.5~2倍之间 yarn.nodemanager.resource.cpu-vcores
二、Container启动模式
### --- Container启动模式 ~~~ YARN的NodeManager提供2种Container启动模式。 ~~~ 默认,YARN为每一个Container启动一个JVM,JVM资源共享在过程中无法实现, ~~~ 导致资源本地化的时间成本较大。针对启动时间较长的问题, ~~~ 基于线程资源本地化的新启动模式可以有效改进container启动效率。 ~~~ 设置为“org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor”, ~~~ 则每次启动container实现资源本地化将启动一个线程。 ~~~ 该模式下,启动时间较短,但无法做到资源(CPU、内存)隔离。 ~~~ 设置为“org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor” , ~~~ 则每次启动container一个开始一个JVM实现资源本地化的过程。 ~~~ 该模式下,启动时间较长,但可以提供较好的资源(CPU、内存)隔离能力。 yarn.nodemanager.container-executor.class
### --- AM调优 ~~~ 运行的大任务,map总数达到数万,任务失败, ~~~ 发现是ApplicationMaster(以下简称AM)反应缓慢,最终加班失败。 ~~~ 失败原因是Task当数量变多时,AM管理对象也线性增长,因此需要更多的内存来管理。 ~~~ AM默认内存大小为1.5GB。
### --- 建议: ~~~ 任务增加任务数量AM内存 yarn.app.mapreduce.am.resource.mb