在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权限管理的基本设置,确保数据的安全性和访问控制。