在 Linux 上访问 HDFS 出现“访问拒绝(Permission denied / Access denied)”,通常不是 Linux 文件权限问题,而是 HDFS 自身的权限或用户身份问题。下面按常见原因给你梳理:
put: Permission denied: user=dr.who, access=WRITE, inode="/user":root:supergroup:drwxr-xr-x
hadoop 命令但 Linux 用户不是 hdfs / hadoop,就会被拒绝hdfs dfs -put file.txt /user/hadoop/
或
sudo -u hdfs hdfs dfs -ls /
export HADOOP_USER_NAME=hdfs
hdfs dfs -ls /
示例:
drwxr-xr-x - hdfs supergroup 0 2024-01-01 /user
如果你不是 hdfs 或不在 supergroup,就不能写。
hdfs dfs -chmod 777 /user
# 或
hdfs dfs -chown youruser:supergroup /user/youruser
<!-- hdfs-site.xml -->
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<value>false</value>
然后重启 NameNode
⚠️ 生产环境不建议关闭
Authorization failed: user not authenticated
kinit youruser@REALM
klist
很多人混淆:
| 层级 | 是否影响 HDFS |
|---|---|
| Linux 文件权限 | ❌ 不影响 |
| HDFS 目录权限 | ✅ 影响 |
| Kerberos | ✅ 影响 |
如果是 本地伪分布式:
getenforce
setenforce 0
whoami
hdfs dfs -ls /
klist
export HADOOP_USER_NAME=hdfs
如果你愿意,可以把 完整报错信息 + 执行命令 + 集群类型(伪分布 / 集群 / CDH / HDP) 发出来,我可以直接帮你定位是哪一类问题。