Yarn 面试题总结

Yarn 的基本架构

从 YARN 的架构图来看,它主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等组件组成。

  1. ResourceManager:它控制整个集群并管理应用程序向基础计算资源的分配。ResourceManager 将各个资源部分(计算、内存、带宽等)精心安排给基础NodeManager(YARN 的每节点代理)。ResourceManager还与 ApplicationMaster 一起分配资源,与NodeManager 一起启动和监视它们的基础应用程序。在此上下文中,ApplicationMaster 承担了以前的 TaskTracker 的一些角色,ResourceManager 承担了 JobTracker 的角色。

    (1)处理客户端请求;
    (2)启动或监控 ApplicationMaster;
    (3)监控 NodeManager;
    (4)资源的分配与调度。

  2. NodeManager:NodeManager管理一个YARN集群中的每个节点。NodeManager提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。MRv1通过插槽管理Map和Reduce任务的执行,而NodeManager 管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。

    (1)管理单个节点上的资源;
    (2)处理来自 ResourceManager 的命令;
    (3)处理来自 ApplicationMaster 的命令。

  3. ApplicationMaster:ApplicationMaster管理一个在 YARN 内运行的应用程序的每个实例。ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)。

    (1)负责数据的切分;
    (2)为应用程序申请资源并分配给内部的任务;
    (3)任务的监控与容错。

  4. Container:对任务运行环境进行抽象,封装CPU、内存等多维度的资源以及环境变量、启动命令等任务运行相关的信息。

Yarn 的工作机制

(1)MR程序提交到客户端所在的节点。
(2)YarnRunner向ResourceManager申请一个Application。
(3)RM将该应用程序的资源路径返回给YarnRunner。
(4)该程序将运行所需资源提交到HDFS上。
(5)程序资源提交完毕后,申请运行mrAppMaster。
(6)RM将用户的请求初始化成一个Task。
(7)其中一个NodeManager领取到Task任务。
(8)该NodeManager创建容器Container,并产生MRAppmaster。
(9)Container从HDFS上拷贝资源到本地。
(10)MRAppmaster向RM 申请运行MapTask资源。
(11)RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(12)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
(13)MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
(14)ReduceTask向MapTask获取相应分区的数据。
(15)程序运行完毕后,MR会向RM申请注销自己。

作业提交过程之 Yarn

(1)作业提交

第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
第2步:Client向RM申请一个作业id。
第3步:RM给Client返回该job资源的提交路径和作业id。
第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。
第5步:Client提交完资源后,向RM申请运行MrAppMaster。

(2)作业初始化

第6步:当RM收到Client的请求后,将该job添加到容量调度器中。
第7步:某一个空闲的NM领取到该Job。
第8步:该NM创建Container,并产生MRAppmaster。
第9步:下载Client提交的资源到本地。

(3)任务分配

第10步:MrAppMaster向RM申请运行多个MapTask任务资源。
第11步:RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。

(4)任务运行

第12步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
第13步:MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
第14步:ReduceTask向MapTask获取相应分区的数据。
第15步:程序运行完毕后,MR会向RM申请注销自己。

(5)进度和状态更新

YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。

(6)作业完成

除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

作业提交流程之 MapReduce

Hadoop 调度器

FIFO(先进先出)、Capacity Scheduler(容量调度器)和Fair Scheduler(公平调度器)。Hadoop2.7.2默认的资源调度器是 Capacity Schedule。

  1. FIFO:按照先进先出的原则执行。

  2. Capacity Scheduler:

    (1)支持多个队列,每个队列可配置一定的资源量,每个队列内部使用 FIFO 调度。

    (2)为了防止同一个用户的作业独占队列中的资源,该调度器会对同一个用户提交作业所占的资源进行限定。

    (3)首先,计算每个队列正在运行的任务数与其应该分得的资源之间的比值,选择一个比值最小(最闲)的队列。

    (4)其次,按照作业优先级和作业提交顺序,同时考虑用户资源量限制和内存限制对队列内任务排序。

    (5)不同队列同时按照任务的先后顺序依次执行。

  3. Fair Scheduler:

    支持多队列多用户,每个队列内的资源量可以配置,同一个队列内的作业公平共享队列中的所有资源。

MapReduce 2.0 容错性

  1. MRAppMaster容错性

一旦运行失败,由 YARN 的 ResourceManager 负责重新启动,最多重启次数可由用户设置,默认是 2 次。一旦超过最高重启次数,则作业运行失败。

  1. Map Task/Reduce Task

Task 周期性向 MRAppMaster 汇报心跳;一旦 Task 挂掉,则 MRAppMaster 将为之重新申请资源,并运行之。最多重新运行次数可由用户设置,默认 4 次。

任务的推测执行

  1. 作业完成时间取决于最慢的任务完成时间

一个作业由若干个 Map 任务和 Reduce 任务构成。因硬件老化、软件 Bug 等,某些任务可能运行非常慢,所以整个任务的完成时间取决于最慢的那个任务。

  1. 推测执行机制

一旦发现某个任务严重拖后腿(远低于所有任务的平均速度),则为拖后腿的任务启动一个备份任务,两个任务同时执行,谁先运行完就采用谁的结果。

  1. 不能启用推测执行机制情况

    (1)任务间存在严重的负载倾斜;
    (2)特殊任务,比如任务向数据库中写数据。

  2. 算法原理

假设某一时刻,任务 T 的执行进度为 progress,则可通过一定的算法推测出该任务的最终完成时刻 estimateEndTime。另一方面,如果此刻为该任务启动一个备份任务,则可推断出它可能的完成时刻estimateEndTime,于是可得出以下几个公式:

estimateEndTime = estimatedRunTime + taskStartTime
estimatedRunTime = (currentTimestamp - taskStartTime) / progress
estimateEndTime = currentTimestamp + averageRunTime

其中,currentTimestamp 为当前时刻;taskStartTime 为该任务的启动时刻;averageRunTime为已经成功运行完成的任务的平均运行时间。这样,MRv2 总是选择(estimateEndTime- estimateEndTime)差值最大的任务,并为之启动备份任务。为了防止大量任务同时启动备份任务造成的资源浪费,MRv2为每个作业设置了同时启动的备份任务数目上限。

推测执行机制实际上采用了经典的算法优化方法:以空间换时间,它同时启动多个相同任务处理相同的数据,并让这些任务竞争以缩短数据处理时间。显然,这种方法需要占用更多的计算资源。在集群资源紧缺的情况下,应合理使用该机制,争取在多用少量资源的情况下,减少作业的计算时间。

点个赞呗:程序员虾说 » Yarn 面试题总结

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

请作者喝杯咖啡~

支付宝扫一扫打赏

微信扫一扫打赏