请阐述 MapReduce 框架在面对任务失败时的处理流程,并列举其主要的容错机制有哪些?
考察说明
考察对 MapReduce 容错机制的理解,包括任务失败检测、恢复流程及各类容错策略。
回答思路
- 【回答框架 1】MapReduce 任务失败主要分三类:任务失败(Task Failure)、应用主节点失败(App Master Failure)和节点失败(Node Failure)。任务失败通常由代码异常、运行时错误或资源问题导致,框架会尝试重新执行该任务。
- 【回答框架 2】任务失败处理流程:任务尝试(Task Attempt)失败后,Application Master 会记录失败原因,并根据最大重试次数决定是否重试。若重试次数超过阈值,整个作业失败。重试时,已完成的 map 任务会重新计算吗?通常 map 任务输出存储在本地磁盘,若节点故障则丢失,需要重跑。
- 【回答框架 3】容错机制包括:推测执行(Speculative Execution),对慢任务启动备份任务,取先完成的结果;数据本地性优化,优先在数据所在节点调度任务以减少网络传输;对于 shuffle 阶段,map 输出会复制到多个节点,提高可靠性。
- 【回答框架 4】应用主节点失败时,YARN 会重新启动 Application Master,并从上次的作业状态恢复,依靠作业历史文件或检查点机制。节点失败时,该节点上的任务会被重新调度到其他节点执行。
- 【回答框架 5】一些框架还支持作业级容错,如定期写入检查点,但经典 MapReduce 主要依赖任务级重试和推测执行。
- 【关键点 1】任务失败通过重试机制恢复,超过最大重试次数则作业失败。
- 【关键点 2】推测执行通过启动备份任务应对慢任务,减少整体执行时间。
- 【关键点 3】map 输出通常存储本地,节点故障会导致任务重跑。
- 【关键点 4】应用主节点失败由 YARN 重启,并恢复作业状态。
- 【关键点 5】数据本地性优化降低网络开销,但不是严格容错机制。
- 【易错点 1】不要将推测执行误认为是为了容错,它主要针对性能问题。
- 【易错点 2】不要将所有失败都视为可自动恢复,如代码逻辑错误需人工干预。
- 【易错点 3】注意区分任务失败和作业失败,重试机制针对任务级别。