Yarn是为了解决MRv1中JobTracker负载过重,而设计的第二代MR运行架构。 yarn是个master/slave结构,master节点运行Resourcemanager,slave节点运行nodemanager。
- RM主要有两个组件:资源调度器(scheduler)和应用程序管理器(Applications Manager) scheduler主要进行资源调度,不进行任何与应用程序相关的动作,主要包括Capacity Scheduler和Fair scheduler。 ASM:主要负责提交、启动以及监控每个application的application master
- AM 每个作业都有一个application master来监控和管理自己的所有任务,具备的功能包括: a,与RM交互获取任务运行的资源; b,与NM交互提交任务、监控任务运行情况等
- NM 一般集群中每个节点启动一个NM,NM不但向RM发送心跳,汇报本节点的资源使用情况;并与AM交互,接收并处理来自AM的所有关于container的请求。
- container 一个逻辑概念,抽象的资源表示形式,可以代表一组多维度资源,目前yarn主要支持cpu和内存。
yarn工作流程
向yarn提交一个应用程序后,yarn主要分为两个步骤:第一步先启动application master;第二步由AM启动并监控本application中的所有任务,直到完成。
- 向yarn提交应用程序,包含application master程序,以及启动am的命令;
- RM为AM分配一个container,并与NM通信启动container来运行这个AM(这是唯一一个由RM和NM通信启动的container,其它的container都是AM与NM通信启动)
- AM启动之后,主动向RM发送心跳注册自己,此时RM可以监控这个AM,我们可以在yarn web页面上看到这个任务;
- AM轮询方式向RM申请和获取资源;
- AM获取到资源后,与NM通信要求启动任务;
- NM设置任务运行环境,启动任务;
- 各个NM上的任务,不断通过RPC向AM发送心跳,汇报自己的状态和进度;
- 任务全部完成后,AM向RM注销自己。