【轉】Hadoop YARN授權-權限管理


【From】https://helpcdn.aliyun.com/document_detail/62958.html

 

 

YARN的授權根據授權實體,可以分為服務級別的授權、隊列級別的授權。

進入配置頁面

  1. 登錄阿里雲E-MapReduce控制台
  2. 在頂部菜單欄處,選擇地域(Region)。
  3. 單擊上方的集群管理。
  4. 集群管理頁面,單擊相應集群所在行的詳情。
  5. 在左側導航欄單擊集群服務 > YARN。
  6. 單擊配置頁簽。

服務級別的授權

詳見Hadoop官方文檔

  • 控制特定用戶訪問集群服務,例如提交作業。
  • 配置在hadoop-policy.xml。
  • 服務級別的權限校驗在其他權限校驗之前(如 HDFS 的 permission 檢查 /yarn 提交作業到隊列控制)。
 
說明 一般設置了 HDFS permission 檢查 /yarn 隊列資源控制,可以不設置服務級別的授權控制,用戶可以根據自己需求進行相關配置。

隊列級別的授權

YARN 可以通過隊列對資源進行授權管理,有Capacity Scheduler和Fair Scheduler兩種隊列調度。

這里以Capacity Scheduler為例。

  • 添加配置

    隊列也有兩個級別的授權,一個是提交作業到隊列的授權,一個是管理隊列的授權。

     
    說明
    • 隊列的ACL的控制對象為user/group,設置相關參數時,user和group可同時設置,中間用空格分開,user/group內部可用逗號分開,只有一個空格表示任何人都沒有權限。
    • 隊列ACL繼承:如果一個user/group可以向某個隊列中提交應用程序,則它可以向它的所有子隊列中提交應用程序,同理管理隊列的 ACL也具有繼承性。所以如果要防止某個user/group提交作業到某個隊列,則需要設置該隊列以及該隊列的所有父隊列的ACL來限制該user/group的提交作業的權限。
    • yarn.acl.enable

      ACL開關,設置為true。

    • yarn.admin.acl
      • yarn的管理員設置,如可執行yarn rmadmin/yarn kill等命令,該值必須配置,否則后續的隊列相關的acl管理員設置無法生效。
      • 如上備注,配置值時可以設置user/group。
         
        user1,user2 group1,group2 #user和group用空格隔開 group1,group2 #只有group情況下,必須在最前面加上空格

        EMR集群中需將has配置為admin的ACL權限。

    • yarn.scheduler.capacity.${queue-name}.acl_submit_applications
      • 設置能夠向該隊列提交的user/group。
      • 其中 ${queue-name} 為隊列的名稱,可以是多級隊列,注意多級情況下的ACL繼承機制。
         
        #queue-name=root <property> <name>yarn.scheduler.capacity.root.acl_submit_applications</name> <value> </value> #空格表示任何人都無法往root隊列提交作業 </property> #queue-name=root.testqueue <property> <name>yarn.scheduler.capacity.root.testqueue.acl_submit_applications</name> <value>test testgrp</value> #testqueue只允許test用戶/testgrp組提交作業 </property>
    • yarn.scheduler.capacity.${queue-name}.acl_administer_queue
      • 設置某些user/group管理隊列,例如kill隊列中作業等。
      • queue-name可以是多級,注意多級情況下的ACL繼承機制。
         
        #queue-name=root <property> <name>yarn.scheduler.capacity.root.acl_administer_queue</name> <value> </value> </property> #queue-name=root.testqueue <property> <name>yarn.scheduler.capacity.root.testqueue.acl_administer_queue</name> <value>test testgrp</value> </property>
  • 重啟YARN服務
    • 對於Kerberos安全集群已經默認開啟ACL,用戶可以根據自己需求配置隊列的相關ACL權限控制。
    • 對於非Kerberos安全集群根據上述開啟ACL並配置好隊列的權限控制,重啟YARN服務。
      1. 集群服務 > YARN頁面,單擊右上角的操作 > 重啟 All Components。
      2. 執行集群操作對話框設置相關參數,然后單擊確定。

        單擊右上角查看操作歷史查看任務進度,等待任務完成。

  • 配置示例
    • yarn-site.xml
       
      Key Value
      yarn.acl.enable true
      yarn.admin.acl has
    • capacity-scheduler.xml
    • default隊列:禁用default隊列,不允許任何用戶提交或管理。
    • q1隊列:只允許test用戶提交作業以及管理隊列(如 kill)。
    • q2隊列:只允許foo用戶提交作業以及管理隊列。
     
    <configuration> <property> <name>yarn.scheduler.capacity.maximum-applications</name> <value>10000</value> <description>Maximum number of applications that can be pending and running.</description> </property> <property> <name>yarn.scheduler.capacity.maximum-am-resource-percent</name> <value>0.25</value> <description>Maximum percent of resources in the cluster which can be used to run application masters i.e. controls number of concurrent running applications. </description> </property> <property> <name>yarn.scheduler.capacity.resource-calculator</name> <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value> </property> <property> <name>yarn.scheduler.capacity.root.queues</name> <value>default,q1,q2</value> <!-- 3個隊列--> <description>The queues at the this level (root is the root queue).</description> </property> <property> <name>yarn.scheduler.capacity.root.default.capacity</name> <value>0</value> <description>Default queue target capacity.</description> </property> <property> <name>yarn.scheduler.capacity.root.default.user-limit-factor</name> <value>1</value> <description>Default queue user limit a percentage from 0.0 to 1.0.</description> </property> <property> <name>yarn.scheduler.capacity.root.default.maximum-capacity</name> <value>100</value> <description>The maximum capacity of the default queue.</description> </property> <property> <name>yarn.scheduler.capacity.root.default.state</name> <value>STOPPED</value> <!-- default隊列狀態設置為STOPPED--> <description>The state of the default queue. State can be one of RUNNING or STOPPED.</description> </property> <property> <name>yarn.scheduler.capacity.root.default.acl_submit_applications</name> <value> </value> <!-- default隊列禁止提交作業--> <description>The ACL of who can submit jobs to the default queue.</description> </property> <property> <name>yarn.scheduler.capacity.root.default.acl_administer_queue</name> <value> </value> <!-- 禁止管理default隊列--> <description>The ACL of who can administer jobs on the default queue.</description> </property> <property> <name>yarn.scheduler.capacity.node-locality-delay</name> <value>40</value> </property> <property> <name>yarn.scheduler.capacity.queue-mappings</name> <value>u:test:q1,u:foo:q2</value> <!-- 隊列映射,test用戶自動映射到q1隊列--> <description>A list of mappings that will be used to assign jobs to queues. The syntax for this list is [u|g]:[name]:[queue_name][,next mapping]* Typically this list will be used to map users to queues,for example, u:%user:%user maps all users to queues with the same name as the user. </description> </property> <property> <name>yarn.scheduler.capacity.queue-mappings-override.enable</name> <value>true</value> <!-- 上述queue-mappings設置的映射,是否覆蓋客戶端設置的隊列參數--> <description>If a queue mapping is present, will it override the value specified by the user? This can be used by administrators to place jobs in queues that are different than the one specified by the user. The default is false. </description> </property> <property> <name>yarn.scheduler.capacity.root.acl_submit_applications</name> <value> </value> <!-- ACL繼承性,父隊列需控制住權限--> <description> The ACL of who can submit jobs to the root queue. </description> </property> <property> <name>yarn.scheduler.capacity.root.q1.acl_submit_applications</name> <value>test</value> <!-- q1只允許test用戶提交作業--> </property> <property> <name>yarn.scheduler.capacity.root.q2.acl_submit_applications</name> <value>foo</value> <!-- q2只允許foo用戶提交作業--> </property> <property> <name>yarn.scheduler.capacity.root.q1.maximum-capacity</name> <value>100</value> </property> <property> <name>yarn.scheduler.capacity.root.q2.maximum-capacity</name> <value>100</value> </property> <property> <name>yarn.scheduler.capacity.root.q1.capacity</name> <value>50</value> </property> <property> <name>yarn.scheduler.capacity.root.q2.capacity</name> <value>50</value> </property> <property> <name>yarn.scheduler.capacity.root.acl_administer_queue</name> <value> </value> <!-- ACL繼承性,父隊列需控制住權限--> </property> <property> <name>yarn.scheduler.capacity.root.q1.acl_administer_queue</name> <value>test</value> <!-- q1隊列只允許test用戶管理,如kill作業--> </property> <property> <name>yarn.scheduler.capacity.root.q2.acl_administer_queue</name> <value>foo</value> <!-- q2隊列只允許foo用戶管理,如kill作業--> </property> <property> <name>yarn.scheduler.capacity.root.q1.state</name> <value>RUNNING</value> </property> <property> <name>yarn.scheduler.capacity.root.q2.state</name> <value>RUNNING</value> </property> </configuration>



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM