首页主机资讯Ubuntu Hadoop 容错机制如何设置

Ubuntu Hadoop 容错机制如何设置

时间2025-12-09 17:01:04发布访客分类主机资讯浏览1483
导读: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 副本作为性价比最优解。
  • 计算层 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 与作业历史中看到该任务被重新调度与重试。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu Hadoop 容错机制如何设置
本文地址: https://pptw.com/jishu/767259.html
Nginx配置反向代理有何技巧 怎样提高 Ubuntu Hadoop 数据读写速度

游客 回复需填写必要信息