Apache Hadoop YARN

  • YARN架构结构

    yarn是基于Master/Slave模式的分布式架构,yarn的架构结构如图:

Apache Hadoop YARN

【1】:client,可以理解为编写的大数据程序。

【2】:ResourceManager(RM),主要有两个组件,Scheduler和ApplicationManager(AM)。2.4.0版本后新增了RM HA特性。
Scheduler:调度器,负责将内存、cpu、磁盘、网络IO分配给各个NM。
ApplicationManager,负责client任务的提交,并把任务分发给各个NM。

【3】:NodeManager(NM),监控ApplicationMaster和Container的使用情况,并将节点状态发送给RM

【4】:ApplicationMaster(AM):应用集群中的master,HA机制,保证可用性。eg,spark cluster-yarn模式下的master集群。

【5】:Container:容器,程序运行的容器。

  • YARN运行过程

  • yarn cluster模式

    Apache Hadoop YARN

    【1】:客户端提交application到RM,RM判断资源(CPU、内存)需要使用状况,配置文件的读取,设置application名称。

    【2】:RM选取某一个NodeManager启动AppMaster(AM),AppMaster 初始化SparkContext。该NodeManager为Driver。

    【3】:AppMaster向RM申请资源(申请container的内存大小等),并在每个NodeManager上启动Container容器(执行分布式程序),如果是spark任务,则Container里面初始化Executer。yarn中的Container和spark中的executer可以理解为等同。

    【4】:AppMaster里的sparkContext与Container通信可以采用akka

    【5】:AppMaster所在的机器就是driver,application提交到RM上,client就可以关闭了。

  • yarn client模式
    Apache Hadoop YARN

【1】:客户端初始化SparkContext,客户端就是driver。

【2】:客户端提交application到RM,RM判断资源(CPU、内存)需要使用状况,配置文件的读取,设置application名称。

【3】:RM选取某一个NodeManager启动AppMaster(AM)

【4】:AppMaster向RM申请资源,并在每个NodeManager上启动Container容器,开始默认容器数量为1个,任务执行过程中资源不足,会再次向RM申请资源,在NodeManager上启动新的Container容器。

【5】:客户端里的sparkContext与Container通信可以采用akka

  • yarn-site.xml

    ResourceManager中的配置
    yarn.scheduler.minimum-allocation-mb:(1G)单个容器可申请的最小内存
    yarn.scheduler.maximum-allocation-mb:(8G)单个容器可申请的最大内存

NodeManager中的配置
yarn.nodemanager.resource.memory-mb:(80G)yarn节点可用的最大内存,则container最大数量=80G/1G
yarn.nodemanager.vmem-pmem-ratio:默认2.1,虚拟内存率,占task所用内存的百分比???。
yarn web UI中 总核数=yarn节点最大内存节点数 总内存数=yarn节点最大核数节点数

ApplicationMaster中的配置,此处以MapReduce为例进行说明(mapred-site.xml)
mapreduce.map.memory.mb:map任务内存大小
mapreduce.reduce.memory.mb:reduce任务内存大小,默认情况下,reduce是map内存大小的2倍
两个参数值,应该在container的内存最大、最小值之间

mapreduce.map.memory.mb:和JVM相关
mapreduce.reduce.memory.mb:和JVM相关

  • yarn Scheduler类

    【1】:FairScheduler,公平调度
    单个用户对应一个队列,各个队列或者用户之间平均分配资源
    【2】:FifoScheduler,先进先出调度,
    全局一个队列,任务都进入该队列,采用先进先出的方式执行任务。
    【3】:CapacityScheduler,容量调度
    单个组织对应一个队列,一个组织中可以有多个用户,队列内部采用先进先出方式。
    各个队列设置最大、最小占用资源比例,避免各个队列彼此影响。

    参考文档:https://blog.csdn.net/nougats/article/details/71075042

  • yarn 应用

    • yarn 资源分配
      CDH中yarn对node进行系统资源分配(大约65%):eg,每个节点内存128G,yarn可使用的内存大约在80G左右,yarn.nodemanager.resource.memory-mb=80参数可以配置。如果集群内存资源紧张,可以调整此参数,但需要考虑操作系统和其他应用需要的内存。