Yarn 工作流
你的项目在引入了包管理器的同时,也引入了一套新的围绕着依赖项开发的工作流程。Yarn尽力不改变你的工作流程,并使流程中的每一步都简单明了。
关于基本工作流你应该知道几个简单的事:
Yarn 工作流程图
当用户给Yarn提交了一个应用程序后,Yarn的主要工作流程如下图:
Yarn流程主要分为以下8个步骤:
步骤1:
用户向Yarn提交应用程序,其中包括用户程序、相关文件、启动ApplicationMaster命令、ApplicationMaster程序等。
步骤2:
ResourceManager为该应用程序分配第一个Container,并且与Container所在的NodeManager通信,并且要求该NodeManager在这个Container中启动应用程序对应的ApplicationMaster。
步骤3:
ApplicationMaster首先会向ResourceManager注册,这样用户才可以直接通过ResourceManager查看到应用程序的运行状态,然后它为准备为该应用程序的各个任务申请资源,并监控它们的运行状态直到运行结束,即重复后面4~7步骤。
步骤4:
ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
步骤5:
一旦ApplicationMaster申请到资源后,便会与申请到的Container所对应的NodeManager进行通信,并且要求它在该Container中启动任务。
步骤6:
任务启动。NodeManager为要启动的任务配置好运行环境,包括环境变量、jar包、二进制程序等,并且将启动命令写在一个脚本里,通过该脚本运行任务。
步骤7:
各个任务通过RPC协议向其对应的ApplicationMaster汇报自己的运行状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以再任务运行失败时重启任务。
步骤8:
应用程序运行完毕后,其对应的ApplicationMaster会向ResourceManager通信,要求注销和关闭自己。
这个需要注意的是在整个工作流程当中,ResourceManager和NodeManager都是通过心跳保持联系的,NodeManager会通过心跳信息向ResourceManager汇报自己所在节点的资源使用情况。