在設置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)。