在Ubuntu系统上,首先需要安装Java(Hadoop依赖)、Hadoop本身,并配置好Hadoop集群的基本环境(如JAVA_HOME、HADOOP_HOME等)。确保Hadoop服务(NameNode、DataNode)已正常启动。
权限管理的关键是通过core-site.xml和hdfs-site.xml文件开启并配置权限功能:
core-site.xml:添加以下配置以启用身份验证和授权(若使用Kerberos,需额外配置hadoop.security.authentication=kerberos):<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hadoop.security.authentication</name>
<value>simple</value> <!-- 简单认证(默认),生产环境建议用kerberos -->
</property>
hdfs-site.xml:开启权限检查和ACL支持,并设置默认权限掩码:<property>
<name>dfs.permissions.enabled</name>
<value>true</value> <!-- 启用权限检查 -->
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value> <!-- 启用ACL(访问控制列表) -->
</property>
<property>
<name>dfs.permissions.umask-mode</name>
<value>022</value> <!-- 默认权限掩码:用户全权限,组和其他人有读权限 -->
</property>
配置完成后,重启HDFS服务使参数生效:stop-dfs.sh && start-dfs.sh
HDFS中的用户和组需与Ubuntu系统的用户/组关联(或单独创建)。以下以创建hadoop用户和组为例:
sudo groupadd hadoop
sudo useradd -r -g hadoop hadoop
sudo passwd hadoop # 设置密码
hdfs dfs -mkdir -p /user/hadoop
hdfs dfs -chown hadoop:hadoop /user/hadoop
此步骤确保hadoop用户有权限访问自己的HDFS目录。使用hdfs dfs命令设置HDFS文件/目录的权限,语法与Linux类似:
chmod设置用户(owner)、组(group)、其他人(others)的读(r)、写(w)、执行(x)权限。例如,给/user/hadoop/data目录赋755权限(所有者全权限,组和其他人有读/执行权限):hdfs dfs -chmod 755 /user/hadoop/data
chown更改文件/目录的所有者和组。例如,将/user/hadoop/data的所有者改为flink用户,组改为flink:hdfs dfs -chown flink:flink /user/hadoop/data
ls命令查看HDFS文件/目录的权限信息:hdfs dfs -ls /user/hadoop/data
输出示例:-rw-r--r-- 1 hadoop hadoop 1024 2025-10-01 10:00 /user/hadoop/data(rw-r--r--表示所有者有读写权限,组和其他人有读权限)。ACL提供更细粒度的权限控制,允许为特定用户或组设置额外权限:
setfacl命令为用户或组添加权限。例如,给用户alice添加/user/hadoop/data的读写执行权限:hdfs dfs -setfacl -m user:alice:rwx /user/hadoop/data
getfacl命令查看文件/目录的ACL规则:hdfs dfs -getfacl /user/hadoop/data
输出示例:user::rwx
user:alice:rwx
group::r-x
other::r-x
-x参数删除指定用户的ACL规则:hdfs dfs -setfacl -x user:alice /user/hadoop/data
通过切换用户身份,测试HDFS权限是否生效:
su命令切换到目标用户(如flink):su - flink
flink用户访问HDFS中的文件/目录。例如,列出/user/hadoop/data的内容:hdfs dfs -ls /user/hadoop/data
若权限设置正确,flink用户(属于flink组且有r-x权限)应能成功列出目录内容;若权限不足,会提示Permission denied。若需更高级的安全控制,可启用Kerberos认证:
sudo apt install krb5-user -y
krb5.conf:编辑/etc/krb5.conf文件,添加KDC和Admin Server信息(需根据实际Kerberos服务器配置)。kinit命令获取票据:kinit hadoop@YOUR-REALM.COM
core-site.xml中设置hadoop.security.authentication=kerberos,并重启HDFS服务。通过以上步骤,可在Ubuntu系统上完成HDFS权限管理的基本设置,确保数据的安全性和访问控制。