基于Hadoop SLA认证机制实现权限控制

协议名称 范围 说明
ClientProtocol HDFS 用户代码基于DistributedFileSystem与NameNode交互,可以操作Hadoop的Namespace,以及打开/关闭文件流操作。
ClientDatanodeProtocol HDFS 客户端与DataNode交互协议,用来实现数据库恢复(Block Recovery)。
DatanodeProtocol HDFS DataNode与NameNode通信的协议,DataNode基于此协议向NameNode发送block report,以及DataNode当前状态信息(如负载情况)。
InterDatanodeProtocol HDFS DataNode之间进行通信的协议,用来更新Block副本(replica)信息,如时间戳、长度等信息。
NamenodeProtocol HDFS SecondaryNameNode与NameNode进行通信的协议,用来获取NameNode的状态信息,如进行checkpoint的edits与fsimage。
AdminOperationsProtocol HDFS HDFS管理操作协议。
RefreshUserMappingsProtocol HDFS、MR 用来刷新缓存中用户与用户组映射关系信息,因为无论是操作HDFS,还是运行MapReduce Job,都会用到用户信息。
RefreshAuthorizationPolicyProtocol HDFS、MR 用来更新认证策略(Authorization Policy)配置,对应于配置文件/etc/hadoop/hadoop-policy.xml,控制执行hdfs dfsadmin -refreshServiceAcl和yarn rmadmin -refreshServiceAcl的权限。
HAServiceProtocol HDFS HDFS HA操作协议,用来管理Active NameNode与Stand-by NameNode状态。
ZKFailoverController HDFS ZooKeeper Failover控制器操作权限,用于HDFS HA。
QJournalProtocol HDFS QuorumJournalManager与JournalNode之间通信的协议,用于HDFS HA,用来同步edits,并协调Active NameNode与Stand-by NameNode状态。
HSClientProtocol HDFS 客户端与MR History Server之间通讯的协议,用来查看Job历史信息。
ResourceTracker YARN ResourceManager与NodeManager之间通信的协议。
ResourceManagerAdministrationProtocol YARN ResourceManager管理操作协议。
ApplicationClientProtocol YARN YARN客户端(Application)与ResourceManager通信的协议,包括Job提交、Job取消,查询Application状态信息等。
ApplicationMasterProtocol YARN ApplicationMaster与ResourceManager之间进行通信的协议,包括AM向RM发送注册或注销请求(获取或释放资源)。
ContainerManagementProtocol YARN ApplicationMaster与NodeManager之间进行通信的协议,包括启动/停止Container调用请求。
LocalizationProtocol YARN NodeManager与ResourceLocalizer之间进行通信的协议。
TaskUmbilicalProtocol MR Map/Reduce Task进程与后台父进程(向MR ApplicationMaster请求创建Map/Reduce Task)之间进行通信的协议。
MRClientProtocol MR MR JobClient与MR ApplicationMaster之间进行通信的协议,包括查询Job状态等。

上表中是基于SLA划分的不同服务级别,要想使SLA认证生效,首相需要在Hadoop配置文件/etc/hadoop/core-site.xml中增加如下配置内容:

<property><name>hadoop.security.authorization</name><value>true</value></property>

该配置属性hadoop.security.authorization默认是false,如果集群已经运行,修改了该配置需要重新启动Hadoop集群。然后需要进行SLA认证的详细配置,修改配置文件/etc/hadoop/hadoop-policy.xml,该配置文件中的配置项与对应的SLA协议之间的对应关系如下表所示:

配置项 协议名称
security.client.protocol.acl ClientProtocol
security.client.datanode.protocol.acl ClientDatanodeProtocol
security.datanode.protocol.acl DatanodeProtocol
security.inter.datanode.protocol.acl InterDatanodeProtocol
security.namenode.protocol.acl NamenodeProtocol
security.admin.operations.protocol.acl AdminOperationsProtocol
security.refresh.usertogroups.mappings.protocol.acl RefreshUserMappingsProtocol
security.refresh.policy.protocol.acl RefreshAuthorizationPolicyProtocol
security.ha.service.protocol.acl HAServiceProtocol
security.zkfc.protocol.acl ZKFailoverController
security.qjournal.service.protocol.acl QJournalProtocol
security.mrhs.client.protocol.acl HSClientProtocol
security.resourcetracker.protocol.acl ResourceTracker
security.resourcemanager-administration.protocol.acl ResourceManagerAdministrationProtocol
security.applicationclient.protocol.acl ApplicationClientProtocol
security.applicationmaster.protocol.acl ApplicationMasterProtocol
security.containermanagement.protocol.acl ContainerManagementProtocol
security.resourcelocalizer.protocol.acl LocalizationProtocol
security.job.task.protocol.acl TaskUmbilicalProtocol
security.job.client.protocol.acl MRClientProtocol

配置SLA权限,实际上是增加ACL(配置用户或用户组)基本格式要求如下:

  • 如果既有用户,又有用户组,配置内容格式:user1,user2 group1,group2
  • 如果只有用户组,配置内容前面增加一个空格: group1,group2
  • 配置内容为*,表示所有用户都具有对应的服务操作权限

下面,我们给定如下的需求:

  • hadoop用户作为Hadoop集群的管理员角色,可以执行任何操作
  • 为了防止其他用户使用hadoop用户,使hadoop用户归属于用户组g_super_adm,使属于该组的用户具有集群管理员权限
  • 只有hadoop用户具有修改SLA认证权限的配置
  • Storm集群使用storm用户运行Topology,将实时数据写入HDFS,storm用户只具有操作HDFS权限
  • 用户组g_dfs_client具有操作HDFS权限
  • 用户组g_mr_client具有在Hadoop上运行MapReduce Job的权限
  • 用户stater只具有操作HDFS和运行MapReduce Job的权限

通过进行配置实践,来满足上述要求。修改配置文件/etc/hadoop/hadoop-policy.xml中的部分配置项,具体修改的内容如下所示:

<property><name>security.client.protocol.acl</name><value>stater,storm g_super_adm,g_dfs_client</value><description>ACL for ClientProtocol, which is used by user code
               via the DistributedFileSystem.
               The ACL is a comma-separated list of user and group names. The user and
               group list is separated by a blank. For e.g. "alice,bob users,wheel".
               A special value of "*" means all users are allowed.
          </description></property><property><name>security.refresh.policy.protocol.acl</name><value>hadoop</value><description>ACL for RefreshAuthorizationPolicyProtocol, used by the
               dfsadmin and mradmin commands to refresh the security policy in-effect.
               The ACL is a comma-separated list of user and group names. The user and
               group list is separated by a blank. For e.g. "alice,bob users,wheel".
               A special value of "*" means all users are allowed.
          </description></property><property><name>security.job.client.protocol.acl</name><value>stater g_super_adm,g_mr_client</value><description>ACL for MRClientProtocol, used by job clients to
               communciate with the MR ApplicationMaster to query job status etc.
               The ACL is a comma-separated list of user and group names. The user and
               group list is separated by a blank. For e.g. "alice,bob users,wheel".
               A special value of "*" means all users are allowed.
          </description></property>

其他的配置属性值保持默认值不变即可。为了保证整个Hadoop集群配置相同,需要将修改的配置文件同步到整个集群的所有节点上。
然后,为了使上述配置内容生效,需要执行如下命令:

hdfs dfsadmin -refreshServiceAcl
yarn rmadmin -refreshServiceAcl

修改SLA认证配置,不需要重启服务,根据修改内容执行上述命令就可以生效。
后面参考链接中,有些关于Hadoop SLA的文档内容貌似没有随着Hadoop版本升级而更新,与实际Hadoop发行版本中配置文件的内容有一定差别,可以参考,具体以实际版本的情况为准。

参考链接

猜你喜欢

转载自www.linuxidc.com/Linux/2016-07/133366.htm