MapReduce论文阅读报告

1 背景

MapReduce可以简单理解为一个函数式编程框架,因为对于大量数据处理在分布式场景下会有各种各样的麻烦,比如错误处理,数据集划分,分布式调度等问题。Google的两位工程师提出了这一个框架,就可以让一个没有分布式经验的普通用户(比如我),只通过实现mapreduce函数,就能轻松完成分布式任务,而把具体的细节隐藏起来了。

2 待续....

3 具体实现

3.3 Fault Tolerance

3.3.1 Worker Failure

master会周期性的pingworker,确保worker还活着(资本家行为),让我想到了心跳协议这种东西。

当发现有worker死掉的时候,就要进行错误处理

  1. 这个worker所有已完成的map任务,全部置为idle(可以理解为未做),重新做一遍。

明明已经完成了,为什么还要重新做?因为map任务的结果,都是存在worker本地的缓存中or本地磁盘上,worker死掉的时候,连机器都访问不到,更加不可能获取到这些中间结果了,所以只能全部重新做一遍。

为啥已经完成的reduce任务不用重新做?因为reduce完成后,output file存在共享的GFS上

  1. 对于任何正在处理但未完成的mapreduce任务,也同样置为idle,让master重新分配这些任务到可用的worker上。

3.3.2 Master Failure

一般master作为调度器,不太可能出事。

当然,也可以为master上设置几个检查点,然后周期性的状态备份。

如果真的不小心fail了,那么可以通过用户程序自行检查,然后重启MapReduce服务。

posted @ 2023-04-21 21:53  wenli7363  阅读(23)  评论(0编辑  收藏  举报