温馨提示×

Ubuntu HDFS配置更新步骤

小樊
45
2025-12-14 20:38:45
栏目: 智能运维

Ubuntu 上更新 HDFS 配置的规范流程

一 操作前准备

  • 备份当前配置与环境:将 $HADOOP_HOME/etc/hadoop 目录整体备份;记录关键参数(如 fs.defaultFSdfs.replication、目录路径等);导出当前环境:env | grep HADOOP;确保有 sudo 权限与集群维护窗口。
  • 选择变更方式:
    • 动态生效:仅修改无需重启的参数,使用 hdfs dfsadmin -refreshNodes、重启单个服务或滚动重启。
    • 滚动重启:逐台重启 DataNode,最后重启 NameNode(HA 环境按角色顺序执行)。
    • 全量重启:停机维护窗口内执行 stop-dfs.sh && start-dfs.sh
  • 规划目录与权限:新目录提前创建,权限与属主与运行用户一致(常见为 hdfs:hdfshduser:hadoop),并确保磁盘挂载与空间充足。

二 修改配置文件

  • 进入配置目录:cd $HADOOP_HOME/etc/hadoop
  • 常用文件与作用:
    • core-site.xml:HDFS 入口与基础目录(如 fs.defaultFShadoop.tmp.dir)。
    • hdfs-site.xml:副本数、NameNode/Datanode 数据目录、Web 端口、黑名单等。
    • hadoop-env.sh:设置 JAVA_HOME 与 JVM 参数。
    • 仅涉及 HDFS 时,通常无需改动 yarn-site.xml/mapred-site.xml
  • 示例(按需选取要更新的项):
    • core-site.xml(更新默认文件系统或临时目录)
      <configuration>
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://namenode01:8020</value>
        </property>
        <property>
          <name>hadoop.tmp.dir</name>
          <value>/data/hadoop/tmp</value>
        </property>
      </configuration>
      
    • hdfs-site.xml(更新副本数、目录与端口)
      <configuration>
        <property>
          <name>dfs.replication</name>
          <value>3</value>
        </property>
        <property>
          <name>dfs.namenode.name.dir</name>
          <value>file:///data/hadoop/dfs/name</value>
        </property>
        <property>
          <name>dfs.datanode.data.dir</name>
          <value>file:///data1/hadoop/dfs/data,file:///data2/hadoop/dfs/data</value>
        </property>
        <!-- 可选:Secondary NameNode Web 地址 -->
        <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>secondary01:50090</value>
        </property>
      </configuration>
      
    • hadoop-env.sh(确保 JAVA_HOME 正确)
      export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
      
    上述关键参数与文件用途见 Hadoop 配置说明与示例文档。

三 分发与生效

  • 分发配置:将修改后的配置同步到所有节点(如 rsync -av $HADOOP_HOME/etc/hadoop/ nodeX:$HADOOP_HOME/etc/hadoop/),保持集群一致性。
  • 创建与授权新目录(如变更了本地数据目录):
    sudo mkdir -p /data/hadoop/dfs/{name,data}
    sudo chown -R hdfs:hdfs /data/hadoop
    
  • 使环境变量生效(如修改了 JAVA_HOMEHADOOP_HOME):
    echo 'export HADOOP_HOME=/usr/local/hadoop' >> ~/.bashrc
    echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc
    source ~/.bashrc
    
  • 动态/滚动生效建议:
    • 仅调整 dfs.replication 等无需重启的参数时,可直接生效;涉及 NameNode/Datanode 存储目录 的变更需按下一节处理。
    • 节点变更(退役/新增)可先更新 dfs.hosts / dfs.hosts.exclude,再执行 hdfs dfsadmin -refreshNodes 使节点名单生效。

四 涉及数据目录变更时的安全做法

  • 基本原则:变更 dfs.namenode.name.dirdfs.datanode.data.dir 属于结构性变更,需谨慎处理数据与元数据一致性。
  • 推荐步骤:
    1. 全量备份元数据(如 NameNode 元数据目录 与必要的 JournalNode 数据)。
    2. 按“滚动替换”思路逐台处理 DataNode
      • 将新目录加入 dfs.datanode.data.dir,旧目录保留;
      • 启动 DataNode,待 Web UIhdfs dfsadmin -report 显示新盘已使用且数据块恢复完成后,再下线旧盘。
    3. 处理 NameNode
      • 非 HA:在停机窗口内,先安全停止集群,迁移/指向新 name.dir,执行一次 NameNode 格式化(会清空元数据,务必已备份),再启动;
      • HA:通过 JournalNodeZooKeeper 进行故障切换与升级,避免直接格式化;按官方 HA 流程变更并验证。
    4. 校验:
      • hdfs dfsadmin -report 查看 Live Nodes、容量与磁盘使用;
      • hdfs fsck / -files -blocks -locations 检查块分布与健康;
      • 访问 NameNode Web UI(9870 端口) 确认状态正常。
  • 重要提醒:直接修改 fs.defaultFS 并不会“移动”既有数据;如需迁移数据,请结合 DistCpHDFS Balancer 完成数据重分布与均衡。

五 验证与回滚

  • 快速验证:
    hdfs dfsadmin -report
    hdfs dfs -ls /
    hdfs fsck / -files -blocks -locations
    
    访问 NameNode Web UI:http://:9870 检查集群健康与节点状态。
  • 回滚预案:
    • 配置回滚:将配置文件与目录恢复至变更前版本,按“滚动重启”顺序恢复服务;
    • 数据回滚:若 NameNode 被格式化或元数据受损,使用备份恢复 name.dirJournalNode 数据,再启动集群。
  • 常见端口参考:NameNode Web 9870DataNode HTTP 50075Secondary NameNode Web 50090(不同版本可能略有差异)。

0