前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0564-6.1.0-HDFS超级用户(Superuser)和HDFS管理员(Administrator)的区别

0564-6.1.0-HDFS超级用户(Superuser)和HDFS管理员(Administrator)的区别

作者头像
Fayson
发布2019-04-29 15:50:52
5.1K0
发布2019-04-29 15:50:52
举报
文章被收录于专栏:Hadoop实操Hadoop实操

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

Fayson的github: https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

1

文档编写目的

在前面的文章《0550-6.1-如何将普通用户增加到HDFS的超级用户组supergroup》中Fayson介绍过如何将普通用户设置为HDFS的超级用户,从而可以让普通用户也可以执行如dfsadmin相关的功能,但对于HDFS服务来说还有一个管理员用户(dfs.cluster.administrators),无论是超级用户还是管理员用户默认都是hdfs,本文Fayson主要介绍如何将普通用户设置为HDFS的管理员用户。

  • 测试环境

1.CDH6.1

2.Redhat7.4

3.集群已启用Kerberos

4.集群已启用HDFS HA

2

Superuser和Administrator的区别

1.HDFS Superuser/Groups

专门用于HDFS上文件/文件夹的权限。

“无论文件或目录的权限如何,运行NameNode服务的用户(通常为hdfs)和dfs.permissions.superusergroup中定义的组的任何成员(默认为supergroup)都可以读,写或删除任何文件和目录。对于HDFS来说,它们就相当于Linux系统上的root。”

quote "Regardless of the permissions on a file or a directory, the user that the NameNode runs as (typically hdfs) and any member of the group defined in dfs.permissions.superusergroup (defaults to supergroup), can read, write, or delete any file and directory. As far as HDFS is concerned, they are the equivalent of root on a Linux system" Also Reference: https://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-hdfs/HdfsPermissionsGuide.html

2.HDFS Administrators

除了在hadoop-policy.xml中配置ACL之外,某些HDFS管理操作(比如强制HA故障转移),也只能是HDFS集群管理员才能操作。通过在hdfs-site.xml中的参数dfs.cluster.administrators中设置以逗号分隔的用户列表以及以逗号分隔组列表来配置管理员,用户列表和组列表之间需要有空格来隔开。空格前为空则表示用户列表为空,空格后为空则表示组列表为空。

Quote“ACL for the admins, this configuration is used to control who can access the default servlets in the namenode, etc. The value should be a comma separated list of users and groups. The user list comes first and is separated by a space followed by the group list, e.g. "user1,user2 group1,group2". Both users and groups are optional, so "user1", " group1", "", "user1 group1", "user1,user2 group1,group2" are all valid (note the leading space in " group1"). '*' grants access to all users and groups, e.g. '*', '* ' and ' *' are all valid.” 参考: https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

3

配置方法

1.Fayson的测试集群一共有4台机器,首先在4台机器都增加fayson1这个用户,使用“useradd fayson1”命令即可,同时在KDC中增加fayson1这个principal,如何增加这里省略,增加成功后做以下验证。

代码语言:javascript
复制
[root@ip-172-31-6-83 shell]# sh ssh_do_all.sh node.list "id fayson1"
[root@ip-172-31-6-83 shell]# kinit fayson1
[root@ip-172-31-6-83 shell]# klist

2.通过CM进入HDFS服务的配置项,增加如下配置。

CM - HDFS- Configurations : NameNode Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml

代码语言:javascript
复制
<property>
 <name>dfs.cluster.administrators</name>
 <value>hdfs fayson1</value>
 </property>

注:配置的value中,前面的hdfs代表hdfs用户,空一格后fayson1代表的是用户组。

保存配置更改,然后根据提示重启HDFS服务。

重启完成:

3.获取两个NameNode的Service ID,首先从CM进入HDFS服务,并选择任意一个NameNode进入,点击“进程”。

点击hdfs-site.xml

从配置中可以看出ip-172-31-4-105.ap-southeast-1.compute.internal的ID为namenode126,ip-172-31-6-83.ap-southeast-1.compute.internal的ID为namenode50。

4.用fayson1用户登录Kerberos,并执行haadmin相关的命令。

代码语言:javascript
复制
[root@ip-172-31-6-83 shell]# kinit fayson1
Password for fayson1@FAYSON.COM: 
[root@ip-172-31-6-83 shell]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: fayson1@FAYSON.COM

Valid starting       Expires              Service principal
03/09/2019 21:45:25  03/10/2019 21:45:25  krbtgt/FAYSON.COM@FAYSON.COM
        renew until 03/16/2019 21:45:25
[root@ip-172-31-6-83 shell]# hdfs haadmin -getServiceState namenode126
Operation failed: Access denied for user fayson1. Superuser privilege is required
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkSuperuserPrivilege(FSPermissionChecker.java:131)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkSuperuserPrivilege(FSNamesystem.java:4660)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.getServiceStatus(NameNode.java:1770)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getServiceStatus(NameNodeRpcServer.java:1715)
        at org.apache.hadoop.ha.protocolPB.HAServiceProtocolServerSideTranslatorPB.getServiceStatus(HAServiceProtocolServerSideTranslatorPB.java:131)
        at org.apache.hadoop.ha.proto.HAServiceProtocolProtos$HAServiceProtocolService$2.callBlockingMethod(HAServiceProtocolProtos.java:4464)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:523)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:991)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:869)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:815)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2675)

5.在所有节点增加supergroup组,并且将fayson1用户添加到supergroup组中。

代码语言:javascript
复制
groupadd supergroup
usermod -a -G supergroup fayson1
id fayson1

6.再次使用fayson1用户登录Kerberos,并执行haadmin相关的管理员命令。

代码语言:javascript
复制
[root@ip-172-31-6-83 shell]# kinit fayson1
Password for fayson1@FAYSON.COM: 
[root@ip-172-31-6-83 shell]# hdfs haadmin -getServiceState namenode126
standby
[root@ip-172-31-6-83 shell]#

执行成功。

7.执行HA的故障切换。

首先从CM进入HDFS服务确认当前的Active NameNode为ip-172-31-6-83

执行如下命令将Active NameNode切换到ip-172-31-4-105

代码语言:javascript
复制
[root@ip-172-31-6-83 shell]# hdfs haadmin -failover namenode50 namenode126
Failover to NameNode at ip-172-31-4-105.ap-southeast-1.compute.internal/172.31.4.105:8022 successful
[root@ip-172-31-6-83 shell]#

从CM的页面进行确认:

4

总结

1.HDFS服务的superuser和administrator定位是不一样的,超级用户主要是指针对HDFS的文件或者文件夹的超级权限,而管理用户则主要是指对于HDFS服务的一些管理操作比如HA切换,具体可以参考本文的第二章。

2.如果不配置HDFS的dfs.cluster.administrators参数,而使用普通用户执行管理员相关操作时会报以下错误:

代码语言:javascript
复制
"Only Namenode, Secondary Namenode, and administrators may access this servlet"

3.配置HDFS的dfs.cluster.administrators参数的格式是比较复杂的,比较标准的如下格式:

代码语言:javascript
复制
<property>
 <name>dfs.cluster.administrators</name>
 <value>user1,user2 group1,group2</value>
 </property>

代表的是用户user1和user2,以及组group1和group2可以执行相关管理员操作,具体可以参考Apache官网的说明。

“ACL for the admins, this configuration is used to control who can access the default servlets in the namenode, etc. The value should be a comma separated list of users and groups. The user list comes first and is separated by a space followed by the group list, e.g. "user1,user2 group1,group2". Both users and groups are optional, so "user1", " group1", "", "user1 group1", "user1,user2 group1,group2" are all valid (note the leading space in " group1"). '*' grants access to all users and groups, e.g. '*', '* ' and ' *' are all valid.”

4.在CDH中,对于dfs.cluster.administrators参数,hdfs用户是一个必须配置的值放在前面的用户列表里,比如本文示例的配置方法:

代码语言:javascript
复制
<property>
 <name>dfs.cluster.administrators</name>
 <value>hdfs fayson1</value>
 </property>

5.对于haadmin相关的操作,用户不仅需要配置到dfs.cluster.administrators参数中,还需要将该用户增加到supergroup中,否则会报以下错误:

代码语言:javascript
复制
Operation failed: Access denied for user fayson1. Superuser privilege is required
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkSuperuserPrivilege(FSPermissionChecker.java:131)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkSuperuserPrivilege(FSNamesystem.java:4660)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.getServiceStatus(NameNode.java:1770)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getServiceStatus(NameNodeRpcServer.java:1715)
        at org.apache.hadoop.ha.protocolPB.HAServiceProtocolServerSideTranslatorPB.getServiceStatus(HAServiceProtocolServerSideTranslatorPB.java:131)
        at org.apache.hadoop.ha.proto.HAServiceProtocolProtos$HAServiceProtocolService$2.callBlockingMethod(HAServiceProtocolProtos.java:4464)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:523)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:991)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:869)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:815)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2675)

6.但是对于hdfs dfsadmin -fetchImage这个命令,则只需要将普通用户配置到dfs.cluster.administrators参数中就可以了,不用增加到supergroup中。更多其他管理员相关操作命令,Fayson就不逐一验证了。

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档