MapReduce论文阅读报告
1 背景
MapReduce可以简单理解为一个函数式编程框架,因为对于大量数据处理在分布式场景下会有各种各样的麻烦,比如错误处理,数据集划分,分布式调度等问题。Google的两位工程师提出了这一个框架,就可以让一个没有分布式经验的普通用户(比如我),只通过实现map
和reduce
函数,就能轻松完成分布式任务,而把具体的细节隐藏起来了。
2 待续....
3 具体实现
3.3 Fault Tolerance
3.3.1 Worker Failure
master会周期性的ping
worker,确保worker还活着(资本家行为),让我想到了心跳协议这种东西。
当发现有worker死掉的时候,就要进行错误处理
- 这个worker所有已完成的
map
任务,全部置为idle(可以理解为未做)
,重新做一遍。
明明已经完成了,为什么还要重新做?因为map任务的结果,都是存在worker本地的缓存中or本地磁盘上,worker死掉的时候,连机器都访问不到,更加不可能获取到这些中间结果了,所以只能全部重新做一遍。
为啥已经完成的reduce任务不用重新做?因为reduce完成后,output file存在共享的GFS上
- 对于任何正在处理但未完成的
map
或reduce
任务,也同样置为idle
,让master重新分配这些任务到可用的worker上。
3.3.2 Master Failure
一般master作为调度器,不太可能出事。
当然,也可以为master上设置几个检查点,然后周期性的状态备份。
如果真的不小心fail了,那么可以通过用户程序自行检查,然后重启MapReduce服务。