【大数据】YARN知识点简介

版权声明:本文为博主原创文章,如需转载,请注明出处: https://blog.csdn.net/MASILEJFOAISEGJIAE/article/details/89814315

系列文章:
【大数据】Hadoop知识点简介
【大数据】YARN知识点简介
【大数据】Spark知识点简介

一、YARN产生背景

  1. MapReduce 1.x存在的问题

    主节点JobTracker带多个干活的从节点TaskTracker,典型的一对多架构。客户端先提交MapReduce作业到JobTracker,然后JobTracker再进行task的调度,调度完了之后,作业会分发到各个TaskTracker中执行,可见图中的TaskTracker各自执行2个Map任务和1个Reduce任务,此外,TaskTracker通过心跳来告诉JobTracker自己的健康状况。
    这种单点架构是有风险的,JobTracker同时负责资源管理和任务调度,万一JobTracker挂了,整个MapReduce都会挂掉。
  2. 资源利用率低下和运维成本太高

    在没有YARN的时候,一个集群负责一个计算框架,例如Hadoop集群只能运行MapReduce作业,要使用Spark的话,就要用另外一个Spark集群,大大增加了运维成本。此外,如上图所示,多个集群的总利用率不高,会有空闲时段。

二、YARN的作用

如图所示,底层是HDFS 2.x作为分布式存储系统,上面所有不同的应用,例如Spark,都可以跑在YARN之上。好处就是,数据可以存放在同一个集群之上,所有资源由YARN管理,其他计算框架可以共享集群资源,实现资源按需分配,从而提升资源利用率。


三、YARN架构

简写:
RM(ResourceManager)
NM(NodeManager)
AM(ApplicationMaster)

1. Client

客户端负责给RM提交请求,也就是提交一个启动/杀死作业的请求到RM。

2. ResourceManager

负责整个集群的资源管理和调度。通常一个集群里面,active状态的RM进程只有一个。

  1. 负责整个集群的资源管理和调度
    一个RM(主节点)会带多个NM(从节点),有点类似HDFS里面的一个NameNode带多个DataNode的架构。
  2. 处理客户端的请求
    当接收到客户端提交的请求(例如启动/杀死一个作业)之后,会找一个Container,启动一个AM。不同类型的作业,对应不同的AM。例如MapReduce作业,就会提交到一个MapReduce AM,如果是Spark作业,则会提交到一个Spark AM。
  3. 启动和监控ApplicationMaster
    RM会监控AM的执行情况,如果一个AM挂了,RM就会通知另外一个节点,单独再启动一个AM,从而实现容错。
  4. 监控NodeManager
    同时,RM会通过心跳,监控NM的状态。

3. NodeManager

负责单个结点的资源管理和task管理,一个集群中有多个NM。

  1. 定期向RM汇报情况
    定期向RM发送本节点心跳、资源的使用情况,以及Container任务的运行情况。因为RM要知道每个任务运行到哪一步,以及目前哪些节点资源不够,从而将任务分发到其他资源充足的结点。
  2. 接收并处理RM的Container启停的命令
  3. 单个结点的资源管理和task管理

4. ApplicationMaster

顾名思义,AM负责应用程序的管理。
一个作业,即一个应用,对应一个AM。
一个作业,可能会有多个Container来运行。
AM运行在Container里面。

  1. 数据拆分
    例如数据的拆分,一个文件有多大,要拆分成很多个块。
  2. 向RM申请资源
    AM会根据应用程序的规模,向RM申请资源,并分配给内部的task。这些资源最终都是运行在Container上的。
    AM使用轮询的方式,通过RPC协议,向RM申请和领取资源。
  3. 与NM通信以启停task
    task运行在Container中,AM会和NM进行交互,因为申请到资源后,会通知NM启动Container来运行作业。
  4. task的监控和容错

5. Container

  1. Container由RM分配。
  2. 所有的task都运行在Container中。
  3. Container封装了任务的描述信息,例如cpu、memory、环境变量等。

四、YARN执行流程

④. 客户端向RM提交一个MapReduce作业
⑤. 作业提交到RM之后,RM会与对应的NM通信,通知该NM为该作业分配第一个Container,因为一个作业对应一个AM,所以该Container上运行的是该MapReduce作业所对应的的AM,也就是图中所示的MR AppMaster。
⑥. NM创建Container,该Container用于运行AM
⑧. AM向RM申请并获取资源
⑨. AM申请到资源以后,和对应的NM通信,要求这些NM启动Container并运行任务
⑩. NM启动作业对应的Container并运行task

YARN的执行流程,不仅适用于MapReduce,对于Spark on YARN同样适用,只不过AM不一样而已。


参考资料:
https://developer.ibm.com/tutorials/bd-yarn-intro/
https://coding.imooc.com/class/112.html

猜你喜欢

转载自blog.csdn.net/MASILEJFOAISEGJIAE/article/details/89814315