
# YARN应用开发简介
#### 简介
Yarn是一个分布式的资源管理系统，用于提高分布式的集群环境下的资源利用率，这些资源包括内存、I/O、网络、磁盘等。其产生的原因是为了解决原MapReduce框架的不足。最初MapReduce的committer还可以周期性的在已有的代码上进行修改，可是随着代码的增加以及原MapReduce框架设计的不足，在原MapReduce框架上进行修改变得越来越困难，所以MapReduce的committer决定从架构上重新设计MapReduce，使下一代的MapReduce(MRv2/Yarn)框架具有更好的扩展性、可用性、可靠性、向后兼容性和更高的资源利用率，以及能支持除了MapReduce计算框架外的更多的计算框架。
#### 基本概念
- **ResourceManager（RM）**
  RM是一个全局的资源管理器，负责整个系统的资源管理和分配。它主要由两个组件构成：调度器（Scheduler）和应用程序管理器（Applications Manager，ASM）。
  
- **ApplicationMaster（AM）**
  用户提交的每个应用程序均包含一个AM，主要功能包括：
  - 与RM调度器协商以获取资源（用Container表示）。
  
  - 将得到的资源进一步分配给内部任务。
  
  - 与NM通信以启动/停止任务。
  
  - 监控所有任务的运行状态，并在任务运行失败时重新为任务申请资源以重启任务。
   
- **NodeManager（NM）**
  NM是每个节点上的资源和任务管理器，一方面，它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态；另一方面，它会接收并处理来自AM的Container启动/停止等各种请求。
  
- **Container**
  Container是YARN中的资源抽象，它封装了某个节点上的多维度资源，如内存、CPU、磁盘、网络等，当AM向RM申请资源时，RM为AM返回的资源便是用Container表示的。
  
 
