MapReduce的容错
mapreduce常用语大数据处理,需要在集群中利用多台机器一起工作,所以必须能够有容错能力,能从容的处理突发的机器状况
worker Failure
master会定期的对所有worker发送请求,像心跳机制,虽然都是leader或者master发送但是raft里面的心跳是leader发送给所有follower告知他们我有心跳,防止follower发起leader选举,而mapreduce做的是,leader需要确定所有的worker是否有心跳。如果没有收到worker的响应,则标记worker为失败状态。worker如果完成了map的工作就会重置为空闲状态,因此就可以在其他worker上进行调度。正在做map或者reduce任务的work如果被记为失败(响应失败,无法响应心跳,但是不影响自己的工作),也会被master重置空闲状态,可以重新调度。
已完成map工作的work,如果被记为失败,则会重新执行,因为他们的输出存储在故障机器的磁盘上,如果不能响应master的心跳,那么master也无法访问该数据了,所以需要重新跑。
但是完成了reduce工作的不需要重新执行,因为他们的输出存储在全局的文件系统中。
假设map任务首先由worker A执行,A被标记为失败,调度器将任务发给worker B,那执行reduce任务的worker就会被通知需要重新跑reduce。新的reduce任务都会从work B读取数据。
MapReduce对大规模的宕机也有弹性,比如再一次MapReduce工作中,一次网络维护导致了上百台机器在几分钟内无法访问,MapReduce的master只会简单的重新执行无法访问的worker的工作,并继续向前推进,最终完成MapReduce。
master Failure
master可以写周期性的检查点,就是存档,如果master宕机,可以从最后一个检查点开一个新的副本,但是mapreduce只有一个master,也不会选举,如果master失败,在现实中就会终止MapReduce的计算。客户端只能重试MapReduce操作。