Mapreduce的工作流程

一 Job的提交过程

1.1创建Job(我们可以理解为一个需要运行的MapReduce应用程序的作业)

1.2设置Job需要运行的应用程序

1.3校验Job输出路径

1.4设置Mapper类和输入key和输出value的数据类型

1.5设置Reduce类和输入key和输出value的数据类型

1.6Job创建JobSubmitter实例,并调用其submitInternal方法提交应用程序

1.7JobSubmitter在提交的时候会检查文件路径是否存在,否则抛出异常

1.8拷贝运行运行需要的jar包和配置文件到分布式文件系统的MapReduce目录

1.9计算输入分片数量InputSplits

1.10根据分片数量设置map数量

1.11根据CilentProtocol#submitJob方法提交job

1.12构建应用程序提交上下文,并把配置文件信息以及Job的提交的临时目录封装在这个上下文中

1.13调用YarnClient#submitApplication向ResourceManager提交应用程序

 

二 Job初始化过程

2.1当ResoureManager收到来自客户端的提交请求后,通过调度器Scheduler去分配一个Container,

然后通知NodeManager在这个Container中启动MRAppMaster

2.2MRAppMaster首先会向ResourceManager注册,然后为各个任务申请资源

2.3MRAppMaster是一个服务,在服务启动过程中,会创建Job,并初始化Job,在初始化过程中,会创建分片,然后根据分片信息,确定Map

Task数目和ReduceTask数目

2.4然后创建MapTask & Reduce Task

2.5Job初始化成功,则调用startJob方法启动作业

 

三 Task的任务分配

3.1启动Job之后,就会对Task进行调度,首先创建TaskAttempt实例,根据任务类型不同会创建不同的TaskAttempt实例

3.2将当前TaskAttempt的id加入到正在运行的TaskAttempt集合in

ProgressAttempts

3.3调度TaskAttempt,触发TA_SCHEDULE事件

3.4RequestContainerAllocator就会向Resource Manager申请conatiner资源:

#首先将MapTask资源需求发送给ResourceManager

#如果ReduceTask达到了调度条件,则开始为ReduceTask申请资源,一般情况是在MapTask完成了5%的比例之后,且ReduceTask可允许占用的资源能够折合成一个整数,则开始调度ReduceTask;如果某一个Map Task已经申请到了资源,则取消其他重复的资源申请;任务运行失败,重新申请资源;如果某一个任务运行速度过慢,则会额外申请资源已启动备份任务;如果某个节点任务失败过多,则会撤销该节点的所有资源请求

 

四 Task的执行

4.1如果Task已经被ResourceManager分配到了container,MRApp

Master则会告诉NodeManager启动container

4.2然后交给YarnChild类来运行程序,运行Task之前,会定位task需要的jar包,配置文件等

4.3YarnChild运行在一个专属的JVM进程,所以任何一个Map或者

Reduce任务出现问题,都不会影响整个NodeManager

4.4最后完成的数据写入临时文件

 

五 运行状态和状态更新

 

六 Job的完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值