在 CentOS 上 HDFS 写入失败 是很常见的问题,原因通常涉及 权限、磁盘、配置、服务状态或网络。下面我按高频原因 + 排查方法给你一个系统清单,你可以逐条对照。
HDFS 写入时会检查 DataNode 磁盘剩余空间。
排查:
df -h
dfs.datanode.du.reserved 设置值,就会拒绝写入解决:
hdfs-site.xml:<property>
<name>dfs.datanode.du.reserved</name>
<value>1073741824</value> <!-- 1GB -->
</property>
CentOS 上 HDFS 用户 ≠ 当前 Linux 用户 会很常见。
典型报错:
Permission denied: user=root, access=WRITE, inode="/user"
排查:
whoami
hdfs dfs -ls /
解决:
sudo -u hdfs hdfs dfs -mkdir /user/xxx
hdfs dfs -chown xxx:xxx /user/xxx
写入会被直接拒绝。
排查:
hdfs dfsadmin -safemode get
如果是 ON:
hdfs dfsadmin -safemode leave
⚠️ 如果是频繁进入 SafeMode,通常是 块丢失或磁盘问题
写入需要至少一个 DataNode。
排查:
jps
应看到:
NameNode
DataNode
或:
hdfs dfsadmin -report
解决:
systemctl start hadoop-datanode
# 或
hadoop-daemon.sh start datanode
CentOS 默认 firewalld + SELinux 很严格。
排查防火墙:
systemctl status firewalld
临时关闭测试:
systemctl stop firewalld
SELinux:
getenforce
如果是 Enforcing:
setenforce 0
例如:
dfs.replication = 3
但只有 1 个 DataNode → 写入失败
解决:
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
DataNode 数据目录必须属于 hdfs 用户。
ls -ld /dfs/data
修复:
chown -R hdfs:hadoop /dfs/data
hdfs dfs -put file.txt /
# NameNode
/var/log/hadoop-hdfs/hadoop-hdfs-namenode-*.log
# DataNode
/var/log/hadoop-hdfs/hadoop-hdfs-datanode-*.log
如果你愿意,可以把下面信息贴出来:
hdfs dfsadmin -report 输出jps 输出hdfs-site.xml 关键配置我可以直接告诉你 是哪一条导致的写入失败。