Yet Another Resource Negotiator,另一种资源协调者,简称YARN。基本思想是将资源管理和作业调度/监视的功能拆分为单独的守护进程。其想法是拥有一个全局ResourceManager(RM)和每个应用程序的ApplicationMaster(AM)。可以支持单个作业,也可以支持多个作业的DAG。被称为另一种资源协调者,那就证明有一种比YARN更早的资源协调者,它就是JobTracker,JobTracker同时具备资源管理和作业调度功能,是强耦合关系。因此出现了YARN来代替它。
我们还是跟着官网来学习:https://hadoop.apache.org/docs/r3.3.6/hadoop-yarn/hadoop-yarn-site/YARN.html
架构图如下:
我们根据官方的架构图来看下作业的运行流程:
1、ResourceManager和NodeManager在事先配置好的节点启动(yarn-site.xml中的yarn.resourcemanager.hostname指定了ResourceManager在哪台节点启动,slaves中的host列表指定了NodeManager在哪些节点启动)
2、NodeManager负责监控各自节点资源使用情况(cpu、内存、磁盘、网络),并将其报告给ResourceManager/Scheduler。ResourceManager是在系统中的所有应用程序之间仲裁资源的最终权威。
YARN正常启动后开始处理作业的请求:
1、客户端提交作业到ResourceManager,ResourceManager在接收各个NodeManager上报各自资源情况时挑一个节点启动一个Container,并在里面启动ApplicationsMaster。
2、ApplicationsMaster与ResourceManager协商需要请求的资源,ResourceManager在下一次接收各个节点NodeManager上报各自资源情况时在各个节点启动Container,ApplicationsMaster与这些Container建立连续,跟踪其状态并监控进度。
3、客户端将作业提交给ApplicationsManager,ApplicationsManager协商用于执行该作业的第一个容器,并在这个容器上启动ApplicationMaster。作业失败时也负责重启ApplicationMaster容器的服务。
4、ApplicationMaster连接并向ResourceManager注册,并定期向ResourceManager发送检测信号以通知Resource Manager它已启动并处于活动状态。
5、ApplicationMaster向ResourceManager请求所需数量的容器,并使用ResourceRequest和必要的资源规范,如节点位置、计算(内存/磁盘/cpu)资源要求。
6、ResourceManager对其进行进行响应,该响应将新分配的容器集、已完成的容器以及可用资源的当前状态通知ApplicationMaster。
7、ApplicationMaster对所分配的容器设置必要的启动上下文,以指定分配的容器id、可执行文件所需的本地资源、要为可执行文件设置的环境、要执行的命令、并向ContainerManagementProtocol提交StartContainerRequest,以在给定的分配容器上启动和执行定义的命令。
8、ApplicationMaster向ResourceManager发起查询,以获取已完成容器的更新。同时也对已启动的容器进行监控。
9、作业完成后ApplicationMaster必须向ResourceManager发送已完成的通知。
10、ResourceManager对资源进行清理。