Debian 上部署 HDFS 时,常见问题多集中在主机名解析、SSH 免密、目录权限、端口与防火墙、配置文件一致性、多次格式化导致的数据目录不一致,以及版本差异带来的端口与 Web UI 变化。下面按“症状—原因—解决”给出可操作的排查与修复步骤。
主机名解析失败(UnknownHostException)
192.168.1.10 namenode
192.168.1.11 datanode1
并确保 127.0.0.1 行包含本机主机名;验证:ping namenode、hostname -f 能解析到正确 IP。SSH 免密登录失败(端口非默认 22)
start-dfs.sh 卡住或报错,提示连接 0.0.0.0:22 被拒绝。export HADOOP_SSH_OPTS="-p 345"
并确保本机到本机的 SSH 免密已配置(ssh localhost -p 345 能无密码登录)。权限与目录问题(Permission denied / DataNode 不启动)
sudo mkdir -p /var/lib/hadoop-hdfs/{namenode,datanode}
sudo chown -R hadoop:hadoop /var/lib/hadoop-hdfs /var/log/hadoop-hdfs
sudo chmod -R 755 /var/lib/hadoop-hdfs /var/log/hadoop-hdfs
在 hdfs-site.xml 正确设置:<property><name>dfs.namenode.name.dir</name><value>file:/var/lib/hadoop-hdfs/namenode</value></property>
<property><name>dfs.datanode.data.dir</name><value>file:/var/lib/hadoop-hdfs/datanode</value></property>
并确保环境变量指向 Hadoop 安装目录(如 HADOOP_HOME)。端口未放行或端口被占用
sudo ufw allow 9870,9864,9000/tcp # 示例:9870 NN UI, 9864 DN IPC, 9000 FS
ss -lntp | grep 9870;必要时更换端口或释放占用进程。配置文件不一致或关键参数缺失
<property><name>fs.defaultFS</name><value>hdfs://namenode:9000</value></property>
<property><name>dfs.replication</name><value>3</value></property>
<property><name>dfs.namenode.name.dir</name><value>file:/var/lib/hadoop-hdfs/namenode</value></property>
<property><name>dfs.datanode.data.dir</name><value>file:/var/lib/hadoop-hdfs/datanode</value></property>
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export HADOOP_LOG_DIR=/var/log/hadoop-hdfs
source /etc/profile 或 source ~/.bashrc 使环境变量生效。多次格式化 NameNode 导致 DataNode 无法注册
# 停止集群
$HADOOP_HOME/sbin/stop-dfs.sh
# 备份并清理数据与日志
rm -rf /var/lib/hadoop-hdfs/namenode /var/lib/hadoop-hdfs/datanode
rm -rf $HADOOP_HOME/logs/*
# 重新格式化
hdfs namenode -format
# 启动
$HADOOP_HOME/sbin/start-dfs.sh
生产环境应先备份并核对 clusterID。版本差异导致的端口与 Web UI 变化
<property><name>dfs.namenode.http-address</name><value>namenode:9870</value></property>
<property><name>dfs.datanode.http.address</name><value>0.0.0.0:9864</value></property>
同时确认 fs.defaultFS 端口与客户端一致(常见 9000 或 8020)。tail -f hadoop-*.log,优先看 ERROR/Exception。ping、ss -lntp | grep <端口>,确认防火墙放行。stop-dfs.sh,再 start-dfs.sh,避免状态残留。<configuration>
<property><name>fs.defaultFS</name><value>hdfs://namenode:9000</value></property>
<property><name>hadoop.tmp.dir</name><value>/var/cache/hadoop/tmp</value></property>
</configuration>
<configuration>
<property><name>dfs.replication</name><value>3</value></property>
<property><name>dfs.namenode.name.dir</name><value>file:/var/lib/hadoop-hdfs/namenode</value></property>
<property><name>dfs.datanode.data.dir</name><value>file:/var/lib/hadoop-hdfs/datanode</value></property>
<property><name>dfs.namenode.http-address</name><value>namenode:9870</value></property>
</configuration>
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export HADOOP_LOG_DIR=/var/log/hadoop-hdfs
hdfs namenode -format
$HADOOP_HOME/sbin/start-dfs.sh
hdfs dfsadmin -report
hdfs dfs -mkdir /test
hdfs dfs -put /etc/hosts /test
hdfs dfs -ls /test
访问 http://namenode:9870 查看集群状态。