Ubuntu Hadoop 容错机制如何设置
导读:Ubuntu Hadoop 容错机制设置指南 一 核心容错机制与推荐配置 存储层 HDFS:通过多副本保证数据可靠性,默认副本数为3。在节点年故障率 p=0.02 时,副本数从 1→3 可将年丢失概率从 2% 降至 0.0008%(约 1...
Ubuntu Hadoop 容错机制设置指南
一 核心容错机制与推荐配置
- 存储层 HDFS:通过多副本保证数据可靠性,默认副本数为3。在节点年故障率 p=0.02 时,副本数从 1→3 可将年丢失概率从 2% 降至 0.0008%(约 1/125000 年),可靠性提升约2500 倍;继续增加到 4 副本可靠性提升有限但存储成本从 3× 增至 4×,因此通常保持 3 副本作为性价比最优解。
- 计算层 MapReduce:通过任务重试与推测执行降低慢节点对作业完成时间的影响。可配置每个 Map/Reduce 任务的最大尝试次数(如 mapreduce.map.max.attempts、mapreduce.reduce.max.attempts),并为“拖后腿”的任务自动启动备份执行,从而显著缩短整体作业耗时。
- 服务层高可用 HA:为避免 NameNode 与 ResourceManager 单点故障,建议启用基于 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 的任务重试与推测执行。
三 部署与验证步骤
- 准备与分发:在所有节点完成 JDK、SSH 免密、主机名与 /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 与作业历史中看到该任务被重新调度与重试。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Hadoop 容错机制如何设置
本文地址: https://pptw.com/jishu/767259.html
