这对我有用,我只是在 MR v1 中设置了这个属性:
<property>
<name>hadoop.security.authorization</name>
<value>simple</value>
</property>
请通过这个:
访问控制列表 ${HADOOP_CONF_DIR}/hadoop-policy.xml 为每个 Hadoop 服务定义了一个访问控制列表。每个访问控制列表都有一个简单的格式:
用户和组列表都是以逗号分隔的名称列表。这两个列表用空格隔开。
示例:用户 1、用户 2 组 1、组 2。
如果只提供组列表,则在行首添加一个空格,等效于逗号分隔的用户列表,后跟一个空格,或者什么都不意味着只提供一组给定用户。
* 的特殊值意味着允许所有用户访问该服务。
刷新服务级别授权配置 NameNode 和 JobTracker 的服务级别授权配置可以更改,而无需重新启动任何一个 Hadoop 主守护程序。集群管理员可以在master节点上修改${HADOOP_CONF_DIR}/hadoop-policy.xml,并通过-refreshServiceAcl切换到dfsadmin和mradmin命令分别指示NameNode和JobTracker重新加载各自的配置。
刷新NameNode的服务级授权配置:
$ bin/hadoop dfsadmin -refreshServiceAcl
刷新 JobTracker 的服务级别授权配置:
$ bin/hadoop mradmin -refreshServiceAcl
当然,可以使用 ${HADOOP_CONF_DIR}/hadoop-policy.xml 中的 security.refresh.policy.protocol.acl 属性来限制对某些用户/组刷新服务级别授权配置的能力的访问。
示例只允许用户 alice、bob 和 mapreduce 组中的用户向 MapReduce 集群提交作业:
<property>
<name>security.job.submission.protocol.acl</name>
<value>alice,bob mapreduce</value>
</property>
只允许以属于组 datanodes 的用户身份运行的 DataNodes 与 NameNode 通信:
<property>
<name>security.datanode.protocol.acl</name>
<value>datanodes</value>
</property>
Allow any user to talk to the HDFS cluster as a DFSClient:
<property>
<name>security.client.protocol.acl</name>
<value>*</value>
</property>