在 CentOS 上配置 HDFS 权限,通常分为 操作系统层面 和 HDFS 自身权限模型 两部分。下面按常见场景给你一个清晰、可操作的说明。
HDFS 权限模型类似 Linux:
dfs.permissions.enabled=true 控制⚠️ HDFS 的“用户”来自于 客户端机器的 Linux 用户(除非启用 Kerberos)
useradd hdfs
useradd hadoop
如果是集群,所有节点用户名、UID 必须一致。
通常由 hdfs 用户启动 NameNode / DataNode:
su - hdfs
编辑:
vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>hadoop</value>
</property>
hadoop组的用户 = HDFS 超级用户
hdfs dfs -ls /
hdfs dfs -chown hdfs:hadoop /user
hdfs dfs -chmod 755 /user
hdfs dfs -chmod 700 /user/secret
hdfs dfs -chgrp hadoop /data
/ hdfs:hadoop 755
/tmp hdfs:hadoop 1777
/user hdfs:hadoop 755
/user/hive hive:hadoop 750
/tmp用 1777(粘滞位),防止误删
Permission denied: user=root, access=WRITE
你用 root 操作 HDFS,但 HDFS 不认识 root
✅ 方式 1(推荐):用对应 Linux 用户
su - hdfs
hdfs dfs -put file /
✅ 方式 2:伪装用户(测试用)
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
hdfs dfs -setfacl -m user:alice:rwx /data
hdfs dfs -getfacl /data
如果是 生产集群:
✅ 用户是否存在
✅ UID 是否一致
✅ dfs.permissions.enabled 是否 true
✅ 是否用对应用户执行命令
✅ NameNode 是否重启生效
如果你愿意,我可以:
你现在是 测试环境还是生产环境?