在设置HDFS权限前,需先修改Hadoop核心配置文件,启用权限管理及ACL功能。
core-site.xml添加或修改以下属性,允许代理用户访问(<username>替换为实际需要代理的用户,如hadoop):
<property>
<name>hadoop.proxyuser.<username>.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.<username>.groups</name>
<value>*</value>
</property>
hdfs-site.xml启用权限检查和ACL功能,确保以下属性设置为true:
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.acls.enabled</name>
<value>true</value>
</property>
修改完成后,重启HDFS服务使配置生效:
systemctl restart hadoop-namenode
systemctl restart hadoop-datanode
HDFS权限通常与Linux系统的用户/组关联,建议为Hadoop集群创建专用用户和组。
sudo groupadd hadoopgroup # 创建Hadoop专用组
sudo useradd -G hadoopgroup hadoopuser # 创建用户并加入hadoopgroup
sudo passwd hadoopuser # 设置用户密码
使用Hadoop命令行工具设置HDFS文件/目录的POSIX权限(类似Linux系统)。
644:所有者可读写,组和其他人可读):hdfs dfs -chmod 644 /path/to/file
755:所有者可读写执行,组和其他人可读执行):hdfs dfs -chmod 755 /path/to/directory
hdfs dfs -chmod -R 755 /path/to/directory
/path/to/file所有者设为hadoopuser):hdfs dfs -chown hadoopuser:hadoopgroup /path/to/file
/path/to/directory所属组设为hadoopgroup):hdfs dfs -chgrp hadoopgroup /path/to/directory
ACL允许为特定用户或组设置额外权限,突破POSIX权限的限制。
user1添加rwx权限):hdfs dfs -setfacl -m user:user1:rwx /path/to/directory
hadoopgroup添加r-x权限):hdfs dfs -setfacl -m group:hadoopgroup:r-x /path/to/directory
hdfs dfs -setfacl -m d:user:user1:rwx /path/to/directory
hdfs dfs -getfacl /path/to/directory
user1的所有权限):hdfs dfs -setfacl -x user:user1 /path/to/directory
hdfs dfs -setfacl -b /path/to/directory
设置完成后,需通过以下命令验证权限是否生效。
hdfs dfs -ls /path/to/directory
输出示例:
drwxr-xr-x hadoopuser hadoopgroup /path/to/directory
hdfs dfs -cat /path/to/file
hdfs dfs -copyToLocal /path/to/file ./local_file
若权限设置正确,具备相应权限的用户可正常访问;无权限用户会提示Permission denied。
hdfs dfsadmin -safemode get查看状态,若在安全模式需执行hdfs dfsadmin -safemode leave退出)。/var/log/hadoop/hdfs/),确保权限策略未被违规绕过。kinit获取票据再进行权限操作(如sudo kinit hdfs)。