协议名称 | 范围 | 说明 |
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发行版本中配置文件的内容有一定差别,可以参考,具体以实际版本的情况为准。
参考链接