YARN框架详解
YARN是什么
The fundamental(定义) idea of YARN is to split(分开) up the functionalities(功能) of resource management and job scheduling/monitoring(进程调度) into separate(独立) daemons(守护进程). The idea is to have a global ResourceManager (RM) and per-application ApplicationMaster (AM). An application is either a single job or a DAG(有向无环图(Directed Acyclic Graph)) of jobs.
ResourceManager
全局的资源管理器,整个集群只有一个,负责集群资源的统一管理和调度分配。
*处理客户端请求*启动/监控ApplicationMaster*监控NodeManerger*资源分配与调度
NodeManager
整个集群有多个,负责单个节点的资源管理和使用
*单个节点上的资源管理和任务管理*处理来自ResourceManeger的命令*处理来自ApplicationMaster的命令
NodeManager管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源
定时向ResourceManager汇报本节点上的资源使用情况和各个Container的运行情况ApplicationMaster
管理一个在YARN内运行的应用程序的每个实例
*为应用程序申请资源,进一步分配给内部任务*任务监控与容错
负责协调来自ResourceManager的资源,并通过NodeManager监控容器的执行和资源使用(CPU、内存等的资源分配)
Container
YARN中的资源抽象,封装某个节点上多维度资源,如内存、CPU、磁盘、网络等。当ApplicationManager向ResourceManager申请资源时便是用的Container表示的
YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源*对任务运行环境的抽象*描述一系列信息*任务运行资源(节点、内存、CPU)*任务启动命令*任务运行环境
资源的管理
(资源:CPU、内存和IO,YARN支持CPU和内存的调度,内存的多少会决定任务的生死,CPU仅仅决定了任务运行速度)
资源的调度和隔离是YARN作为一个资源管理系统,最重要和最基础的两个功能。资源调度由ResourceManager完成,而资源的隔离由各个NodeManager实现。资源调度
ResourceManager将某个NodeManager上资源分配给任务。
资源隔离
NodeManager需按要求为任务提供相应的资源,甚至保证这些资源具有独占性,为任务运行提供基础的保证