Yarn的基本架构

2022-08-31 12:47:35

基本流程

1.应用程序通client类向ResourceManager提交程序,Application运行所需要的入口类,出口类,运行的命令,运行所需要的cpu资源和内存资源,jar包资源。

2.ResourceManager通过内部的调度器,去集群中寻找资源,找到资源后与NodeManager进行通信,去启动相应的ApplicationMaster,AM会按照事先的规划将任务切分为许多的task任务。

3.ApplicationMaster之后向ResourceManager进行申请资源,RM会将资源进行动态的分配。

4.ApplicationMaster获得资源后会再将资源进一步分配给内部的task.

5.之后,ApplicationMaster会向NodeManager进行请求,让NM给启动起来Task,NM会把Task封装到Container中允许。

在这里插入图片描述

ResourceManager

整个集群只有一个,负责集群资源的统一管理和调度。

  • 处理客户端请求
  • 启动监控ApplicationMaster
  • 监控NodeManager
  • 资源分配与调度

在这里插入图片描述

用户交互

YARN分别针对普通用户,管理员和Web提供了三种对外服务,分别对应ClientRMService、AdminService和WebApp:

  • ClientRMService

ClientRMService是为普通用户提供的服务,它会处理来自客户端各种RPC请求,比如提交应用程序、终止应用程序,获取应用程序运行状态等。

  • AdminService

YARN为管理员提供了一套独立的服务接口,以防止大量的普通用户请求使管理员发送的管理命令饿死,管理员可通过这些接口管理集群,比如动态更新节点列表,更新ACL列表,更新队列信息等。

  • WebApp

为了更加友好地展示集群资源使用情况和应用程序运行状态等信息,YARN对外提供了一个Web 界面,这一部分是YARN仿照haml(http://haml.info/)开发的一个轻量级嵌入式Web框架。具体讨论见:https://issues.apache.org/jira/browse/MAPREDUCE-2399

NM管理

  • NMLivelinessMonitor

监控NM是否活着,如果一个NodeManager在一定时间(默认为10min)内未汇报心跳信息,则认为它死掉了,会将其从集群中移除。

  • NodesListManager

维护正常节点和异常节点列表,管理exlude(类似于黑名单)和inlude(类似于白名单)节点列表,这两个列表均是在配置文件中设置的,可以动态加载。

  • ResourceTrackerService

处理来自NodeManager的请求,主要包括两种请求:注册和心跳,其中,注册是NodeManager启动时发生的行为,请求包中包含节点ID,可用的资源上限等信息,而心跳是周期性 行为,包含各个Container运行状态,运行的Application列表、节点健康状况(可通过一个脚本设置),而ResourceTrackerService则为NM返回待释放的Container列表、Application列表等。

AM管理

  • AMLivelinessMonitor

监控AM是否活着,如果一个ApplicationMaster在一定时间(默认为10min)内未汇报心跳信息,则认为它死掉了,它上面所有正在运行的Container将被认为死亡,AM本身会被重新分配到另外一个节点上(用户可指定每个ApplicationMaster的尝试次数,默认是1次)执行。

  • ApplicationMasterLauncher

与NodeManager通信,要求它为某个应用程序启动ApplicationMaster。

  • ApplicationMasterService

处理来自ApplicationMaster的请求,主要包括两种请求:注册和心跳,其中,注册是ApplicationMaster启动时发生的行为,包括请求包中包含所在节点,RPC端口号和tracking URL等信息,而心跳是周期性 行为,包含请求资源的类型描述、待释放的Container列表等,而AMS则为之返回新分配的Container、失败的Container等信息。

Application管理

  • ApplicationACLsManager

管理应用程序访问权限,包含两部分权限:查看和修改,查看主要指查看应用程序基本信息,而修改则主要是修改应用程序优先级、杀死应用程序等。

  • RMAppManager

管理应用程序的启动和关闭。

  • ContainerAllocationExpirer

YARN不允许AM获得Container后长时间不对其使用,因为这会降低整个集群的利用率。当AM收到RM新分配的一个Container后,必须在一定的时间(默认为10min)内在对应的NM上启动该Container, 否则,RM会回收该Container。

安全管理

ResourceManage自带了非常全面的权限管理机制,主要由ClientToAMSecretManager、ContainerTokenSecretManager、ApplicationTokenSecretManager等模块完成。

资源分配

ResourceScheduler是资源调度器,它按照一定的约束条件(比如队列容量限制等)将集群中的资源分配给各个应用程序,当前主要考虑内存资源,在3.0版本中将会考虑CPU(https://issues.apache.org/jira/browse/YARN-2)。ResourceScheduler是一个插拔式模块,默认是FIFO实现,YARN还提供了Fair Scheduler和Capacity Scheduler两个多租户调度器。

参考资料:http://hortonworks.com/blog/apache-hadoop-yarn-resourcemanager/

NodeManager

整个集群存在多个,负责单节点资源管理与使用。

  • 处理来自ResourceManager的命令
  • 处理来自ApplicationMaster的命令

ApplicationMaster

每一个应用有一个,负责应用程序的管理。

数据切分,申请资源,任务监控,任务容错。

Container

对任务环境的抽象。

封装了CPU、Memory等资源的一个容器,相当于是一个任务运行环境的抽象。

Yarn的容错性

ResourceManager存在单点故障,基于Zookeeper实现HA,通常任务失败后,RM将失败的任务告诉AM,RM负责任务的重启,AM来决定如何处理失败的任务。RMAppMaster会保存已经运行完成的Task,重启后无需重新运行。

Yarn资源调度框架与调度器

Yarn采用的双层调度框架,RM将资源分配给AM,AM再将资源进一步分配给Task,资源不够时会为TASK预留,直到资源充足。在Hadoop1.0中我们分配资源通过slot实现,但是在Yarn中,直接分配资源。

资源调度器有:FIFO,Fair scheduler,Capacity scheduler

Yarn支持CPU和内存两种资源隔离,内存是决定生死的资源,CPU是影响快慢的资源,内存隔离采用的是基于线程监控和基于Cgroup的方案。

本文到此结束,感谢阅读!

  • 作者:打酱油的葫芦娃
  • 原文链接:https://blog.csdn.net/WenWu_Both/article/details/123296452
    更新时间:2022-08-31 12:47:35