YARN进阶笔记

本文深入探讨了YARN的应用运行原理,包括提交过程、MapReduce在YARN上的执行流程,以及YARN的调度器机制,如FIFO、Capacity和Fair Scheduler。此外,还介绍了如何使用YARN,配置文件、启动停止步骤以及YARN应用的状态管理。
摘要由CSDN通过智能技术生成

3. YARN应用运行原理

3.1 YARN应用提交过程

  • Application在Yarn中的执行过程,整个执行过程可以总结为三步:

    • 应用程序提交
    • 启动应用的ApplicationMaster实例
    • ApplicationMaster 实例管理应用程序的执行
  • 具体提交过程为:

    • 客户端程序向 ResourceManager 提交应用,并请求一个 ApplicationMaster 实例;
    • ResourceManager 找到一个可以运行一个 Container 的 NodeManager,并在这个 Container 中启动 ApplicationMaster 实例;
    • ApplicationMaster 向 ResourceManager 进行注册,注册之后客户端就可以查询 ResourceManager 获得自己 ApplicationMaster 的详细信息,以后就可以和自己的 ApplicationMaster 直接交互了(这个时候,客户端主动和 ApplicationMaster 交流,应用先向 ApplicationMaster 发送一个满足自己需求的资源请求);
    • ApplicationMaster 根据 resource-request协议 向 ResourceManager 发送 resource-request请求;
    • 当 Container 被成功分配后,ApplicationMaster 通过向 NodeManager 发送 container-launch-specification信息 来启动Container,container-launch-specification信息包含了能够让Container 和 ApplicationMaster 交流所需要的资料;
    • 应用程序的代码以 task 形式在启动的 Container 中运行,并把运行的进度、状态等信息通过 application-specific协议 发送给ApplicationMaster;
    • 在应用程序运行期间,提交应用的客户端主动和 ApplicationMaster 交流获得应用的运行状态、进度更新等信息,交流协议也是 application-specific协议;
    • 应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster 向 ResourceManager 取消注册然后关闭,用到所有的 Container 也归还给系统。
  • 精简版的:

    • 步骤1:用户将应用程序提交到 ResourceManager 上;
    • 步骤2:ResourceManager为应用程序 ApplicationMaster 申请资源,并与某个 NodeManager 通信启动第一个 Container,以启动ApplicationMaster;
    • 步骤3:ApplicationMaster 与 ResourceManager 注册进行通信,为内部要执行的任务申请资源,一旦得到资源后,将于 NodeManager 通信,以启动对应的 Task;
    • 步骤4:所有任务运行完成后,ApplicationMaster 向 ResourceManager 注销,整个应用程序运行结束。

3.2 MapReduce on YARN

  • 提交作业

    • ①程序打成jar包,在客户端运行hadoop jar命令,提交job到集群运行
    • job.waitForCompletion(true)中调用Job的submit(),此方法中调用JobSubmitter的submitJobInternal()方法;
      • ②submitClient.getNewJobID()向resourcemanager请求一个MR作业id
      • 检查输出目录:如果没有指定输出目录或者目录已经存在,则报错
      • 计算作业分片;若无法计算分片,也会报错
      • ③运行作业的相关资源,如作业的jar包、配置文件、输入分片,被上传到HDFS上一个以作业ID命名的目录(jar包副本默认为10,运行作业的任务,如map任务、reduce任务时,可从这10个副本读取jar包)
      • ④调用resourcemanager的submitApplication()提交作业
    • 客户端每秒查询一下作业的进度(map 50% reduce 0%),进度如有变化,则在控制台打印进度报告;
    • 作业如果成功执行完成,则打印相关的计数器
    • 但如果失败,在控制台打印导致作业失败的原因(要学会查看日志,定位问题,分析问题,解决问题)
  • 初始化作业

    • 当ResourceManager(一下简称RM)收到了submitApplication()方法的调用通知后,请求传递给RM的scheduler(调度器);调度器分配container(容器)
    • ⑤a RM与指定的NodeManager通信,通知NodeManager启动容器;NodeManager收到通知后,创建占据特定资源的container;
    • ⑤b 然后在container中运行MRAppMaster进程
    • ⑥MRAppMaster需要接受任务(各map任务、reduce任务的)的进度、完成报告,所以appMaster需要创建多个簿记对象,记录这些信息
    • ⑦从HDFS获得client计算出的输入分片split
      • 每个分片split创建一个map任务
      • 通过 mapreduce.job.reduces 属性值(编程时,jog.setNumReduceTasks()指定),知道当前MR要创建多少个reduce任务
      • 每个任务(map、reduce)有task id
  • Task 任务分配

    • 如果小作业,appMaster会以uberized的方式运行此MR作业;appMaster会决定在它的JVM中顺序此MR的任务;

      • 原因是,若每个任务运行在一个单独的JVM时,都需要单独启动JVM,分配资源(内存、CPU),需要时间;多个JVM中的任务再在各自的JVM中并行运行

      • 若将所有任务在appMaster的JVM中顺序执行的话,更高效,那么appMaster就会这么做 ,任务作为uber任务运行

      • 小作业判断依据:①小于10个map任务;②只有一个reduce任务;③MR输入大小小于一个HDFS块大小

      • 如何开启uber?设置属性 mapreduce.job.ubertask.enable 值为true

        configuration.set("mapreduce.job.ubertask.enable", "true");
        
      • 在运行任何task之前,appMaster调用setupJob()方法,创建OutputCommitter,创建作业的最终输出目录(一般为HDFS上的目录)及任务输出的临时目录(如map任务的中间结果输出目录)

    • ⑧若作业不以uber任务方式运行,那么appMaster会为作业中的每一个任务(map任务、reduce任务)向RM请求container

      • 由于reduce任务在进入排序阶段之前,所有的map任务必须执行完成;所以,为map任务申请容器要优先于为reduce任务申请容器

      • 5%的map任务执行完成后,才开始为reduce任务申请容器

      • 为map任务申请容器时,遵循数据本地化,调度器尽量将容器调度在map任务的输入分片所在的节点上(移动计算,不移动数据)

      • reduce任务能在集群任意计算节点运行

      • 默认情况下,为每个map任务、reduce任务分配1G内存、1个虚拟内核,由属性决定mapreduce.map.memory.mb、mapreduce.reduce.memory.mb、mapreduce.map.cpu.vcores、mapreduce.reduce.reduce.cpu.vcores

  • Task 任务执行

    • 当调度器为当前任务分配了一个NodeManager(暂且称之为NM01)的容器,并将此信息传递给appMaster后;appMaster与NM01通信,告知NM01启动一个容器,并此容器占据特定的资源量(内存、CPU)
    • NM01收到消息后,启动容器,此容器占据指定的资源量
    • 容器中运行YarnChild,由YarnChild运行当前任务(map、reduce)
    • ⑩在容器中运行任务之前&#x
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值