温馨提示×

HDFS在CentOS上的分布式配置方法

小樊
40
2026-01-11 05:17:36
栏目: 智能运维

环境准备与规划

  • 准备至少3台 CentOS 7/8 服务器,建议角色分配:1 个 NameNode1 个 SecondaryNameNode≥2 个 DataNode(示例主机名:nn、snn、dn1、dn2)。
  • 配置静态 IP主机名映射:编辑每台机器的 /etc/hosts,示例:
    192.168.10.10 nn
    192.168.10.11 snn
    192.168.10.12 dn1
    192.168.10.13 dn2
  • 安装并验证 Java 8(Hadoop 3.x 推荐):
    sudo yum install -y java-1.8.0-openjdk-devel
    java -version
  • 配置 SSH 免密登录(以 Hadoop 运行用户执行,示例用户为 hadoop):
    ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
    for h in nn snn dn1 dn2; do ssh-copy-id hadoop@$h; done
  • 建议做时间同步(生产环境使用 chrony 或 ntp):
    sudo yum install -y chrony && sudo systemctl enable --now chronyd
  • 创建 Hadoop 运行目录(所有节点):
    sudo mkdir -p /opt/hadoop /data/hdfs/{nn,snn,dn}
    sudo chown -R hadoop:hadoop /opt/hadoop /data/hdfs
  • 关闭或放行防火墙(二选一):
    关闭:sudo systemctl stop firewalld && sudo systemctl disable firewalld
    放行端口:firewall-cmd --permanent --add-port=9000/tcp && firewall-cmd --permanent --add-port=50070/tcp && firewall-cmd --reload

安装 Hadoop 与环境变量

  • hadoop 用户下载并解压(示例版本 3.3.4,放置于 /opt/hadoop):
    wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
    sudo tar -xzf hadoop-3.3.4.tar.gz -C /opt && sudo ln -sfn /opt/hadoop-3.3.4 /opt/hadoop
  • 配置环境变量(所有节点):编辑 /etc/profile.d/hadoop.sh
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
    export HADOOP_HOME=/opt/hadoop
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    使生效:source /etc/profile.d/hadoop.sh
  • $HADOOP_HOME/etc/hadoop/hadoop-env.sh 中显式设置:
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk

核心配置

  • 配置 workers(旧版为 slaves):编辑 $HADOOP_HOME/etc/hadoop/workers,每行一个 DataNode 主机名:
    dn1
    dn2
  • 配置 core-site.xml


    fs.defaultFS
    hdfs://nn:9000


    hadoop.tmp.dir
    /data/hdfs/tmp

  • 配置 hdfs-site.xml


    dfs.replication
    2


    dfs.namenode.name.dir
    file:///data/hdfs/nn


    dfs.datanode.data.dir
    file:///data/hdfs/dn


    dfs.namenode.secondary.http-address
    snn:50090
    dfs.permissions.enabled false
  • 如需同时启用 YARN(可选,便于 MapReduce/Spark on YARN):
    • mapred-site.xml:


      mapreduce.framework.name
      yarn

    • yarn-site.xml:


      yarn.resourcemanager.hostname
      nn


      yarn.nodemanager.aux-services
      mapreduce_shuffle


      yarn.nodemanager.aux-services.mapreduce_shuffle.class
      org.apache.hadoop.mapred.ShuffleHandler

  • /opt/hadoop 目录同步到所有节点(在 nn 上执行):
    for h in snn dn1 dn2; do rsync -avz --delete /opt/hadoop hadoop@$h:/opt/; done

启动与验证

  • 仅在 NameNode 上执行:
    hdfs namenode -format
    start-dfs.sh
    如需 YARN:start-yarn.sh
  • 在各节点检查进程(jps):
    nn 应看到:NameNode、(若启用 YARN)ResourceManager
    snn 应看到:SecondaryNameNode
    dn1/dn2 应看到:DataNode
  • 访问 Web UI:
    NameNode:http://nn:50070(查看 Live Nodes 是否为配置的 DataNode 数量)
    ResourceManager(若启用 YARN):http://nn:8088
  • 基本功能验证:
    hdfs dfs -mkdir -p /test
    hdfs dfs -put /etc/hosts /test
    hdfs dfs -ls /test
    hdfs dfsadmin -report

常见问题与优化

  • 无法免密登录或启动脚本卡住:检查 ~/.ssh/authorized_keys 是否包含所有节点公钥,清理旧密钥后重新 ssh-copy-id;确保 /etc/hosts 与主机名一致。
  • 端口未放行导致无法访问 UI:放行 9000(HDFS RPC)、50070(NN Web)、8088(RM Web),或临时关闭防火墙测试。
  • 多次格式化导致 DataNode 不一致:删除 /data/hdfs/nn/data/hdfs/dn 下的 current 目录后再格式化;或先停集群再清理。
  • 权限问题:测试环境可临时设置 dfs.permissions.enabled=false;生产环境请启用权限并使用 Kerberos。
  • 数据目录权限:确保 /data/hdfs 及其子目录属主为 hadoop:hadoop
  • 资源与稳定性:副本数 dfs.replication 建议与 DataNode 数匹配(如 2 副本对应 ≥2 个 DataNode);必要时配置 dfs.datanode.max.locked.memory 以启用堆外缓存(需系统 ulimit -l 支持)。

0