Hadoop 纱线中公平计划程序的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

我已使用fair-scheduler.xml中的ACL配置了队列。 但其他用户也可以将作业运行到同一队列中。 我是否需要根据我的队列在其他地方定义ACL。 任何链接或帮助都将不胜感激。谢谢

 <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>