在 CentOS 上设置 HDFS 权限,通常涉及 HDFS 自身的权限模型 和 Linux 用户/组映射 两个方面。下面按常见场景给你一个完整说明。
HDFS 权限与 Linux 类似,分为:
权限类型:
r(读)w(写)x(执行,目录有效)示例:
drwxr-xr-x - hdfs supergroup 0 2024-01-01 /data
systemctl status hadoop-hdfs-namenode
systemctl status hadoop-hdfs-datanode
su - hdfs
或:
sudo -u hdfs hdfs dfs -ls /
hdfs dfs -chmod 755 /data
hdfs dfs -chmod -R 755 /data
示例:
hdfs dfs -chmod 777 /tmp
hdfs dfs -chown user:group /data
hdfs dfs -chown -R user:group /data
示例:
hdfs dfs -chown hive:hive /user/hive
hdfs dfs -chgrp supergroup /data
hdfs dfs -chgrp -R supergroup /data
✅ HDFS 的用户和组名来自 Linux 用户
例:
useradd bigdata
groupadd bigdata
usermod -aG bigdata bigdata
然后 HDFS 才能识别该用户:
hdfs dfs -chown bigdata:bigdata /user/bigdata
⚠️ 如果 HDFS 启用了权限检查,而 Linux 用户不存在,会报错:
Permission denied
hdfs dfsadmin -getDfsQuota /user
或查看配置文件:
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
关键配置:
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
然后重启 HDFS:
stop-dfs.sh
start-dfs.sh
控制新建文件/目录的默认权限:
<property>
<name>fs.permissions.umask-mode</name>
<value>022</value>
</property>
解释:
022 → 新建目录 755027 → 新建目录 750<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
hdfs dfs -setfacl -m user:alice:rwx /data
hdfs dfs -setfacl -m group:dev:r-x /data
hdfs dfs -getfacl /data
# 创建 Linux 用户
useradd sparkuser
# 创建 HDFS 目录
hdfs dfs -mkdir /user/sparkuser
hdfs dfs -chown -R sparkuser:sparkuser /user/sparkuser
hdfs dfs -chmod 750 /user/sparkuser
hdfs dfs -ls /user
whoami
hdfs dfs -getfacl /user/hive
| 操作 | 命令 |
|---|---|
| 修改权限 | hdfs dfs -chmod |
| 修改用户 | hdfs dfs -chown |
| 修改组 | hdfs dfs -chgrp |
| 设置 ACL | hdfs dfs -setfacl |
| 查看 ACL | hdfs dfs -getfacl |
| 关闭权限 | dfs.permissions.enabled=false |
如果你愿意,可以告诉我:
我可以帮你给出精确到你环境的配置方案。