HDFS在CentOS上的分布式配置方法
小樊
40
2026-01-11 05:17:36
环境准备与规划
- 准备至少3台 CentOS 7/8 服务器,建议角色分配:1 个 NameNode、1 个 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 支持)。