4.4.5 其他通信协议

其他三个通信协议,即RefreshUserMappingsProtocol, RefreshAuthorizationPolicyProto-col和AdminOperationsProtocol,均用于动态更新Hadoop MapReduce的相关配置文件。这些配置文件涉及对Hadoop某些模块的访问权限,因而往往只将其使用权限授予一些级别较高的用户(比如Hadoop管理员)。

(1)RefreshUserMappingsProtocol协议

该协议有两个作用:更新用户-用户组映射关系和更新超级用户代理列表,分别对应以下两个方法:


public void refreshUserToGroupsMappings()throws IOException;

public void refreshSuperUserGroupsConfiguration()throws IOException;


为了方便用户执行以上两个操作,Hadoop对其进行了封装,用户直接使用相应的Shell命令即可完成更新操作。

默认情况下,Hadoop使用UNIX/Linux系统中自带的用户-用户组映射关系,且对其进行了缓存。如果管理员在UNIX中修改了某些用户的映射关系,则可使用以下Shell命令更新到Hadoop MapReduce缓存中:


bin/hadoop mradmin-refreshUserToGroupsMappings


Hadoop提供了一种代理机制,允许某些用户伪装成其他用户执行某些操作。用户可在core-site.xml配置文件中添加以下配置选项:


<property>

<name>hadoop.proxyuser.oozie.groups</name>

<value>group1,group2</value>

<description>超级用户oozie可伪装成分组group1和group2中的任何用户</description>

</property>

<property>

<name>hadoop.proxyuser.oozie.hosts</name>

<value>host1,host2</value>

<description>超级用户oozie只能在host1和host2两个节点上进行伪装</description></property>


经过以上配置后,只要用户oozie拥有Hadoop Kerberos key(具体参考第11章),则host1和host2两个节点上group1和group2两个组中的所有用户可统一以用户oozie的身份提交作业。

管理员可动态修改这种超级用户代理列表,并通过以下命令完成更新操作:


bin/hadoop mradmin-refreshSuperUserGroupsConfiguration


(2)RefreshAuthorizationPolicyProtocol协议

该协议用于更新MapReduce服务级别访问控制列表,其中“服务级别访问控制列表”实际上是每个通信协议的访问控制列表。每种通信协议均对应一定的访问权限,比如,拥有JobSubmissionProtocol协议访问权限的用户可以提交作业,查看作业运行情况等。每个协议的访问控制列表可在配置文件hadoop-policy.xml中配置,比如:


<property>

<name>security.job.submission.protocol.acl</name>

<value>user1,user2 group1,group2</value>

</property>


经过以上配置后,用户user1、user2,用户组group1、group2拥有了JobSubmissionProtocol协议的访问权限,他们可以向Hadoop提交作业、查看作业运行情况等。

管理员可以直接通过以下命令动态更新配置文件hadoop-policy.xml:


bin/hadoop mradmin-refreshServiceAcl


该命令最终会调用RefreshAuthorizationPolicyProtocol协议中的refreshServiceAcl方法完成更新操作。

(3)AdminOperationsProtocol协议

该协议提供了用于更新队列访问控制列表(refreshQueues)和更新节点列表(refreshNodes)的两个方法。

❑更新队列访问控制列表:Hadoop以队列为单位管理用户,管理员可配置队列与操作系统用户和用户组之间的映射关系,每个队列对应的用户或者用户组称为该队列的访问控制列表。在Hadoop中,队列访问控制列表信息可能存在于配置文件mapred-queue-acls.xml和调度器配置文件中。在配置文件mapred-queue-acls.xml中,管理员可为每个队列配置两种权限:提交作业权限和管理作业权限。对于某个用户而言,拥有某个队列的作业提交权限意味着该用户可向该队列提交作业并使用该队列中的计算资源,而拥有队列的作业管理权限意味着该用户可以改变任何作业的优先级、杀死任何作业等,比如:


<property>

<name>mapred.queue.myqueue.acl-submit-job</name>

<value>user1,user2 group1</value>

<description>用户user1、user2和用户组group1可向队列myqueue中提交作业</description>

</property>

<property>

<name>mapred.queue.myqueue.acl-administer-job</name>

<value>user1</value>

<description>用户user1可管理队列myqueue</description>

</property>


管理员可通过以下命令动态加载相关配置文件:


bin/hadoop mradmin-refreshQueues


❑更新节点列表:Hadoop允许管理员为节点建立白名单(完全可以信赖的节点列表)和黑名单(不允许加入Hadoop集群的节点列表)。其中,白名单可通过配置选项mapred.hosts(在mapred-site.xml中)指定,而黑名单可通过mapred.hosts.exclude配置选项指定(在mapred-site.xml中)。管理员可通过以下命令动态更新这两个名单:


bin/hadoop mradmin-refreshNodes