yarn产生的背景

mapreduce本身存在一些问题

  • jobTracker单点故障问题,如果Hadoop集群的jobTracker挂掉,则整个分布式集群都不能使用了
  • jobTracker承受的访问压力大,影响系统的性能,扩展性
  • 不支持mapreduce之外的计算框架,比如storm、spark、flink等

    YARN定义

    yarn是hadoop2.0版本新引入的资源管理系统
    十七、yarn的工作原理 - 图1

    YRAN的基本架构

    十七、yarn的工作原理 - 图2

yarn的两个组件

ResourceManager

负责整个集群的资源管理和调度
处理客户端请求
启动和监控ApplicationMaster
监控nodemanager

NodeManager

管理yarn集群中的每个节点
管理单个节点上的资源
处理来自ResourceManager的命令
处理来自ApplicationMaster的命令
ApplicationMaster

工作模式

yarn的工作模式属于master/slave模式,ResourceManager是yarn的master,NodeManager是yarn中的slave,ApplicationMaster则相当于二者之间的媒介,ResourceManager下达命令给ApplicationMaster,ApplicationMaster将命令传输给NodeManager执行

ApplicationMaster:负责应用程序相关事务
主要作用:负责数据的切分,为应用程序申请资源并分配给内部的任务、任务的监管与容错
Continer
对多任务运行环境的抽象,包括cpu、内存等多维度资源以及环境变量,启动命令等任务的相关环境

YARN的工作流程

十七、yarn的工作原理 - 图3

  • mapreduce程序提交到客户端所在的节点。
  • Yarnrunner 向 Resourcemanager 申请一个 Application。
  • Resourcemanager 将该应用程序的资源路径(存储切片、jar程序的位置)和jobId返回给 yarnrunner。
  • 该程序将运行所需资源提交到 HDFS 上。
  • 程序资源提交完毕后,申请运行 mrAppMaster。
  • RM 将用户的请求初始化成一个 task。
  • 其中一个 NodeManager 领取到 task 任务。
  • 该 NodeManager 创建容器 Container,并产生 MRAppmaster。
  • Container 从 HDFS 上拷贝资源到本地。
  • MRAppmaster 向 RM 申请运行 maptask 资源。
  • RM 将运行 maptask 任务分配给另外两个 NodeManager,另两个 NodeManager 分

别领取任务并创建容器。

  • MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager

分别启动 maptask,maptask 对数据分区排序。

  • MrAppMaster 等待所有 maptask 运行完毕后,向 RM 申请容器,运行 reduce task。
  • reduce task 向 maptask 获取相应分区的数据。
  • 程序运行完毕后,MR 会向 RM 申请注销自己。

十七、yarn的工作原理 - 图4