hadoop yarn配置

关于ResourceManager的高可用可以查看参考文档,也可参考这个配置


概述

更多关于yarn的架构和工作原理的细节,可以查看:参考文档
关于hadoop、yarn、mapreduce、spark之间的关系,可以用一句话来概括,hadoop提供了分布式文件系统hdfs,yarn提供了集群管理功能,可以管理MapReduce、Spark、Tez、storm等计算框架。
下面介绍yarn中的组件。


RM

ResourceManager(简称RM)分为Scheduler和ApplicationsManager(简称ASM),其中:

  • ASM
    • 接收客户端发送来的应用程序提交请求
    • 根据客户端的设置,获取用于运行ApplicationMaster(简称AM)的container(也就是说AM和普通任务一样都运行在NodeManager(简称NM)的container中
    • 获取到container后,在container上启动AM。同时ASM还负责监控AM的状态,并在AM失败时,重启它
  • Scheduler
    • 接收AM的通信
      • AM通过心跳告知RM,AM还活着,同时心跳中还会包含任务的进度信息
      • AM根据任务需求,向RM申请containers,需要注意的是:Scheduler根据集群容量、优先级、调度策略等,给所有正在运行的AM同时分配资源。因此对某个AM来说,RM不一定立刻给它分配containers,并且也不是一下子就把AM需要的所有的containers都分配给它
    • Scheduler是一个可插拔的组件,yarn提供了很多可用的调度器,比如Capacity Scheduler、Fair Scheduler等

AM

AM在申请到containers之后,会与NM通信启动任务。AM既可以通过RM的心跳回复获取containers完成情况,也可以直接通过NM来主动监测启动的containers,在任务执行失败时,AM负责重启它们。yarn自带了两个AM,其中一个是用于演示AM编写方法的实例程序distributedshell,另外一个是运行MapReduce应用程序的AM—MRAppMaster。

综上所述,RM负责监控AM,AM负责监控任务;AM完成任务的容错,RM完成应用程序的调度。因此可以说,yarn把MapReduce 1.0中的JobTracker分为了RM和AM两部分。


NM

NM负责管理单个节点上的资源,一方面它会定时向RM汇报本节点的资源使用情况和各个container的运行状态,另外一方面它接收并处理来自AM的Container启动/停止等各种请求。


Container

Container是yarn中资源分配的基本单位,Container抽象的封装了多个维度上的资源,比如:CPU、内存、磁盘、网络等。与MapReduce 1.0中的map slot 和 reduce slot不同,Container是动态的;目前yarn只支持CPU和内存两种资源,且使用cgroups进行资源隔离。


配置

通信相关的配置

  • yarn.resourcemanager.address
    ASM的地址,客户端通过该地址向RM提交、追踪或杀死应用程序
    默认值:${yarn.resourcemanager.hostname}:8032
  • yarn.resourcemanager.scheduler.address
    Scheduler的地址,AM通过该地址向RM申请或释放资源
    默认值:${yarn.resourcemanager.hostname}:8030
  • yarn.resourcemanager.resource-tracker.address
    NM通过该地址向RM发送心跳和领取任务等
    默认值:${yarn.resourcemanager.hostname}:8031
  • yarn.resourcemanager.webapp.address
    RM的web UI的地址,用户可以通过该地址查看集群信息
    默认值:${yarn.resourcemanager.hostname}:8088

通常情况下,只要配置好 yarn.resourcemanager.hostname 属性即可。如果什么都没配置的话,可能会因为这些地址使用127.0.0.1,而导致Client、AM、NM无法与RM进行通信。

Container相关的配置

  • yarn.scheduler.minimum-allocation-mb
    单个Container的最小内存
    默认值:1024
  • yarn.scheduler.maximum-allocation-mb
    单个Container的最大内存
    默认值:8192
  • yarn.scheduler.minimum-allocation-vcores
    单个Container的最小虚拟CPU数量
    默认值:1
  • yarn.scheduler.maximum-allocation-vcores
    单个Container的最大虚拟CPU数量
    默认值:32

NM相关的配置

  • yarn.nodemanager.resource.memory-mb
    NM的总的可用物理内存
    默认值:8192
  • yarn.nodemanager.resource.cpu-vcores
    NM的总的可用虚拟CPU数量
    默认值:8

  • yarn.app.mapreduce.am.resource.mb
    MR AM所使用的内存量
    默认值:1536

  • yarn.app.mapreduce.am.resource.cpu-vcores
    MR AM所使用的虚拟CPU数量
    默认值:1

NM是运行在集群中的节点上的,所以NM的内存和虚拟CPU数量,不应该高于其所在节点的物理内存和CPU核心数;Container是NM管理的(一个NM管理多个Container),所以Container的最大内存和最大虚拟CPU数量,不应该超过NM的内存和虚拟CPU数量;AM是运行在Container中的,所以AM所使用的内存和虚拟CPU数量,不应该超过Container的最大内存和最大虚拟CPU数量。

MapReduce的一些配置(mapred-site.xml)

  • mapreduce.map.java.opts
  • mapreduce.map.memory.mb
  • mapreduce.reduce.java.opts
  • mapreduce.reduce.memory.mb
    在hadoop2及以上版本中,map、reduce任务都是运行在container中的,mapreduce.{map|reduce}.memory.mb用来设置container的内存大小。如果container的内存超限,会被yarn杀死。为了执行map、reduce任务,yarn会在container中启动一个JVM,mapreduce.{map|reduce}.java.opts用来设置container启动的jvm参数,通过设置Xmx来设置map 或者reduce task的最大堆内存。理论上,{map|reduce}.java.opts设置的最大堆内存要比{map|reduce}.memory.mb小
  • mapreduce.task.io.sort.mb
    map任务的环形缓冲区的大小
    默认值:100
  • mapreduce.framework.name
    mapreduce的运行模式,可以是local、yarn、yarn-tez等

其它常用配置

  • yarn.nodemanager.aux-services
    NM上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序
    默认值:“”
  • yarn.nodemanager.pmem-check-enabled
    是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉
    默认值:true
  • yarn.nodemanager.vmem-check-enabled
    是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉
    默认值:true
  • yarn.resourcemanager.scheduler.class
    启用的资源调度器主类。目前可用的有FIFO、Capacity Scheduler和Fair Scheduler
    默认值: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
    在使用Capacity Scheduler的时候,需要注意capacity-scheduler.xml中的yarn.scheduler.capacity.maximum-am-resource-percent属性,该属于用于控制集群中有多少资源可以用于运行AM,进而控制集群中并发运行的应用的数量。当集群中的资源乘以这个百分比之后,连一个AM都满足不了的话,提交的应用程序,就会一直处于ACCEPTED状态

参考文档

感谢浏览tim chow的作品!

如果您喜欢,可以分享到: 更多

如果您有任何疑问或想要与tim chow进行交流

可点此给tim chow发信

如有问题,也可在下面留言: