在 CentOS 上配置 HDFS 权限,通常分为 操作系统层权限 和 HDFS 自身权限机制 两部分。下面按常见场景给你一个完整、实用的说明。
HDFS 权限模型 类似 Linux 文件系统:
示例:
drwxr-xr-x - hdfs supergroup 0 2024-01-01 /data
HDFS 用户通常是:
hdfs(管理员)yarnspark, hive, data)useradd hdfs
useradd yarn
useradd data
设置密码(可选):
passwd hdfs
在 hadoop-env.sh 中通常不强制,但 生产环境建议:
# 用 hdfs 用户启动 namenode / datanode
su - hdfs
或 systemd 服务中指定用户。
hdfs-site.xml:
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
(默认就是 true)
hdfs-site.xml:
<property>
<name>fs.permissions.umask-mode</name>
<value>022</value>
</property>
含义:
755750hdfs dfs -mkdir /data
hdfs dfs -mkdir /data/logs
hdfs dfs -chown data:data /data
递归:
hdfs dfs -chown -R data:data /data
hdfs dfs -chmod 750 /data
递归:
hdfs dfs -chmod -R 750 /data
hdfs dfs -mkdir /data/private
hdfs dfs -chown data:data /data/private
hdfs dfs -chmod 700 /data/private
hdfssu - hdfs
hdfs dfs -ls / # 可以访问所有目录
hdfs-site.xml:
<property>
<name>dfs.permissions.superusergroup</name>
<value>supergroup</value>
</property>
把用户加入该组:
groupadd supergroup
usermod -aG supergroup hdfs
HDFS 不会自动创建 Linux 用户
✅ 解决:
useradd data
原因:Kerberos 或 HDFS token 问题
✅ 解决:
su - data
hdfs dfs -ls /
检查:
hdfs dfs -ls /data
hdfs dfs -getfacl /data
hdfs-site.xml:
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
hdfs dfs -setfacl -m user:data:rwx /data
hdfs dfs -setfacl -m group:etl:r-x /data
查看:
hdfs dfs -getfacl /data
# 1. 系统用户
id data
# 2. HDFS 目录权限
hdfs dfs -ls /
# 3. 当前用户
whoami
# 4. HDFS 默认权限
hdfs dfsadmin -report
| 目录 | 属主 | 权限 |
|---|---|---|
| / | hdfs | 755 |
| /tmp | hdfs | 1777 |
| /user | hdfs | 755 |
| /user/data | data | 750 |
| /data | data | 750 |
如果你愿意,可以告诉我:
我可以帮你给出 完全贴合你环境的 HDFS 权限方案。