温馨提示×

Ubuntu Hadoop 容错机制如何设置

小樊
39
2025-12-08 21:42:10
栏目: 智能运维

Ubuntu Hadoop 容错机制设置指南

一 核心容错机制与推荐配置

  • 存储层 HDFS:通过多副本保证数据可靠性,默认副本数为3。在节点年故障率 p=0.02 时,副本数从 1→3 可将年丢失概率从 2% 降至 0.0008%(约 1/125000 年),可靠性提升约2500 倍;继续增加到 4 副本可靠性提升有限但存储成本从 增至 ,因此通常保持 3 副本作为性价比最优解。
  • 计算层 MapReduce:通过任务重试与推测执行降低慢节点对作业完成时间的影响。可配置每个 Map/Reduce 任务的最大尝试次数(如 mapreduce.map.max.attempts、mapreduce.reduce.max.attempts),并为“拖后腿”的任务自动启动备份执行,从而显著缩短整体作业耗时。
  • 服务层高可用 HA:为避免 NameNodeResourceManager 单点故障,建议启用基于 ZooKeeper 的自动故障转移(ZKFC)。HDFS 侧配置 dfs.ha.automatic-failover.enabled=true 与合适的隔离方法(如 sshfence);YARN 侧启用 yarn.resourcemanager.ha.enabled=true 并配置 yarn.resourcemanager.zk-address 指向 ZooKeeper 集群。

二 关键配置示例

  • HDFS HA(core-site.xml 与 hdfs-site.xml 片段)
<!-- core-site.xml -->
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>master:2181,slave1:2181,slave2:2181</value>
  </property>
</configuration>

<!-- hdfs-site.xml -->
<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>
  <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>master:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>slave1:8020</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>master:50070</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>slave1:50070</value>
  </property>
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
  </property>
  <property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/hadoop/.ssh/id_rsa</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
</configuration>
  • YARN HA(yarn-site.xml 片段)
<configuration>
  <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.zk-address</name>
    <value>master:2181,slave1:2181,slave2:2181</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>master</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>slave1</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
</configuration>
  • MapReduce 容错(mapred-site.xml 片段)
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.map.max.attempts</name>
    <value>4</value>
  </property>
  <property>
    <name>mapreduce.reduce.max.attempts</name>
    <value>4</value>
  </property>
  <!-- 启用推测执行(按需) -->
  <property>
    <name>mapreduce.map.speculative</name>
    <value>true</value>
  </property>
  <property>
    <name>mapreduce.reduce.speculative</name>
    <value>true</value>
  </property>
</configuration>

上述配置分别覆盖了 HDFS 的 HA+JournalNode+自动故障转移、YARN 的 ResourceManager HA,以及 MapReduce 的任务重试与推测执行

三 部署与验证步骤

  • 准备与分发:在所有节点完成 JDKSSH 免密主机名与 /etc/hosts时间同步等基础环境配置;将 Hadoop 配置目录分发到各节点保持一致。
  • 启动 JournalNode:在各 JournalNode 节点执行启动命令(如 start-dfs.sh journalnode 或 hadoop-daemons.sh start journalnode)。
  • 格式化与引导:在第一个 NameNode 执行 hdfs namenode -format;在第二个 NameNode 执行 hdfs namenode -bootstrapStandby 同步元数据。
  • 初始化 ZKFC:在任一 NameNode 执行 hdfs zkfc -formatZK,为自动故障转移准备 ZooKeeper 节点。
  • 启动与检查:启动 HDFS(start-dfs.sh)与 YARN(start-yarn.sh);使用 hdfs haadmin -report 查看 NameNode 状态,使用 yarn rmadmin -getServiceState rm1/rm2 检查 ResourceManager 状态,确认 Active/Standby 正常。

四 验证容错效果

  • 数据可靠性验证:向 HDFS 写入数据后关闭一个包含副本的 DataNode,执行 hdfs fsck / -files -blocks -locations 观察块分布与健康状态,确认数据仍可读且副本数满足策略。
  • NameNode 故障转移:在 Active NameNode 上停止进程或断网,观察 ZKFC 是否在秒级将 Standby 切换为 Active,并通过 hdfs haadmin -getServiceState nn1 校验状态切换。
  • 任务容错与推测执行:提交一个包含“随机休眠”的 Map 任务以制造“慢任务”,在 YARN Web UI(默认 8088) 可观察到为慢任务启动备份执行;手动 kill 某个 YarnChild 进程后,可在 8088 与作业历史中看到该任务被重新调度与重试。

0