Yarn是Hadoop2.0引入的集群资源管理系统。用户可以将各种服务框架部署在Yarn上,由Yarn进行统一地管理和资源分配。
Yarn架构组成ResourceManager、NodeManager、ApplicationMaster、Container
ResourceManager
- ResourceManager 通常在独立机器上以后台进程的形式运行,它是整个集群资源的主要协调者和管理者。
- ResourceManager 负责给用户提交的应用程序分配资源,根据程序优先级队列容量、ACLs、数据位置等信息,做出决策,然后以共享的、安全的、多租户的方式制定分配策略,调度集群资源
NodeManager
NodeManager是Yarn集群中的每个具体节点的管理者。主要负责该节点内所有容器的生命周期的管理,监视资源和跟踪节点健康。
- 启动时向 ResouceManager注册并定时发送心跳消息,等待ResourceManager的指令。
- 维护Container的生命周期,监控Container的资源使用情况。
- 管理任务运行时的相关依赖,根据ApplicationMaster的需要,在启动Container之前将需要的程序及其依赖拷贝到本地
ApplicationMaster
在用户提交一个应用程序时,Yarn会启动一个轻量级的进程ApplicationMaster。ApplicationMaster负责协调来自ResourceManager的资源,并通过NodeManager监视容器内资源的使用情况,同时还负责任务的监控与容器。
- 根据应用程序的运行状态决定计算资源需求
- 向ResouceManager申请调度资源,监控申请的资源的使用情况
- 跟踪任务状态和进度,报告资源的使用情况和应用的进度信息
- 负责任务的容错。
Container
Container是Yarn中的资源抽象,它封装了某个节点尚的多维度资源,如内存、CPU、磁盘、网络等。当AM向RM请资源时,RM为AM返回的资源使用Cotainer表示的。Yarn为每个人物分配一个Container,该任务只能使用该Container中描述的资源。ApplicationMaster可在Container内运行任何类型的任务。MapReduce ApplicationMaster请求一个容器来启动Map或reduce任务。而Giraph ApplicationMaster请求一个容器来运行Giraph任务。
Yarn工作原理
1.Client提交作业,ResouceManager处理
2.ResouceManager选择一个Node Manager,启动一个Container并运行ApplicationMaster实例
3.ApplicationMaster根据实际需要向ResourceManager请求更多的Container资源。
4.ApplicationMaster 通过获取到的资源执行分布式计算
1.作业提交
client调用job.waitForCompletion方法,向整个集群提交作业。新的作业由资源管理器分配。作业的client核实作业的输出,计算输入的split,将作业的资源拷贝给HDFS。最后通过调用资源管理器的submitApplication()来提交作业
- 作业初始化
资源管理器收到submitApplication来的请求,将该请求发给调度器,调度器分配container容器,然后资源管理器在container内启动应用管理器进程。- 任务分配
如果作业很小,应用管理器会选择在自己的JVM中运行任务。如果不是小作业,那么向应用管理器请求container来运行所有的map和reduce任务。这些请求通过心跳来传输,包括每个map任务的数据位置,存放输入split的主机名和机架。调度器利用这些尽量将任务合理分配给存储数据的节点,或者分配给和存放输入split的节点相同机架的节点- 任务运行
当一个任务由资源管理器的调度器分配给一个container,应用管理器通过联系节点管理器来启动container。任务由一个主类为YarnChild的Java应用执行,在运行任务之前首先本地化任务需要的资源。YarnChild运行一个在专用的JVM中,但是Yarn不支持JVM重用。
- 进度和状态更新
Yarn中的任务将其进度和状态返回给应用管理器,客户端每秒向应用管理器请求进度更新,展示给用户。- 作业完成
除了向应用管理器请求作业进度外,客户端每5分钟都会通过调用waitForCompletion()来检查作业是否完成,时间间隔可以通过mapreduce.client.completion.polinterval来设置/作业完成之后,应用管理器和container会清理工作状态,OutputCommiter的作业清理方法也会被调用。作业的信息会被作业历史服务器存储以备之后用户核查。
网友评论