本节内容:Lect 1编程
MapReduce框架的执行过程:负载均衡
master分发任务,把map任务和reduce任务分发下去 map worker读取输入,进行map计算写入本地临时文件 map任务完成通知master 告知本地中间结果文件的位置大小信息 master通知reduce worker reduce worker从不一样的map worker读取本身负责的部分,这个过程称为shuffle reduce worker读取以后会在本地进行排序 调用用户的reduce方法进行计算 最终reduce将结果输出到全局的文件系统(GFS) 失败处理的过程: master故障:不处理,外部程序决定是否重作 worker故障:master定时ping各个worker,若一段时间ping不通说明崩了 若是发现了某个worker故障了 这个worker执行中的reduce和map任务都会被标记为空闲从新分配 若是是reduce任务而且执行完了那么就忽略无论(reduce生成的结果存在GFS,不会丢) 若是是map任务而且执行完了,那么就要重置状态,要求从新执行。由于中间文件可能丢失了(map的中间文件存在worker本地)。
具体过程能够参考这张图:框架
MapReduce模型的容错性:map()/reduce()各个函数之间都是独立运行的,没有依赖。因此从新执行也会产生相同的输出。纯函数的这个需求是MR相对于其余并行编程方案的主要限制,而后也是由于这个需求使得MR很是简单。当出错时直接从新执行对应的函数和区块便可函数
每一个区块尽量的小(分红尽量多的块),便于负载均衡、出错重启等spa
Ref: https://zou.cool/2018/11/27/mapreduce/code