HDFS的超级用户是启动NameNode的用户(如hadoop),而非Linux系统的root用户。若以root执行HDFS命令(如hdfs dfs -put),会报Permission denied错误。需切换至HDFS超级用户执行操作:
su - hadoop # 切换至hadoop用户
hdfs dfs -put local_file /hdfs_path # 正确执行命令
若需允许其他用户代理超级用户操作,需配置core-site.xml中的hadoop.proxyuser.<username>.hosts(允许的主机)和hadoop.proxyuser.<username>.groups(允许的组),例如:
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
配置后需重启HDFS服务使生效。
需确保hdfs-site.xml中启用了权限检查和ACL功能,core-site.xml中开启了代理用户配置:
hdfs-site.xml:<property>
<name>dfs.permissions.enabled</name>
<value>true</value> <!-- 启用权限检查(默认true) -->
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value> <!-- 启用ACL(默认false,需手动开启) -->
</property>
<property>
<name>dfs.datanode.acls.enabled</name>
<value>true</value> <!-- DataNode支持ACL -->
</property>
core-site.xml:sudo systemctl restart hadoop-hdfs-namenode
sudo systemctl restart hadoop-hdfs-datanode
通过hdfs dfs命令修改文件/目录的权限和所有权,语法与Linux类似但需指定HDFS路径:
hdfs dfs -ls /hdfs_path # 示例输出:-rw-r--r-- hadoop hadoop 1024 2025-09-27 /hdfs_path/file.txt
755=所有者rwx、组r-x、其他r-x):hdfs dfs -chmod 755 /hdfs_path/dir # 递归修改目录权限需加-R
hdfs dfs -chmod u+w /hdfs_path/file.txt
hdfs dfs -chown hadoop:hadoop /hdfs_path/file.txt # 修改所有者和组
hdfs dfs -chown :hadoop /hdfs_path/dir # 仅修改组
递归修改目录所有权需加-R参数。若基本权限无法满足需求(如给特定用户单独授权),可使用ACL(访问控制列表):
hdfs dfs -setfacl -m user:user1:rwx /hdfs_path/file.txt # 给user1添加rwx权限
hdfs dfs -setfacl -m group:hadoopgroup:r /hdfs_path/dir # 给hadoopgroup组添加读权限
hdfs dfs -setfacl -x user:user1 /hdfs_path/file.txt # 删除user1的所有权限
hdfs dfs -getfacl /hdfs_path/file.txt # 显示文件/目录的ACL规则
hdfs dfs -setfacl -d -m group:hadoop:r-x /hdfs_path/dir # 默认给hadoop组读执行权限
hadoop:hadoop,权限为755(其他用户仅有读执行权限)。解决:
hadoop用户上传文件,或让hadoop用户创建子目录并授权给目标用户。hdfs dfs -chmod 777 / # 允许所有用户读写执行(不推荐生产环境使用)
kinit hadoop@REALM # 输入密码获取票据
hdfs dfs -ls /hdfs_path # 正常执行
票据有效期默认10小时,可通过klist查看,过期后需重新kinit。-R参数递归修改(如hdfs dfs -chmod -R 755 /hdfs_path/dir)。$HADOOP_HOME/logs),监控未授权访问行为。