当前位置:网站首页>Yarn的基础介绍以及job的提交流程

Yarn的基础介绍以及job的提交流程

2022-07-07 08:14:00 故事写在心里-

一、YARN的基础理论

1)关于YARN的介绍:

YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序。

2)hadoop1.x中YARN的不足:

  • JobTracker是集群的事务的集中处理,存在单点故障
  • JobTracker需要完成得任务太多,既要维护job的状态又要维护job的task的状态,造成资源消耗过多
  • 在 TaskTracker 端,用Map/Reduce Task作为资源的表示过于简单,没有考虑到CPU。内存,等资源情况,将两个需要大消耗量的Task调度到一起,很容易出现OOM。
  • 把资源强制划分为 Map/Reduce Slot,当只有 MapTask 时,TeduceSlot 不能用;当只有 ReduceTask 时,MapSlot 不能用,容易造成资源利用不足。

3)hadoop2.x中YARN的新特性:

  • MRv2 最基本的想法是将原 JobTracker 主要的资源管理和 Job 调度/监视功能分开作为两个单独的守护进程。
  • 有一个全局的ResourceManager(RM)和每个 Application 有一个ApplicationMaster(AM),Application 相当于 MapReduce Job 或者 DAG jobs。ResourceManager和 NodeManager(NM)组成了基本的数据计算框架。ResourceManager 协调集群的资源利用,任何 Client 或者运行着的 applicatitonMaster 想要运行 Job 或者 Task 都得向 RM 申请一定的资源。ApplicatonMaster 是一个框架特殊的库,对于 MapReduce 框架而言有它自己的 AM 实现,用户也可以实现自己的 AM,在运行的时候,AM 会与 NM 一起来启动和监视 Tasks。

4)YARN中的角色介绍:

ResourceManager:ResoueceMananer是基于应用程序对集群资源的需求进行调度的yarn集群的主控制节点,负责协调和管理整个集群,相应用户提交的不同的类型的应用程序,解析、调度、监控等工作。ResourceManager会为每一个application启动一个MRappmaster,并且MRappmaster分散在各个nodemanager上。


ResourceManager 是由两个部分组成:

  • 应用程序管理器(ApplicationsManager, ASM): 管理和监控所有的应用程序的MRappmaster,启动应用程序的MRappmaster,以及MRappmaster失败重启
  • Hadoop 调度器主要分为三类:调度器(Scheduler):

FIFO Scheduler:先进先出调度器:优先提交的,优先执行,后面提交的等待(生产环境不会使用);
Capacity Scheduler:容量调度器:允许创建多个任务队列,每个队列使用所有资源的一部分。多个任务队列可以同时执行。但是一个队列内部还是先进先出。(Hadoop 2.7.2 默认的调度器);
Fair Scheduler:公平调度器:第一个程序在启动时可以占用其他队列的资源(100%占用),当其他队列有任务提交时,占用资源的队列需要将资源还给该任务。还资源的时候,效率比较慢。(CDH版本的yarn 调度器默认)


NodeManager:

Nodemanager是yarn集群中正真资源的提供者,也是真正执行应用程序的容器的提供者,监控应用程序的资源情况(cpu、网络、IO、内存)。并通过心跳向集群的主节点ResourceManager 进行汇报以及更新自己的健康状况。同时也会监督container的生命周期管理,监控每个container的资源情况


MRAppMaster:为当前的job的mapTask和reduceTask向ResourceManager 申请资源、监控当前job的mapTask和reduceTask的运行状况和进度、为失败的MapTask和reduceTask重启、负责对mapTask和reduceTask的资源回收。


Container:Container 是一个容器,一个抽象的逻辑资源单位。容器是由ResourceManager Scheduler 服务动态分配的资源构成的,它包括该节点上的一定量的cpu、网络、IO、内存,MapReduce 程序的所有 Task 都是在一个容器里执行完成的。

5)YARN中的资源调度:

  • 客户端提交计算任务到resourceManager(hadoopxx.jar)
  • resourceManager会在一个节点上启动一个container,在其中运行一个MRappmaster
  • MRappmaster向resourceManager申请资源运行行maptask和reducetask
  • resourceManager向MRAPPmaster返回运行maptask和reducetask的节点
  • MRAPPmaster到相应的节点中启动一个container在其中运行maptask和reudcetask
  • MRappmaster监控maptask或者reducetask的运行状况
  • nodemanger在运行完maptask或者reducetask后,向MRappmaster申请注销自己,释放资源
  • MRappmaster向resourcemanager注销自己,释放资源。

二、YARN的job 提交流程:

  • 客户端向resourcemanager提交job运行的请求(hadoop jar xxxx.jar)

  • Resourcemanager进行检查,没有问题的时候,向客户端返回一个共享资源路径以及JobID

  • 客户端将共享资源放入共享路径下:(/tmp/hadoop-yarn/staging/hadoop/.staging/job_1539740094604_0002/)
    Job.jar 需要运行的jar包,重命名为job.jar
    Job.split 切片信息 (FlieInputFormat—getSplits List)
    Job.xml 配置文件信息 (一些列的job.setxxxx())

  • 客户端向resourcemanager反馈共享资源放置完毕,进行job的真正提交

  • resourceManager为这个job分配一个节点并在这个节点上启动MRAPPmaster任务

  • resourceManager到对应的节点上去启动一个container然后启动mrappmaster

  • MRappmaster去共享资源路径中下载资源(主要是split、job)

  • MRappmater对job进行初始化,生成一个job工作簿,job的工作薄记录着maptask和reduce的运行进度和状态

  • MRappmaster向resourcemanager申请maptask和reducetask的运行的资源,先发maptask然后发reducetask

  • resourcemanager向MRAPPmaster返回maptask和reduce的资源节点(返回节点时,有就近原则,优先返回当前的maptask所处理切片的实际节点,数据处处理的时候可以做到数据的本地化处理。如果是多副本的时候就在多副本的任意节点。而reducetask任务在任意不忙的节点上启动)

  • MRAPPmaster到对应的节点上启动一个container,然后在container中启动maptask任务

  • maptask任务到对应的共享资源路径下下载相应的资源(运行的jar包)

  • maptask任务启动,并且定时向MRAPPmaster汇报自己的运行状态和进度

  • 当有一个maptask任务完成之后,reduce就启动container然后在启动启动reduce任务,但是这里的reducetask只做数据拉取的工作,不会进行计算

  • reduceTASK任务到对应的共享资源路径下载相应的资源(运行的jar包),当所有的maptask任务运行完成后,启动reduce任务进行计算
    当maptask或者是reducetask任务运行完成之后,就会MRAPPmaster申请注销自己,释放资源

  • 当application任务完成之后,MRAPPmaster会向resourcemanager申请注销自己,释放资源。

在这里插入图片描述

原网站

版权声明
本文为[故事写在心里-]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_46163590/article/details/125639041