众所周知, Hadoop有很强的容错性。 这主要是针对由成千上万台普通机器组成的 集群 中常态化的硬件故障的, Hadoop能够利用冗余数据方式来解决硬件故障, 以保证数据安全和任务执行。 那么MapReduce在具体执行作业过程中遇到硬件故障会如何处理呢?对于用 户代码的缺陷或进程崩溃引起的错误又会如何处理呢?
1.硬件故障
从MapReduce任务的执行角度出发, 所涉及的硬件主要是JobTracker和 TaskTracker 〈对应从HDFS出发就是NarneNode和 DataNode)。 显然硬件故障就是JobTracker机器故障和TaskTracker机器故障。
在Hadoop集群中, 任何时候都只有唯一一个 JobTracker。 所以JobTracker故障就是单点故障, 这是所有错误中最严重的错误。到目前为止, 在Hadoop中还没有相应的解决办法。 能够想到的是通过创建多个备用 JobTracker节点, 在主JobTracker失败之后 采用领导选举算法(Hadoop中常用的一种确定master的算法〉来 重新确定JobTracker节点 。在一些企业使 用Hadoop提供服务时, 就 采用了这样的方越来避免JobTracker错误。
机器故障除了JobTracker错误外就是TaskTracker错误。TaskTracker故障相对较为常见, 并且MapReduce也有相应的解决办法, 主要是重新执行任务。 下面将详细介绍当作业遇到 TaskTracker错误时, MapReduce 所采取的解决步骤。
在Hadoop中, 正常情况下, TaskTracker会不断地与系统JobTracker通过心跳机制进行通信。 如果某TaskTracker出现故障或运行缓慢, 它会停止或很少向Job