MapReduce提供了很好的容错机制,所谓容错就是允许在整个任务执行过程中TaskTracker中间出现当机,发生故障,或JVM发生重启等等一些情况都允许它出错,
出错有两种机制,
1.重复执行
出错有可能是job出错,有可能是硬件的问题,也有可能是数据的问题,不管什么样的问题,首先会尝试重试,再次执行,也就是重复执行,重复执行一般默认重复执行4次后,如果还是失败的话就放弃执行。
2.推测执行
所谓推测执行,在整个任务执行过程中,需要等到所有Map端执行完成后,Reduce端才会开始,那么这时候有可能存在某个节点算的特别慢,JobTracker就会发现某个节点算的特别慢,它比别的慢的很多的时候说明它出现了问题,推测执行这个时候会这个慢的继续算,在利用找一台TaskTracker做同样的事情,只要这个事情新建的和之前的谁先算完,就会把另外一个终止了,这样通过推测执行,来保证整个任务的计算不会因为某一两个TaskTracker故障或出现问题导致整个任务执行效率很低。