yarn

yarn 任务调度器组成

  • ResourceManager(RM):
    整个集群资源(内存、cpu等)的调度者
    1、接收客户端的请求(该请求是运行程序的请求)
    2、启动和监控MRAppMaster
    3、资源调度,调度整个计算程序的资源,决定任务在哪个节点执行

  • NodeManager(NM):
    负责提供真正的资源,运行实际的计算程序
    1、接收resourcemanager的命令
    2、管理单个节点上的资源
    3、为计算程序提供资源
    4、处理来自MRApplicationMaster的命令

  • MRAppMaster
    对应一个应用程序,帮助计算任务程序向resourcemanager申请资源
    负责启动maptask和reducetask任务,监控maptask和reducetask的运行进度

  • ASM applicationmanager
    应用程序管理器ASM管理整个系统中所有的应用程序,包括应用程序提交、与调度器协商资源以启动MRAppMaster、监控MRAppMaster运行状态并在失败时重新启动。

  • container
    抽象资源容器,是由ResourceManager Scheduler服务动态分配的资源构成,封装着一定的cpu、io、网络等资源,是运行maptask和reducetask的容器,一个maptask或者reducetask的所有task都是在一个容器里面执行完成的,容器的大小是可以动态调整的。

  • scheduler
    决定调度什么时候执行哪个计算程序(即job执行顺序)
    调度方式:
    FIFO:先提交的程序先执行,后提交的程序后执行,通过内部维护一个队列实现
    FATR:公平调度器,大家平分资源运行,通过内部维护多个队列实现,多个队列之间进行资源分配,程序之间平均分配资源。
    CAPICITY:按需进行资源配置,两个队列:第一个队列:60%,40%,在每个队列都是先进先出。

yarn的资源调度过程

  • 提交job
    1、Client写好计算程序代码,向整个集群发布提交mapreduce作业的请求
    2、Client请求RM分配一个作业id,同时根据作业指定的文件名称计算出资源路径
    3、Client端提交JAR、切片信息和配置文件
    4、Client提交完成后,想RM申请运行MRAppMaster

  • 初始化job
    1、RM接收到请求后,把请求交给ASM,ASM做一系列的校验,检查无误后,RM将job添加到scheduler
    2、scheduler指定一个NM执行该job
    3、NM创建container,启动MRAppMaster
    4、下载client提交的资源到当前NM;

  • 分配任务
    1、MRAppMaster向resourcemanager申请资源,为maptask和reducetask申请资源。
    2、RM向MRAppMaster返回当前有资源的节点,比如是01和03节点。返回节点的规则:优先返回有数据的节点,maptask任务执行个数由切片个数决定,切片---块---hdfs---某一个节点本地,前提条件是这个节点上有可用的资源,数据本地化:可以避免计算的时候数据的网络传输,提升计算性能。
    3、RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。

  • 任务执行
    1、去对应的节点上开启container和maptask任务。
    先去01节点开启container,再在container中开启maptask任务,
    去03节点开启container,再在container中开启maptask任务。
    2、所有的maptask向MRAppMaster汇报自己的运行状态和进度。
    3、MRAppMaster会在所有的maptask执行了80%的时候开启reducetask任务。
    4、MRAppMaster到对应的节点上开启reducetask
    5、reducetask从Maptask获取相应分区的数据,执行reduce任务。

  • 任务执行完毕
    1、返回reducetask的执行结果
    2、所有的maptask和reducetasku都运行完成后,MRAppMaster向RM注销自己。
    3、资源回收

job细说

真正执行的maptask reducetask都是基于jar包的,但是客户端上传时实际只会上传到一个节点。其他NM执行的时候,会从当前节点拉取Jar包,其实不止jar,每次job运行的时候,都会有一些公共资源,包括jar包和一些配置文件
公共资源路径:
每次运行job的时候都会生成一个和job id相同的目录,
/tmp/hadoop-yarn/staging/hadoop/.staging

公共资源核心文件:
1、jar包,即我们的处理程序
2、job.split切面信息,FileInputFormat.addPath().getSplits()
3、job.xml配置文件,主要包含job运行的参数信息。

真正在执行程序的时候,maptask reducetask每一个任务都在执行jar包,但是你的jar提交的时候只上传到一个节点上,maptask和reducetask运行的时候可能会运行在和jar包不同的节点上。但是程序并没有报错。

posted @   clouderzheng  阅读(132)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示