MapReduce的工作机制

MapReduce的工作机制

(1)       Job的提交:jobClientRunJob可以新建JobClient实例,并调用SubmitJob()

SubmitJob()实现的作业提交过程:

a.       jobtracker请求一个新的JobID

b.       检查Job的输出说明

c.       计算Job的输入分片

d.       将运行Job所需要的资源(包括作业JAR文件,配置文件和计算所得的输入分片)复制到位于共享文件系统(HDFS)中一个以Job ID命名的目录

e.       告知jobtracker 作业准备执行

(2)       Job的初始化

JobTracker接收到SubmitJob的调用,会将此调用放入一个内部队列中,交由Job调度器进行调度,并对其初始化(创建一个表示正在运行的对象,用于封装任务和记录信息,以便跟踪任务的状态)。

Job调度器从共享文件系统中获取JobClient已计算好的输入分片信息,为每一个分片创建一个Map任务。

创建Reduce任务的数量由JobConfmapred.reduce.task属性决定,它是用setNumReduce Tasks()方法来设置,然后调度器创建相应数量的要运行的Reduce任务。

(3)       Task的分配

Heartbeat用于充当JobtrackerTaskTracker之间的消息通道。Tasktracker将说明其是否准备好运行新的任务,如果是,JobTracker会为它分配一个任务,并使用“心跳”的返回值与TaskTracker进行通信。

为了选择一个Reduce任务,JobTracker简单从待运行的Reduce任务列表中选取下一个来执行,用不着考虑数据的本地化。

而对于Map任务,JobTracker会考虑数据本地化。

对于mapreduce任务,tasktracker有固定数量的任务槽。默认调度器在处理reduce任务槽之前,会填满空闲的map任务槽,再考虑reduce.也就是Map任务优先于Reduce任务。

(4)       Task的执行

a.       通过共享文件系统把JobJAR文件复制到tasktracker所在的文件系统,实现JAR文件本地化,并将应用程序所需要的全部文件从分布式缓存复制到本地磁盘

b.       Task建立一个新的目录,并将JAR解压到该文件夹下

c.       新建一个TaskRunner实例来运行该任务。TaskRunner启动一个新的JVM来运行每个任务

(5)       Job的完成

JobTrackerJob的状态设置成“成功”,并发送HTTP作业通知。最后清空Job的工作状态,并指示TaskTracker也清空Job的工作状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值