Hadoop中主要通过以下几种机制处理异常:
- DataNode数据块复制:HDFS中的每个数据块都有多个复制,默认存储在3个DataNode上。当某个DataNode失效时,可以从其他节点恢复数据,数据不会丢失。
- NameNode高可用:NameNode保存着HDFS元数据信息。Hadoop 2.x支持NameNode高可用,通过Active-Standby架构的NameNode保证集群中至少有一台处于Active状态。当Active NameNode失效时,Standby NameNode可以快速切换成Active,恢复服务。
- 数据校验:HDFS数据传输和存储过程中会进行校验,如CRC32等。当检测到数据错误时会主动丢弃错误的数据块并从其他DataNode恢复,确保数据正确性。
- 任务重试:当MapReduce任务失败时,YARN会尝试重新运行任务。在任务运行期间,MapReduce会周期性保存任务进度,当任务失败后可以从最近的保存点恢复运行,而不必完全重新开始。
- 容器重启:YARN中的每个任务运行在一个Container中。当Container异常退出时,ApplicationMaster会主动重新申请一个Container并重新启动任务,继续运行。
- 应用重启:当ApplicationMaster失效导致应用退出时,YARN的ResourceManager会重新分配资源并重启应用。应用可以从最近的保存点继续运行。
- 资源调度:当某些节点失效或资源不足时,YARN的ResourceManager可以在集群中重新调度资源并移交运行的任务与应用到其他节点上,确保作业持续运行。
- 集群扩容:当集群负载高或资源不足时,可以简单向集群中增加更多的节点。YARN会自动发现新加入的节点并将资源加以利用,扩展集群处理能力。
Hadoop具有较强的容错与恢复能力,可以在复杂的异常与故障情况下继续运行,实现高可用。