MapReduce的运行十一步

MapReduce2.0的运行原理

MR任务执行流程

提交作业->初始化作业->分配任务->执行任务->进度和状态更新->作业完成

架构图

在这里插入图片描述

提交作业

  • Client 提交到 Job
    1. client程序编写好job后将调用job的submit()waitForCompletion()方法提交作业
    2. 从RM中获取新的jobId,即ApplicationID
  • Job 提交到 RM
    3. Client检查作业,计算输入分片,将作业资源(这里的资源包括作业JAR、配置和分片信息(map的并行度是切片信息决定,reduce是setNumReduceTask()决定))赋值到HDFS文件系统上
    4. 调用RM的 submitApplication() 方法提交作业

初始化作业

  • 给作业分配ApplicationMaster
    5.当RM检测到submitApplication()方法被调用时,将请求传递给scheduler(调度器)
    scheduler分配一个container,然后RM该会在NM管理下在分配的Container中ApplicationMaster
  • ApplicationMaster初始化作业
    6.MR作业的ApplicationMaster 是一个Java应用程序,它的主类是 MRAppMaster。它对作业进行初始化,通过创建多个薄记对象以保持对作业进度的跟踪,因为它将接受来自任务的进度和完成报告(这里关联的是后面的进度和状态更新)
    7.ApplicationMaster从HDFS中获取在Client计算的输入分片(主要是指map和reduce的个数)

ApplicationMaster决定如何运行构成MapReduce的各项任务,如果job小就在一台上运行就行,但大部分要申请新的container

任务分配

8.ApplicationMaster为job中的所有map、reduce向RM中请求新的container

请求也为任务指定了内存需求,在默认的情况下,map和reduce的任务都分配到1024M的内存,但这可以通过 mapreduce.map.memory.mbmapreduce.reduce.memory.mb来设置。

任务执行

9.一旦RM的scheduler为job分配了新的container,ApplicationMaster就会通过与NM的通信来启动新的container
10.==在运行任务之前,首先将任务需要的资源本地化(包括作业的配置,JAR文件和所有来自分布式的缓存文件)==然后由主类为YarnChild的java应用程序执行
11.最后运行MR任务

任务状态的更新

  • 在YARN下运行,任务每 3s通过 umbilical 接口向 ApplicationMaster 汇报进度和状态(包括计数器),作为作业的汇聚视图(aggregate view)。

作业完成

  • 除了向 ApplicationMaster 查询进度外,Client 每 5s还通过调用 Job 的 waitForCompletion()来检查作业是否完成(查询的间隔可以通过 mapreduce.client.completion.pollinterval 属性进行设置)。
  • 作业完成后, ApplicationMaster 和任务容器清理其工作状态, OutputCommitter 的作业清理方法会被调用。作业历史服务器保存作业的信息供用户需要时查询。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值