欢迎光临
我们一直在努力

Hadoop任务容错机制深度解析:重试机制与故障恢复实战

Hadoop任务容错机制深度解析:重试机制与故障恢复实战

    • 引言:容错——分布式系统的生存法则
    • 一、Hadoop容错体系全景
      • 1.1 容错的多层次防护
      • 1.2 容错设计的核心思想
    • 二、任务级容错:重试机制深度解析
      • 2.1 任务失败的原因分类
      • 2.2 重试机制的工作流程
      • 2.3 核心重试参数
      • 2.4 重试机制的内部实现
      • 2.5 指数退避重试策略
    • 三、推测执行:加速任务完成的容错机制
      • 3.1 什么是推测执行?
      • 3.2 推测执行的工作机制
      • 3.3 推测执行配置
      • 3.4 推测执行的适用场景
    • 四、节点级容错:任务迁移与数据恢复
      • 4.1 节点失效检测
      • 4.2 节点失效后的任务处理
      • 4.3 数据本地性失效的处理
    • 五、应用级容错:ApplicationMaster恢复
      • 5.1 AM失效的影响
      • 5.2 AM恢复机制
      • 5.3 AM恢复配置
    • 六、集群级容错:HA架构
      • 6.1 NameNode HA
      • 6.2 ResourceManager HA
    • 七、容错机制的监控与调优
      • 7.1 关键监控指标
      • 7.2 常见问题排查
      • 7.3 调优建议
    • 八、总结:容错机制的最佳实践
      • 8.1 容错体系核心要点
      • 8.2 黄金法则
      • 8.3 最终建议

🌺The Begin🌺点点关注,收藏不迷路🌺

引言:容错——分布式系统的生存法则

在分布式系统中,节点故障、网络波动、任务超时是常态而非异常。Hadoop作为大规模数据处理平台,设计了一套多层次的容错机制,确保即使部分组件失效,整个作业仍能成功完成。而重试机制正是这套容错体系中最核心、最常用的手段。

本文将深入剖析Hadoop的任务级容错原理,从故障检测到自动恢复,全面解析重试机制的实现细节。

#mermaid-svg-ZNUrd79IcuZj9Apv{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ZNUrd79IcuZj9Apv .error-icon{fill:#552222;}#mermaid-svg-ZNUrd79IcuZj9Apv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZNUrd79IcuZj9Apv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZNUrd79IcuZj9Apv .marker.cross{stroke:#333333;}#mermaid-svg-ZNUrd79IcuZj9Apv svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZNUrd79IcuZj9Apv p{margin:0;}#mermaid-svg-ZNUrd79IcuZj9Apv .edge{stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .section–1 rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section–1 path,#mermaid-svg-ZNUrd79IcuZj9Apv .section–1 circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section–1 polygon,#mermaid-svg-ZNUrd79IcuZj9Apv .section–1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section–1 text{fill:#ffffff;}#mermaid-svg-ZNUrd79IcuZj9Apv .node-icon–1{font-size:40px;color:#ffffff;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-edge–1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-depth–1{stroke-width:17;}#mermaid-svg-ZNUrd79IcuZj9Apv .section–1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled circle,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:lightgray;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:#efefef;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-0 rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section-0 path,#mermaid-svg-ZNUrd79IcuZj9Apv .section-0 circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section-0 polygon,#mermaid-svg-ZNUrd79IcuZj9Apv .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section-0 text{fill:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .node-icon-0{font-size:40px;color:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-depth-0{stroke-width:14;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled circle,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:lightgray;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:#efefef;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-1 rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section-1 path,#mermaid-svg-ZNUrd79IcuZj9Apv .section-1 circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section-1 polygon,#mermaid-svg-ZNUrd79IcuZj9Apv .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section-1 text{fill:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .node-icon-1{font-size:40px;color:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-depth-1{stroke-width:11;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled circle,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:lightgray;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:#efefef;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-2 rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section-2 path,#mermaid-svg-ZNUrd79IcuZj9Apv .section-2 circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section-2 polygon,#mermaid-svg-ZNUrd79IcuZj9Apv .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section-2 text{fill:#ffffff;}#mermaid-svg-ZNUrd79IcuZj9Apv .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-depth-2{stroke-width:8;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled circle,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:lightgray;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:#efefef;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-3 rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section-3 path,#mermaid-svg-ZNUrd79IcuZj9Apv .section-3 circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section-3 polygon,#mermaid-svg-ZNUrd79IcuZj9Apv .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section-3 text{fill:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .node-icon-3{font-size:40px;color:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-depth-3{stroke-width:5;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled circle,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:lightgray;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:#efefef;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-4 rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section-4 path,#mermaid-svg-ZNUrd79IcuZj9Apv .section-4 circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section-4 polygon,#mermaid-svg-ZNUrd79IcuZj9Apv .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section-4 text{fill:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .node-icon-4{font-size:40px;color:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-depth-4{stroke-width:2;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled circle,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:lightgray;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:#efefef;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-5 rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section-5 path,#mermaid-svg-ZNUrd79IcuZj9Apv .section-5 circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section-5 polygon,#mermaid-svg-ZNUrd79IcuZj9Apv .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section-5 text{fill:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .node-icon-5{font-size:40px;color:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-depth-5{stroke-width:-1;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled circle,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:lightgray;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:#efefef;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-6 rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section-6 path,#mermaid-svg-ZNUrd79IcuZj9Apv .section-6 circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section-6 polygon,#mermaid-svg-ZNUrd79IcuZj9Apv .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section-6 text{fill:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .node-icon-6{font-size:40px;color:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-depth-6{stroke-width:-4;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled circle,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:lightgray;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:#efefef;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-7 rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section-7 path,#mermaid-svg-ZNUrd79IcuZj9Apv .section-7 circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section-7 polygon,#mermaid-svg-ZNUrd79IcuZj9Apv .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section-7 text{fill:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .node-icon-7{font-size:40px;color:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-depth-7{stroke-width:-7;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled circle,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:lightgray;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:#efefef;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-8 rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section-8 path,#mermaid-svg-ZNUrd79IcuZj9Apv .section-8 circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section-8 polygon,#mermaid-svg-ZNUrd79IcuZj9Apv .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section-8 text{fill:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .node-icon-8{font-size:40px;color:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-depth-8{stroke-width:-10;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled circle,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:lightgray;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:#efefef;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-9 rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section-9 path,#mermaid-svg-ZNUrd79IcuZj9Apv .section-9 circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section-9 polygon,#mermaid-svg-ZNUrd79IcuZj9Apv .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section-9 text{fill:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .node-icon-9{font-size:40px;color:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-depth-9{stroke-width:-13;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled circle,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:lightgray;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:#efefef;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-10 rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section-10 path,#mermaid-svg-ZNUrd79IcuZj9Apv .section-10 circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section-10 polygon,#mermaid-svg-ZNUrd79IcuZj9Apv .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section-10 text{fill:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .node-icon-10{font-size:40px;color:black;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .edge-depth-10{stroke-width:-16;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled circle,#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:lightgray;}#mermaid-svg-ZNUrd79IcuZj9Apv .disabled text{fill:#efefef;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-root rect,#mermaid-svg-ZNUrd79IcuZj9Apv .section-root path,#mermaid-svg-ZNUrd79IcuZj9Apv .section-root circle,#mermaid-svg-ZNUrd79IcuZj9Apv .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-ZNUrd79IcuZj9Apv .section-root text{fill:#ffffff;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-root span{color:#ffffff;}#mermaid-svg-ZNUrd79IcuZj9Apv .section-2 span{color:#ffffff;}#mermaid-svg-ZNUrd79IcuZj9Apv .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-ZNUrd79IcuZj9Apv .edge{fill:none;}#mermaid-svg-ZNUrd79IcuZj9Apv .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-ZNUrd79IcuZj9Apv :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

Hadoop容错机制

故障检测

心跳机制

超时判定

节点健康检查

重试策略

Map任务重试

Reduce任务重试

ApplicationMaster重试

指数退避算法

资源隔离

Container隔离

任务推测执行

故障转移

数据容错

副本机制

数据块校验

任务输出原子性

一、Hadoop容错体系全景

1.1 容错的多层次防护

#mermaid-svg-Kj0ojG0QzvLWl2EU{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Kj0ojG0QzvLWl2EU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Kj0ojG0QzvLWl2EU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Kj0ojG0QzvLWl2EU .error-icon{fill:#552222;}#mermaid-svg-Kj0ojG0QzvLWl2EU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Kj0ojG0QzvLWl2EU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Kj0ojG0QzvLWl2EU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Kj0ojG0QzvLWl2EU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Kj0ojG0QzvLWl2EU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Kj0ojG0QzvLWl2EU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Kj0ojG0QzvLWl2EU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Kj0ojG0QzvLWl2EU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Kj0ojG0QzvLWl2EU .marker.cross{stroke:#333333;}#mermaid-svg-Kj0ojG0QzvLWl2EU svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Kj0ojG0QzvLWl2EU p{margin:0;}#mermaid-svg-Kj0ojG0QzvLWl2EU .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-Kj0ojG0QzvLWl2EU .cluster-label text{fill:#333;}#mermaid-svg-Kj0ojG0QzvLWl2EU .cluster-label span{color:#333;}#mermaid-svg-Kj0ojG0QzvLWl2EU .cluster-label span p{background-color:transparent;}#mermaid-svg-Kj0ojG0QzvLWl2EU .label text,#mermaid-svg-Kj0ojG0QzvLWl2EU span{fill:#333;color:#333;}#mermaid-svg-Kj0ojG0QzvLWl2EU .node rect,#mermaid-svg-Kj0ojG0QzvLWl2EU .node circle,#mermaid-svg-Kj0ojG0QzvLWl2EU .node ellipse,#mermaid-svg-Kj0ojG0QzvLWl2EU .node polygon,#mermaid-svg-Kj0ojG0QzvLWl2EU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Kj0ojG0QzvLWl2EU .rough-node .label text,#mermaid-svg-Kj0ojG0QzvLWl2EU .node .label text,#mermaid-svg-Kj0ojG0QzvLWl2EU .image-shape .label,#mermaid-svg-Kj0ojG0QzvLWl2EU .icon-shape .label{text-anchor:middle;}#mermaid-svg-Kj0ojG0QzvLWl2EU .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Kj0ojG0QzvLWl2EU .rough-node .label,#mermaid-svg-Kj0ojG0QzvLWl2EU .node .label,#mermaid-svg-Kj0ojG0QzvLWl2EU .image-shape .label,#mermaid-svg-Kj0ojG0QzvLWl2EU .icon-shape .label{text-align:center;}#mermaid-svg-Kj0ojG0QzvLWl2EU .node.clickable{cursor:pointer;}#mermaid-svg-Kj0ojG0QzvLWl2EU .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Kj0ojG0QzvLWl2EU .arrowheadPath{fill:#333333;}#mermaid-svg-Kj0ojG0QzvLWl2EU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Kj0ojG0QzvLWl2EU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Kj0ojG0QzvLWl2EU .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Kj0ojG0QzvLWl2EU .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Kj0ojG0QzvLWl2EU .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Kj0ojG0QzvLWl2EU .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Kj0ojG0QzvLWl2EU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Kj0ojG0QzvLWl2EU .cluster text{fill:#333;}#mermaid-svg-Kj0ojG0QzvLWl2EU .cluster span{color:#333;}#mermaid-svg-Kj0ojG0QzvLWl2EU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Kj0ojG0QzvLWl2EU .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Kj0ojG0QzvLWl2EU rect.text{fill:none;stroke-width:0;}#mermaid-svg-Kj0ojG0QzvLWl2EU .icon-shape,#mermaid-svg-Kj0ojG0QzvLWl2EU .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Kj0ojG0QzvLWl2EU .icon-shape p,#mermaid-svg-Kj0ojG0QzvLWl2EU .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Kj0ojG0QzvLWl2EU .icon-shape rect,#mermaid-svg-Kj0ojG0QzvLWl2EU .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Kj0ojG0QzvLWl2EU .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Kj0ojG0QzvLWl2EU .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Kj0ojG0QzvLWl2EU :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

集群级容错

ResourceManager失效

NameNode切换

NameNode失效

应用级容错

ApplicationMaster失效

重新启动AM

从ZK恢复状态

节点级容错

节点失效

标记离线

任务迁移

数据复制

任务级容错

其他节点

任务失败

重试机制

容错层级故障类型恢复机制影响范围
任务级 Map/Reduce任务崩溃 重试、推测执行 单个任务
节点级 DataNode/NodeManager宕机 任务迁移、副本复制 节点上的所有任务
应用级 ApplicationMaster失效 AM重新启动 单个作业
集群级 NameNode/ResourceManager失效 HA主备切换 整个集群

1.2 容错设计的核心思想

Hadoop的容错设计遵循三大原则:

  • 假设故障会发生:在设计层面默认节点会失败,网络会中断
  • 冗余是可靠的基础:数据冗余(副本)、计算冗余(推测执行)
  • 自动化优先:自动检测、自动恢复,减少人工干预
  • 二、任务级容错:重试机制深度解析

    2.1 任务失败的原因分类

    MapReduce任务可能因多种原因失败:

    失败类型典型原因是否可重试
    代码逻辑错误 NullPointerException ❌ 重试无用
    资源不足 内存溢出、磁盘满 ✅ 可换节点重试
    节点故障 DataNode宕机 ✅ 可迁移重试
    网络抖动 拉取数据超时 ✅ 可稍后重试
    外部依赖失效 数据库连接失败 ✅ 可等待后重试

    2.2 重试机制的工作流程

    ResourceManager

    ApplicationMaster

    NodeManager

    Map/Reduce任务

    ResourceManager

    ApplicationMaster

    NodeManager

    Map/Reduce任务

    #mermaid-svg-cM1SwudAKGcEg8vM{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-cM1SwudAKGcEg8vM .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-cM1SwudAKGcEg8vM .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-cM1SwudAKGcEg8vM .error-icon{fill:#552222;}#mermaid-svg-cM1SwudAKGcEg8vM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-cM1SwudAKGcEg8vM .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-cM1SwudAKGcEg8vM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-cM1SwudAKGcEg8vM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-cM1SwudAKGcEg8vM .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-cM1SwudAKGcEg8vM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-cM1SwudAKGcEg8vM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-cM1SwudAKGcEg8vM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-cM1SwudAKGcEg8vM .marker.cross{stroke:#333333;}#mermaid-svg-cM1SwudAKGcEg8vM svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-cM1SwudAKGcEg8vM p{margin:0;}#mermaid-svg-cM1SwudAKGcEg8vM .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-cM1SwudAKGcEg8vM text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-cM1SwudAKGcEg8vM .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-cM1SwudAKGcEg8vM .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-cM1SwudAKGcEg8vM .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-cM1SwudAKGcEg8vM .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-cM1SwudAKGcEg8vM #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-cM1SwudAKGcEg8vM .sequenceNumber{fill:white;}#mermaid-svg-cM1SwudAKGcEg8vM #sequencenumber{fill:#333;}#mermaid-svg-cM1SwudAKGcEg8vM #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-cM1SwudAKGcEg8vM .messageText{fill:#333;stroke:none;}#mermaid-svg-cM1SwudAKGcEg8vM .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-cM1SwudAKGcEg8vM .labelText,#mermaid-svg-cM1SwudAKGcEg8vM .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-cM1SwudAKGcEg8vM .loopText,#mermaid-svg-cM1SwudAKGcEg8vM .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-cM1SwudAKGcEg8vM .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-cM1SwudAKGcEg8vM .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-cM1SwudAKGcEg8vM .noteText,#mermaid-svg-cM1SwudAKGcEg8vM .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-cM1SwudAKGcEg8vM .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-cM1SwudAKGcEg8vM .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-cM1SwudAKGcEg8vM .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-cM1SwudAKGcEg8vM .actorPopupMenu{position:absolute;}#mermaid-svg-cM1SwudAKGcEg8vM .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-cM1SwudAKGcEg8vM .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-cM1SwudAKGcEg8vM .actor-man circle,#mermaid-svg-cM1SwudAKGcEg8vM line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-cM1SwudAKGcEg8vM :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    alt

    [可重试]

    [不可重试]

    loop

    [重试判断]

    运行中

    任务崩溃

    通知任务失败

    记录失败次数

    失败次数 < 最大重试?

    重新申请资源

    分配新容器

    在新节点启动任务

    标记任务失败

    检查作业整体状态

    2.3 核心重试参数

    <!– mapred-site.xml 重试配置 –>
    <configuration>
    <!– Map任务最大尝试次数 –>
    <property>
    <name>mapreduce.map.maxattempts</name>
    <value>4</value>
    <description>Map任务最大尝试次数,默认4次</description>
    </property>

    <!– Reduce任务最大尝试次数 –>
    <property>
    <name>mapreduce.reduce.maxattempts</name>
    <value>4</value>
    <description>Reduce任务最大尝试次数,默认4次</description>
    </property>

    <!– 任务失败百分比阈值 –>
    <property>
    <name>mapreduce.job.map.failures.percent</name>
    <value>0</value>
    <description>Map任务失败百分比超过此值时作业失败,0表示任意失败即失败</description>
    </property>

    <!– 任务超时时间 –>
    <property>
    <name>mapreduce.task.timeout</name>
    <value>600000</value>
    <description>任务无响应超时时间(毫秒),默认600000(10分钟)</description>
    </property>

    <!– 最大任务失败数 –>
    <property>
    <name>mapreduce.max.map.failures.percent</name>
    <value>1</value>
    <description>允许的Map任务失败百分比,超过此值时作业失败</description>
    </property>
    </configuration>

    2.4 重试机制的内部实现

    // ApplicationMaster中任务失败处理的核心逻辑
    public class TaskAttemptListenerImpl {

    private static final int MAX_MAP_ATTEMPTS = 4;
    private static final int MAX_REDUCE_ATTEMPTS = 4;

    public void taskFailed(TaskAttemptId attemptId, String diagnostics) {
    TaskAttempt taskAttempt = getTaskAttempt(attemptId);
    int attemptCount = taskAttempt.getAttemptCount();

    // 判断是否超过最大重试次数
    int maxAttempts = taskAttempt.isMapTask() ?
    MAX_MAP_ATTEMPTS : MAX_REDUCE_ATTEMPTS;

    if (attemptCount < maxAttempts) {
    // 可以重试:调度新尝试
    LOG.info("Task " + attemptId + " failed, retrying. Attempt " +
    (attemptCount + 1) + " of " + maxAttempts);

    // 使用指数退避策略计算重试延迟
    long delay = computeRetryDelay(attemptCount);

    // 调度重试
    scheduleRetry(taskAttempt, delay);
    } else {
    // 超过最大重试次数,标记为永久失败
    LOG.error("Task " + attemptId + " failed permanently after " +
    maxAttempts + " attempts");
    markTaskAsFailed(taskAttempt);

    // 检查作业整体失败阈值
    checkJobFailureThreshold();
    }
    }

    private long computeRetryDelay(int attemptCount) {
    // 指数退避算法:延迟时间随着尝试次数指数增长
    // 第一次重试:30秒
    // 第二次重试:60秒
    // 第三次重试:120秒
    long baseDelay = 30000; // 30秒
    return baseDelay * (long) Math.pow(2, attemptCount 1);
    }
    }

    2.5 指数退避重试策略

    Hadoop采用指数退避算法来避免重试风暴:

    尝试次数延迟时间累计等待
    第1次失败 30秒 30秒
    第2次失败 60秒 1.5分钟
    第3次失败 120秒 3.5分钟
    第4次失败 240秒 7.5分钟

    这种策略的优势:

    • 临时问题(如网络抖动)可快速重试解决
    • 严重故障(如节点宕机)避免频繁无效重试
    • 减少集群资源浪费

    三、推测执行:加速任务完成的容错机制

    3.1 什么是推测执行?

    推测执行是一种"预防性容错"机制:当某个任务运行速度明显慢于其他任务时,系统会在另一个节点上启动一个备份任务,哪个任务先完成就用哪个的结果。

    #mermaid-svg-kAwN3J01XBbcqw3V{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kAwN3J01XBbcqw3V .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kAwN3J01XBbcqw3V .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kAwN3J01XBbcqw3V .error-icon{fill:#552222;}#mermaid-svg-kAwN3J01XBbcqw3V .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kAwN3J01XBbcqw3V .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kAwN3J01XBbcqw3V .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kAwN3J01XBbcqw3V .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kAwN3J01XBbcqw3V .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kAwN3J01XBbcqw3V .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kAwN3J01XBbcqw3V .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kAwN3J01XBbcqw3V .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kAwN3J01XBbcqw3V .marker.cross{stroke:#333333;}#mermaid-svg-kAwN3J01XBbcqw3V svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kAwN3J01XBbcqw3V p{margin:0;}#mermaid-svg-kAwN3J01XBbcqw3V .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-kAwN3J01XBbcqw3V .cluster-label text{fill:#333;}#mermaid-svg-kAwN3J01XBbcqw3V .cluster-label span{color:#333;}#mermaid-svg-kAwN3J01XBbcqw3V .cluster-label span p{background-color:transparent;}#mermaid-svg-kAwN3J01XBbcqw3V .label text,#mermaid-svg-kAwN3J01XBbcqw3V span{fill:#333;color:#333;}#mermaid-svg-kAwN3J01XBbcqw3V .node rect,#mermaid-svg-kAwN3J01XBbcqw3V .node circle,#mermaid-svg-kAwN3J01XBbcqw3V .node ellipse,#mermaid-svg-kAwN3J01XBbcqw3V .node polygon,#mermaid-svg-kAwN3J01XBbcqw3V .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kAwN3J01XBbcqw3V .rough-node .label text,#mermaid-svg-kAwN3J01XBbcqw3V .node .label text,#mermaid-svg-kAwN3J01XBbcqw3V .image-shape .label,#mermaid-svg-kAwN3J01XBbcqw3V .icon-shape .label{text-anchor:middle;}#mermaid-svg-kAwN3J01XBbcqw3V .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kAwN3J01XBbcqw3V .rough-node .label,#mermaid-svg-kAwN3J01XBbcqw3V .node .label,#mermaid-svg-kAwN3J01XBbcqw3V .image-shape .label,#mermaid-svg-kAwN3J01XBbcqw3V .icon-shape .label{text-align:center;}#mermaid-svg-kAwN3J01XBbcqw3V .node.clickable{cursor:pointer;}#mermaid-svg-kAwN3J01XBbcqw3V .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kAwN3J01XBbcqw3V .arrowheadPath{fill:#333333;}#mermaid-svg-kAwN3J01XBbcqw3V .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kAwN3J01XBbcqw3V .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kAwN3J01XBbcqw3V .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kAwN3J01XBbcqw3V .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kAwN3J01XBbcqw3V .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kAwN3J01XBbcqw3V .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kAwN3J01XBbcqw3V .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kAwN3J01XBbcqw3V .cluster text{fill:#333;}#mermaid-svg-kAwN3J01XBbcqw3V .cluster span{color:#333;}#mermaid-svg-kAwN3J01XBbcqw3V div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kAwN3J01XBbcqw3V .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kAwN3J01XBbcqw3V rect.text{fill:none;stroke-width:0;}#mermaid-svg-kAwN3J01XBbcqw3V .icon-shape,#mermaid-svg-kAwN3J01XBbcqw3V .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kAwN3J01XBbcqw3V .icon-shape p,#mermaid-svg-kAwN3J01XBbcqw3V .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kAwN3J01XBbcqw3V .icon-shape rect,#mermaid-svg-kAwN3J01XBbcqw3V .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kAwN3J01XBbcqw3V .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kAwN3J01XBbcqw3V .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kAwN3J01XBbcqw3V :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    推测执行启动

    常规执行

    完成

    完成

    完成

    还在运行

    更快完成

    原任务

    Task1

    完成

    Task2

    Task3

    Task4 Slow

    等待中…

    启动备份任务

    Task4备份

    终止原任务

    3.2 推测执行的工作机制

    // 推测执行判定逻辑
    public class SpeculativeExecutionDecider {

    private static final double SLOW_TASK_THRESHOLD = 1.5;

    public boolean shouldSpeculate(TaskInProgress task,
    double avgProgress,
    double taskProgress) {
    // 判断任务是否过慢
    boolean isSlow = taskProgress < avgProgress * 0.7;

    // 判断是否有足够时间启动备份
    boolean hasTime = task.getRunningTime() > 60000; // 已运行>1分钟

    // 判断是否已有备份任务
    boolean noBackup = !task.hasSpeculativeTask();

    return isSlow && hasTime && noBackup;
    }
    }

    3.3 推测执行配置

    <!– mapred-site.xml 推测执行配置 –>
    <property>
    <name>mapreduce.map.speculative</name>
    <value>true</value>
    <description>是否启用Map推测执行,默认true</description>
    </property>

    <property>
    <name>mapreduce.reduce.speculative</name>
    <value>true</value>
    <description>是否启用Reduce推测执行,默认true</description>
    </property>

    <!– 推测执行高级参数 –>
    <property>
    <name>mapreduce.job.speculative.speculative-cap-running-tasks</name>
    <value>0.1</value>
    <description>可启动备份任务的任务比例上限</description>
    </property>

    <property>
    <name>mapreduce.job.speculative.speculative-cap-total-tasks</name>
    <value>0.01</value>
    <description>备份任务占总任务数比例上限</description>
    </property>

    <property>
    <name>mapreduce.job.speculative.minimum-allowed-tasks</name>
    <value>10</value>
    <description>启动推测执行所需的最小任务数</description>
    </property>

    3.4 推测执行的适用场景

    场景是否适用原因
    数据倾斜 ✅ 适用 个别Reduce处理大量数据
    硬件异构 ✅ 适用 旧机器明显慢于新机器
    节点负载高 ✅ 适用 个别节点被其他任务抢占
    资源充足 ✅ 适用 有足够空闲资源启动备份
    资源紧张 ❌ 不适用 备份任务会加剧资源竞争
    写数据库操作 ❌ 不适用 备份可能导致数据重复

    四、节点级容错:任务迁移与数据恢复

    4.1 节点失效检测

    YARN通过心跳机制检测节点故障:

    // ResourceManager中节点失效检测
    public class NodeHealthChecker {

    private static final long NODE_EXPIRY_INTERVAL = 600000; // 10分钟

    public void checkNodeHealth() {
    long currentTime = System.currentTimeMillis();

    for (NodeId nodeId : activeNodes) {
    NodeStatus status = nodeStatusMap.get(nodeId);
    long lastHeartbeat = status.getLastHeartbeatTime();

    if (currentTime lastHeartbeat > NODE_EXPIRY_INTERVAL) {
    // 节点失效,标记为死亡
    markNodeDead(nodeId);

    // 通知ApplicationMaster处理该节点上的任务
    notifyAMSOfNodeFailure(nodeId);

    // 在HDFS层面触发数据复制
    hdfsNodeFailureHandler(nodeId);
    }
    }
    }
    }

    4.2 节点失效后的任务处理

    #mermaid-svg-v9QPE2TWGlwlbsEL{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-v9QPE2TWGlwlbsEL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-v9QPE2TWGlwlbsEL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-v9QPE2TWGlwlbsEL .error-icon{fill:#552222;}#mermaid-svg-v9QPE2TWGlwlbsEL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-v9QPE2TWGlwlbsEL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-v9QPE2TWGlwlbsEL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-v9QPE2TWGlwlbsEL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-v9QPE2TWGlwlbsEL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-v9QPE2TWGlwlbsEL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-v9QPE2TWGlwlbsEL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-v9QPE2TWGlwlbsEL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-v9QPE2TWGlwlbsEL .marker.cross{stroke:#333333;}#mermaid-svg-v9QPE2TWGlwlbsEL svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-v9QPE2TWGlwlbsEL p{margin:0;}#mermaid-svg-v9QPE2TWGlwlbsEL .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-v9QPE2TWGlwlbsEL .cluster-label text{fill:#333;}#mermaid-svg-v9QPE2TWGlwlbsEL .cluster-label span{color:#333;}#mermaid-svg-v9QPE2TWGlwlbsEL .cluster-label span p{background-color:transparent;}#mermaid-svg-v9QPE2TWGlwlbsEL .label text,#mermaid-svg-v9QPE2TWGlwlbsEL span{fill:#333;color:#333;}#mermaid-svg-v9QPE2TWGlwlbsEL .node rect,#mermaid-svg-v9QPE2TWGlwlbsEL .node circle,#mermaid-svg-v9QPE2TWGlwlbsEL .node ellipse,#mermaid-svg-v9QPE2TWGlwlbsEL .node polygon,#mermaid-svg-v9QPE2TWGlwlbsEL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-v9QPE2TWGlwlbsEL .rough-node .label text,#mermaid-svg-v9QPE2TWGlwlbsEL .node .label text,#mermaid-svg-v9QPE2TWGlwlbsEL .image-shape .label,#mermaid-svg-v9QPE2TWGlwlbsEL .icon-shape .label{text-anchor:middle;}#mermaid-svg-v9QPE2TWGlwlbsEL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-v9QPE2TWGlwlbsEL .rough-node .label,#mermaid-svg-v9QPE2TWGlwlbsEL .node .label,#mermaid-svg-v9QPE2TWGlwlbsEL .image-shape .label,#mermaid-svg-v9QPE2TWGlwlbsEL .icon-shape .label{text-align:center;}#mermaid-svg-v9QPE2TWGlwlbsEL .node.clickable{cursor:pointer;}#mermaid-svg-v9QPE2TWGlwlbsEL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-v9QPE2TWGlwlbsEL .arrowheadPath{fill:#333333;}#mermaid-svg-v9QPE2TWGlwlbsEL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-v9QPE2TWGlwlbsEL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-v9QPE2TWGlwlbsEL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-v9QPE2TWGlwlbsEL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-v9QPE2TWGlwlbsEL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-v9QPE2TWGlwlbsEL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-v9QPE2TWGlwlbsEL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-v9QPE2TWGlwlbsEL .cluster text{fill:#333;}#mermaid-svg-v9QPE2TWGlwlbsEL .cluster span{color:#333;}#mermaid-svg-v9QPE2TWGlwlbsEL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-v9QPE2TWGlwlbsEL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-v9QPE2TWGlwlbsEL rect.text{fill:none;stroke-width:0;}#mermaid-svg-v9QPE2TWGlwlbsEL .icon-shape,#mermaid-svg-v9QPE2TWGlwlbsEL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-v9QPE2TWGlwlbsEL .icon-shape p,#mermaid-svg-v9QPE2TWGlwlbsEL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-v9QPE2TWGlwlbsEL .icon-shape rect,#mermaid-svg-v9QPE2TWGlwlbsEL .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-v9QPE2TWGlwlbsEL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-v9QPE2TWGlwlbsEL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-v9QPE2TWGlwlbsEL :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    ApplicationMaster处理

    NodeManager心跳丢失

    ResourceManager标记节点死亡

    通知所有ApplicationMaster

    获取受影响的容器列表

    将任务状态标记为FAILED

    重新申请资源

    在新节点重启任务

    4.3 数据本地性失效的处理

    当节点失效导致数据本地性无法保证时,ApplicationMaster的处理策略:

    // ApplicationMaster处理数据本地性失效
    public class DataLocalityManager {

    public ContainerRequest handleNodeFailure(Task task,
    Set<NodeId> failedNodes) {
    // 获取任务所需数据的位置
    List<String> dataLocations = task.getDataLocations();

    // 移除失效节点
    dataLocations.removeAll(failedNodes);

    if (dataLocations.isEmpty()) {
    // 没有可用节点,请求任意节点(降级为跨机架)
    return createAnyNodeRequest(task);
    } else {
    // 仍有可用节点,优先请求
    return createLocalRequest(task, dataLocations);
    }
    }
    }

    五、应用级容错:ApplicationMaster恢复

    5.1 AM失效的影响

    ApplicationMaster是整个作业的"大脑",如果AM失效,整个作业将无法继续:

    • Map任务完成但无法通知Reduce
    • Reduce任务无法启动
    • 作业进度丢失

    5.2 AM恢复机制

    Task

    AM2

    NodeManager

    ZooKeeper

    ResourceManager

    ApplicationMaster

    Task

    AM2

    NodeManager

    ZooKeeper

    ResourceManager

    ApplicationMaster

    #mermaid-svg-6b2D57RwUeEXIiWU{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-6b2D57RwUeEXIiWU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-6b2D57RwUeEXIiWU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-6b2D57RwUeEXIiWU .error-icon{fill:#552222;}#mermaid-svg-6b2D57RwUeEXIiWU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-6b2D57RwUeEXIiWU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-6b2D57RwUeEXIiWU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-6b2D57RwUeEXIiWU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-6b2D57RwUeEXIiWU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-6b2D57RwUeEXIiWU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-6b2D57RwUeEXIiWU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-6b2D57RwUeEXIiWU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-6b2D57RwUeEXIiWU .marker.cross{stroke:#333333;}#mermaid-svg-6b2D57RwUeEXIiWU svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-6b2D57RwUeEXIiWU p{margin:0;}#mermaid-svg-6b2D57RwUeEXIiWU .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-6b2D57RwUeEXIiWU text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-6b2D57RwUeEXIiWU .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-6b2D57RwUeEXIiWU .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-6b2D57RwUeEXIiWU .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-6b2D57RwUeEXIiWU .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-6b2D57RwUeEXIiWU #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-6b2D57RwUeEXIiWU .sequenceNumber{fill:white;}#mermaid-svg-6b2D57RwUeEXIiWU #sequencenumber{fill:#333;}#mermaid-svg-6b2D57RwUeEXIiWU #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-6b2D57RwUeEXIiWU .messageText{fill:#333;stroke:none;}#mermaid-svg-6b2D57RwUeEXIiWU .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-6b2D57RwUeEXIiWU .labelText,#mermaid-svg-6b2D57RwUeEXIiWU .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-6b2D57RwUeEXIiWU .loopText,#mermaid-svg-6b2D57RwUeEXIiWU .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-6b2D57RwUeEXIiWU .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-6b2D57RwUeEXIiWU .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-6b2D57RwUeEXIiWU .noteText,#mermaid-svg-6b2D57RwUeEXIiWU .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-6b2D57RwUeEXIiWU .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-6b2D57RwUeEXIiWU .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-6b2D57RwUeEXIiWU .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-6b2D57RwUeEXIiWU .actorPopupMenu{position:absolute;}#mermaid-svg-6b2D57RwUeEXIiWU .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-6b2D57RwUeEXIiWU .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-6b2D57RwUeEXIiWU .actor-man circle,#mermaid-svg-6b2D57RwUeEXIiWU line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-6b2D57RwUeEXIiWU :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    AM崩溃

    检测到AM心跳丢失

    记录AM状态到ZK

    在新节点启动新AM

    启动新ApplicationMaster

    从ZK读取作业状态

    重建作业状态

    重新注册

    获取运行中任务状态

    恢复作业执行

    5.3 AM恢复配置

    <!– yarn-site.xml AM恢复配置 –>
    <property>
    <name>yarn.resourcemanager.am.max-attempts</name>
    <value>2</value>
    <description>ApplicationMaster最大尝试次数</description>
    </property>

    <!– 启用RM恢复 –>
    <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
    </property>

    <!– 使用ZooKeeper存储状态 –>
    <property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>

    <property>
    <name>yarn.resourcemanager.zk-state-store.address</name>
    <value>zk1:2181,zk2:2181,zk3:2181</value>
    </property>

    六、集群级容错:HA架构

    6.1 NameNode HA

    NameNode是HDFS的单点故障,HA架构通过两个NameNode解决:

    #mermaid-svg-VDRsoI9JeqKuQDN4{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-VDRsoI9JeqKuQDN4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VDRsoI9JeqKuQDN4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VDRsoI9JeqKuQDN4 .error-icon{fill:#552222;}#mermaid-svg-VDRsoI9JeqKuQDN4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VDRsoI9JeqKuQDN4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VDRsoI9JeqKuQDN4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VDRsoI9JeqKuQDN4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VDRsoI9JeqKuQDN4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VDRsoI9JeqKuQDN4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VDRsoI9JeqKuQDN4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VDRsoI9JeqKuQDN4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VDRsoI9JeqKuQDN4 .marker.cross{stroke:#333333;}#mermaid-svg-VDRsoI9JeqKuQDN4 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VDRsoI9JeqKuQDN4 p{margin:0;}#mermaid-svg-VDRsoI9JeqKuQDN4 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-VDRsoI9JeqKuQDN4 .cluster-label text{fill:#333;}#mermaid-svg-VDRsoI9JeqKuQDN4 .cluster-label span{color:#333;}#mermaid-svg-VDRsoI9JeqKuQDN4 .cluster-label span p{background-color:transparent;}#mermaid-svg-VDRsoI9JeqKuQDN4 .label text,#mermaid-svg-VDRsoI9JeqKuQDN4 span{fill:#333;color:#333;}#mermaid-svg-VDRsoI9JeqKuQDN4 .node rect,#mermaid-svg-VDRsoI9JeqKuQDN4 .node circle,#mermaid-svg-VDRsoI9JeqKuQDN4 .node ellipse,#mermaid-svg-VDRsoI9JeqKuQDN4 .node polygon,#mermaid-svg-VDRsoI9JeqKuQDN4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VDRsoI9JeqKuQDN4 .rough-node .label text,#mermaid-svg-VDRsoI9JeqKuQDN4 .node .label text,#mermaid-svg-VDRsoI9JeqKuQDN4 .image-shape .label,#mermaid-svg-VDRsoI9JeqKuQDN4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-VDRsoI9JeqKuQDN4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-VDRsoI9JeqKuQDN4 .rough-node .label,#mermaid-svg-VDRsoI9JeqKuQDN4 .node .label,#mermaid-svg-VDRsoI9JeqKuQDN4 .image-shape .label,#mermaid-svg-VDRsoI9JeqKuQDN4 .icon-shape .label{text-align:center;}#mermaid-svg-VDRsoI9JeqKuQDN4 .node.clickable{cursor:pointer;}#mermaid-svg-VDRsoI9JeqKuQDN4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-VDRsoI9JeqKuQDN4 .arrowheadPath{fill:#333333;}#mermaid-svg-VDRsoI9JeqKuQDN4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VDRsoI9JeqKuQDN4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VDRsoI9JeqKuQDN4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VDRsoI9JeqKuQDN4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-VDRsoI9JeqKuQDN4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VDRsoI9JeqKuQDN4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-VDRsoI9JeqKuQDN4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VDRsoI9JeqKuQDN4 .cluster text{fill:#333;}#mermaid-svg-VDRsoI9JeqKuQDN4 .cluster span{color:#333;}#mermaid-svg-VDRsoI9JeqKuQDN4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-VDRsoI9JeqKuQDN4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-VDRsoI9JeqKuQDN4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-VDRsoI9JeqKuQDN4 .icon-shape,#mermaid-svg-VDRsoI9JeqKuQDN4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VDRsoI9JeqKuQDN4 .icon-shape p,#mermaid-svg-VDRsoI9JeqKuQDN4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-VDRsoI9JeqKuQDN4 .icon-shape rect,#mermaid-svg-VDRsoI9JeqKuQDN4 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VDRsoI9JeqKuQDN4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-VDRsoI9JeqKuQDN4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-VDRsoI9JeqKuQDN4 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    NameNode HA架构

    写入EditLog

    写入EditLog

    写入EditLog

    读取EditLog

    读取EditLog

    读取EditLog

    监控

    监控

    NameNode Active

    JournalNode 1

    JournalNode 2

    JournalNode 3

    NameNode Standby

    ZooKeeper集群

    6.2 ResourceManager HA

    类似地,ResourceManager也支持HA:

    <!– yarn-site.xml RM HA配置 –>
    <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
    </property>

    <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yarn-cluster</value>
    </property>

    <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
    </property>

    <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>rm1-host</value>
    </property>

    <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>rm2-host</value>
    </property>

    <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>zk1:2181,zk2:2181,zk3:2181</value>
    </property>

    七、容错机制的监控与调优

    7.1 关键监控指标

    # 查看任务失败情况
    yarn application -status <application-id> | grep -A 10 "Task"

    # 通过Job History Server查看失败任务
    # http://job-history-server:19888

    # 查看AM重试次数
    hadoop job -history <job-output-dir>

    # 实时监控
    watch -n 5 'yarn node -list | grep -i "status"'

    7.2 常见问题排查

    问题现象可能原因排查方法解决方案
    任务频繁重试 代码bug或节点不稳定 查看任务日志 修复代码,排除故障节点
    重试后仍失败 资源不足 查看集群资源使用率 增加资源或减少并行度
    任务不重试直接失败 重试次数设置过小 mapreduce.map.maxattempts 增大重试次数
    AM反复重启 配置不当 查看AM日志 检查AM恢复配置
    推测执行导致资源浪费 盲目启用 查看备份任务数 按场景选择性启用

    7.3 调优建议

    场景重试次数推测执行说明
    关键生产作业 5-8次 启用 确保作业完成
    临时查询 2-3次 禁用 快速失败,及时反馈
    数据倾斜场景 4次 启用 处理长尾任务
    资源紧张集群 3次 禁用 避免浪费资源
    不稳定硬件 6-8次 启用 应对节点故障

    八、总结:容错机制的最佳实践

    8.1 容错体系核心要点

    #mermaid-svg-PsA8sJ3JXsSd4Z93{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .error-icon{fill:#552222;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .marker.cross{stroke:#333333;}#mermaid-svg-PsA8sJ3JXsSd4Z93 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PsA8sJ3JXsSd4Z93 p{margin:0;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge{stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section–1 rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section–1 path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section–1 circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section–1 polygon,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section–1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section–1 text{fill:#ffffff;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .node-icon–1{font-size:40px;color:#ffffff;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-edge–1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-depth–1{stroke-width:17;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section–1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:lightgray;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:#efefef;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-0 rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-0 path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-0 circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-0 polygon,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-0 text{fill:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .node-icon-0{font-size:40px;color:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-depth-0{stroke-width:14;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:lightgray;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:#efefef;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-1 rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-1 path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-1 circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-1 polygon,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-1 text{fill:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .node-icon-1{font-size:40px;color:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-depth-1{stroke-width:11;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:lightgray;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:#efefef;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-2 rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-2 path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-2 circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-2 polygon,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-2 text{fill:#ffffff;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-depth-2{stroke-width:8;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:lightgray;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:#efefef;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-3 rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-3 path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-3 circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-3 polygon,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-3 text{fill:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .node-icon-3{font-size:40px;color:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-depth-3{stroke-width:5;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:lightgray;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:#efefef;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-4 rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-4 path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-4 circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-4 polygon,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-4 text{fill:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .node-icon-4{font-size:40px;color:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-depth-4{stroke-width:2;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:lightgray;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:#efefef;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-5 rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-5 path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-5 circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-5 polygon,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-5 text{fill:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .node-icon-5{font-size:40px;color:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-depth-5{stroke-width:-1;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:lightgray;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:#efefef;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-6 rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-6 path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-6 circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-6 polygon,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-6 text{fill:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .node-icon-6{font-size:40px;color:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-depth-6{stroke-width:-4;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:lightgray;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:#efefef;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-7 rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-7 path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-7 circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-7 polygon,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-7 text{fill:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .node-icon-7{font-size:40px;color:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-depth-7{stroke-width:-7;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:lightgray;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:#efefef;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-8 rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-8 path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-8 circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-8 polygon,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-8 text{fill:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .node-icon-8{font-size:40px;color:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-depth-8{stroke-width:-10;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:lightgray;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:#efefef;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-9 rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-9 path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-9 circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-9 polygon,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-9 text{fill:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .node-icon-9{font-size:40px;color:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-depth-9{stroke-width:-13;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:lightgray;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:#efefef;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-10 rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-10 path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-10 circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-10 polygon,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-10 text{fill:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .node-icon-10{font-size:40px;color:black;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge-depth-10{stroke-width:-16;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:lightgray;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .disabled text{fill:#efefef;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-root rect,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-root path,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-root circle,#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-root text{fill:#ffffff;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-root span{color:#ffffff;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .section-2 span{color:#ffffff;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .edge{fill:none;}#mermaid-svg-PsA8sJ3JXsSd4Z93 .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-PsA8sJ3JXsSd4Z93 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    Hadoop容错

    检测层

    心跳监控

    超时检测

    健康检查

    恢复层

    任务重试

    节点迁移

    AM重启

    HA切换

    预防层

    数据冗余

    推测执行

    资源隔离

    8.2 黄金法则

    “容错不是万能的,没有容错是万万不能的。合理的容错配置,能在稳定性和效率之间找到最佳平衡。”

  • 不要过度重试:重试次数过大会浪费资源,影响作业整体进度
  • 区分失败类型:代码bug重试无效,应尽快失败;资源不足应等待后重试
  • 合理使用推测执行:仅在确实存在长尾任务时启用
  • 监控是关键:建立完善的监控体系,及时发现异常
  • HA是必须的:生产环境必须配置NameNode和ResourceManager HA
  • 8.3 最终建议

    对于大多数生产环境,建议采用以下基准配置:

    参数建议值说明
    mapreduce.map.maxattempts 4 Map任务最多重试4次
    mapreduce.reduce.maxattempts 4 Reduce任务最多重试4次
    mapreduce.map.speculative true 启用Map推测执行
    mapreduce.reduce.speculative false Reduce通常不启用推测
    yarn.resourcemanager.am.max-attempts 2 AM最多重试2次
    mapreduce.task.timeout 600000 任务超时10分钟

    互动问题:你在实际工作中遇到过哪些棘手的任务失败问题?是重试机制配置不当导致的效率问题,还是节点故障引发的连锁反应?欢迎在评论区分享你的经验和解决方案!

    在这里插入图片描述

    🌺The End🌺点点关注,收藏不迷路🌺

    赞(0)
    未经允许不得转载:171主机测评 » Hadoop任务容错机制深度解析:重试机制与故障恢复实战
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址