HDFS开启了权限控制后,当您访问HDFS时需要有合法的权限才能正常操作HDFS,例如读取数据和创建文件夹等。本文为您介绍如何开启HDFS的权限控制。
背景信息
Hadoop提供了以下两种用于决定用户身份的操作模式:
简单模式(Simple):用户的身份由与HDFS建立链接的客户端操作系统决定。在类Unix系统中,等同于
whoami
命令。Kerberos集群模式:客户端的身份由用户自己的Kerberos证书决定。
您可以在创建EMR集群时,开启Kerberos集群模式。Kerberos详情信息,请参见Kerberos概述。
前提条件
已创建集群,详情请参见创建集群。
操作步骤
对于开启Kerberos模式的集群,已经默认设置了HDFS的权限(umask为027),无需配置和重启服务。
未开启Kerberos模式的集群需要按照以下方式添加配置并重启服务。
进入集群服务页面。
在顶部菜单栏处,根据实际情况选择地域和资源组。
单击目标集群操作列的集群服务。
在集群服务页面,单击HDFS服务区域的配置。
在服务配置区域,根据实际需求修改配置项。
参数
描述
dfs.permissions.enabled
开启权限检查,修改参数值为true。
默认值为false。
dfs.datanode.data.dir.perm
DataNode使用的本地文件夹路径的权限。
fs.permissions.umask-mode
权限掩码,在新建文件或文件夹的时候的默认权限值。
dfs.namenode.acls.enabled
默认值为false。ACL控制,修改参数值为true,不仅可以对用户或用户组进行权限控制,还可以对其他用户进行设置。
设置ACL相关命令有
hadoop fs -getfacl [-R] <path>
和hadoop fs -setfacl [-R] [-b |-k -m |-x <acl_spec> <path>] |[--set <acl_spec> <path>]
。dfs.permissions.superusergroup
默认值为hadoop。超级用户组的名称。属于该组的用户都具有超级用户的权限。
保存信息。
单击下方的保存。
在弹出的对话框中,输入执行原因,单击保存。
重启服务。
在HDFS服务页面的右上角,选择 。
在弹出的对话框中,输入执行原因,单击确定。
在确认对话中,单击确定。
您可以单击上方的操作历史查看任务进度,等待任务完成。
使用示例
使用SSH方式登录集群,详情请参见登录集群。
执行以下命令,切换为已创建的emrtest用户。
执行以下命令,使用emrtest用户创建目录。
执行以下命令,查看创建的目录的权限。
hadoop fs -ls /tmp
返回如下类似信息。
drwxr-x--x - emrtest hadoop 0 2022-10-21 14:08 /tmp/emrtest drwxr-x--x - hadoop hadoop 0 2022-10-21 10:06 /tmp/hadoop-yarn drwx-wx-wx - hive hadoop 0 2022-10-21 10:13 /tmp/hive drwxr-x--x - hadoop hadoop 0 2022-10-21 10:23 /tmp/kyuubi-staging drwxrwxrwt - hadoop hadoop 0 2022-10-21 10:23 /tmp/logs
执行以下命令,给目录设置ACL权限并授权给foo用户rwx权限。
执行以下命令,查看目录权限。
hadoop fs -ls /tmp/
返回如下类似信息。
drwxrwx--x+ - emrtest hadoop 0 2022-10-21 14:08 /tmp/emrtest drwxr-x--x - hadoop hadoop 0 2022-10-21 10:06 /tmp/hadoop-yarn drwx-wx-wx - hive hadoop 0 2022-10-21 10:13 /tmp/hive drwxr-x--x - hadoop hadoop 0 2022-10-21 10:23 /tmp/kyuubi-staging drwxrwxrwt - hadoop hadoop 0 2022-10-21 10:23 /tmp/logs
说明权限后面带了+号的表示设置了ACL权限,例如drwxrwx--x+。
执行以下命令,查看ACL权限。
hadoop fs -getfacl /tmp/emrtest
返回如下类似信息。
# file: /tmp/emrtest # owner: emrtest # group: hadoop user::rwx user:foo:rwx group::r-x mask::rwx other::--x
su emrtest
hadoop fs -mkdir /tmp/emrtest
hadoop fs -setfacl -m user:foo:rwx /tmp/emrtest