Hadoop 纱线中公平计划程序的ACL不工作
我已使用fair-scheduler.xml中的ACL配置了队列。 但其他用户也可以将作业运行到同一队列中。 我是否需要根据我的队列在其他地方定义ACL。 任何链接或帮助都将不胜感激。谢谢Hadoop 纱线中公平计划程序的ACL不工作,hadoop,mapreduce,yarn,hadoop2,Hadoop,Mapreduce,Yarn,Hadoop2,我已使用fair-scheduler.xml中的ACL配置了队列。 但其他用户也可以将作业运行到同一队列中。 我是否需要根据我的队列在其他地方定义ACL。 任何链接或帮助都将不胜感激。谢谢 <queue name="queue1"> <minResources>10000mb,10vcores</minResources> <maxResources>30000mb,30vcores</max
<queue name="queue1">
<minResources>10000mb,10vcores</minResources>
<maxResources>30000mb,30vcores</maxResources>
<maxRunningApps>10</maxRunningApps>
<weight>2.0</weight>
<schedulingMode>fair</schedulingMode>
<aclAdministerApps>User1</aclAdministerApps>
<aclSubmitApps>User1</aclSubmitApps>
</queue>
</queue>
</allocations>
10000mb,10V容量
30000mb,30V容量
10
2
公平的
用户1
用户1
NB:这是关于容量调度器的。不确定公平计划程序ACL继承行为是否不同
</queue>
</allocations>
acl通过warn.scheduler.capacity..acl\u submit\u应用程序配置,请参阅:
</queue>
</allocations>
warn.scheduler.capacity.root..acl\u submit\u applications
控制谁可以将应用程序提交到给定队列的acl。如果给定用户/组在给定队列或层次结构中的某个父队列上具有必要的ACL,则可以提交应用程序。如果未指定,此属性的ACL将从父队列继承
</queue>
</allocations>
请注意队列继承父队列ACL的部分。由于通常所有队列都从根队列继承,根队列ACL默认为*
:
<property>
<name>yarn.scheduler.capacity.root.default.acl_submit_applications</name>
<value>*</value>
<description>
The ACL of who can submit jobs to the default queue.
</description>
</property>
</queue>
</allocations>
并不是说代码会在队列层次结构上迭代(通过在名称中的每个句点拆分ad),直到父队列之一授予访问权。与容量调度器行为完全相同。直到它到达根队列,此时这段代码片段生效:
/**
* Get the ACLs associated with this queue. If a given ACL is not explicitly
* configured, include the default value for that ACL. The default for the
* root queue is everybody ("*") and the default for all other queues is
* nobody ("")
*/
public AccessControlList getQueueAcl(String queue, QueueACL operation) {
Map<QueueACL, AccessControlList> queueAcls = this.queueAcls.get(queue);
if (queueAcls != null) {
AccessControlList operationAcl = queueAcls.get(operation);
if (operationAcl != null) {
return operationAcl;
}
}
return (queue.equals("root")) ? EVERYBODY_ACL : NOBODY_ACL;
}
</queue>
</allocations>
请注意队列名称实际上是如何与父队列连接起来的,“root”
是所有队列的隐式父队列。因此,您的队列名称实际上是root.queue1
</queue>
</allocations>
因此,这意味着在FS调度器中,所有队列默认为每个人提供访问权限,因为它们都继承了根
队列默认访问权限。您需要显式覆盖配置文件中的根队列ACL。这与CapacityScheduler没有什么不同,但我认为获取默认表单配置的CS行为优于从代码获取默认表单配置的FS行为
</queue>
</allocations>
我实际上没有测试FS行为,但代码可能会在读取时执行。NB:这是关于容量调度器的。不确定公平计划程序ACL继承行为是否不同
</queue>
</allocations>
acl通过warn.scheduler.capacity..acl\u submit\u应用程序配置,请参阅:
</queue>
</allocations>
warn.scheduler.capacity.root..acl\u submit\u applications
控制谁可以将应用程序提交到给定队列的acl。如果给定用户/组在给定队列或层次结构中的某个父队列上具有必要的ACL,则可以提交应用程序。如果未指定,此属性的ACL将从父队列继承
</queue>
</allocations>
请注意队列继承父队列ACL的部分。由于通常所有队列都从根队列继承,根队列ACL默认为*
:
<property>
<name>yarn.scheduler.capacity.root.default.acl_submit_applications</name>
<value>*</value>
<description>
The ACL of who can submit jobs to the default queue.
</description>
</property>
</queue>
</allocations>
并不是说代码会在队列层次结构上迭代(通过在名称中的每个句点拆分ad),直到父队列之一授予访问权。与容量调度器行为完全相同。直到它到达根队列,此时这段代码片段生效:
/**
* Get the ACLs associated with this queue. If a given ACL is not explicitly
* configured, include the default value for that ACL. The default for the
* root queue is everybody ("*") and the default for all other queues is
* nobody ("")
*/
public AccessControlList getQueueAcl(String queue, QueueACL operation) {
Map<QueueACL, AccessControlList> queueAcls = this.queueAcls.get(queue);
if (queueAcls != null) {
AccessControlList operationAcl = queueAcls.get(operation);
if (operationAcl != null) {
return operationAcl;
}
}
return (queue.equals("root")) ? EVERYBODY_ACL : NOBODY_ACL;
}
</queue>
</allocations>
请注意队列名称实际上是如何与父队列连接起来的,“root”
是所有队列的隐式父队列。因此,您的队列名称实际上是root.queue1
</queue>
</allocations>
因此,这意味着在FS调度器中,所有队列默认为每个人提供访问权限,因为它们都继承了根
队列默认访问权限。您需要显式覆盖配置文件中的根队列ACL。这与CapacityScheduler没有什么不同,但我认为获取默认表单配置的CS行为优于从代码获取默认表单配置的FS行为
</queue>
</allocations>
我实际上没有测试FS行为,但代码可能会在读取时执行。NB:这是关于容量调度器的。不确定公平计划程序ACL继承行为是否不同
</queue>
</allocations>
acl通过warn.scheduler.capacity..acl\u submit\u应用程序配置,请参阅:
</queue>
</allocations>
warn.scheduler.capacity.root..acl\u submit\u applications
控制谁可以将应用程序提交到给定队列的acl。如果给定用户/组在给定队列或层次结构中的某个父队列上具有必要的ACL,则可以提交应用程序。如果未指定,此属性的ACL将从父队列继承
</queue>
</allocations>
请注意队列继承父队列ACL的部分。由于通常所有队列都从根队列继承,根队列ACL默认为*
:
<property>
<name>yarn.scheduler.capacity.root.default.acl_submit_applications</name>
<value>*</value>
<description>
The ACL of who can submit jobs to the default queue.
</description>
</property>
</queue>
</allocations>
并不是说代码会在队列层次结构上迭代(通过在名称中的每个句点拆分ad),直到父队列之一授予访问权。与容量调度器行为完全相同。直到它到达根队列,此时这段代码片段生效:
/**
* Get the ACLs associated with this queue. If a given ACL is not explicitly
* configured, include the default value for that ACL. The default for the
* root queue is everybody ("*") and the default for all other queues is
* nobody ("")
*/
public AccessControlList getQueueAcl(String queue, QueueACL operation) {
Map<QueueACL, AccessControlList> queueAcls = this.queueAcls.get(queue);
if (queueAcls != null) {
AccessControlList operationAcl = queueAcls.get(operation);
if (operationAcl != null) {
return operationAcl;
}
}
return (queue.equals("root")) ? EVERYBODY_ACL : NOBODY_ACL;
}
</queue>
</allocations>
请注意队列名称实际上是如何与父队列连接起来的,“root”
是所有队列的隐式父队列。因此,您的队列名称实际上是root.queue1
</queue>
</allocations>
因此,这意味着在FS调度器中,所有队列默认为每个人提供访问权限,因为它们都继承了根
队列默认访问权限。您需要显式覆盖配置文件中的根队列ACL。这与CapacityScheduler没有什么不同,但我认为获取默认表单配置的CS行为优于从代码获取默认表单配置的FS行为
</queue>
</allocations>
我实际上没有测试FS行为,但代码可能会在读取时执行。NB:这是关于容量调度器的。不确定公平计划程序ACL继承行为是否不同
</queue>
</allocations>
acl通过warn.scheduler.capacity..acl\u submit\u应用程序配置,请参阅:
</queue>
</allocations>