1. 程式人生 > >yarn佇列提交spark任務許可權控制

yarn佇列提交spark任務許可權控制

轉載請註明出處:http://www.cnblogs.com/xiaodf/

1 CapacityScheduler

1.1 模型介紹

Capacity Scheduler是一個hadoop支援的可插拔的資源排程器,它允許多租戶安全的共享叢集資源,它們的applications在容量限制之下,可以及時的分配資源。使用操作友好的方式執行hadoop應用,同時最大化吞吐能力和叢集利用率。
Capacity Scheduler提供的核心理念就是Queues(佇列),這些queues通常有管理員設定。為了在共享資源上,提供更多的控制和預見性,Capacity Scheduler支援多級queue,以確保在其他queues允許使用空閒資源之前,資源可以在一個組織的sub-queues之間共享。

1.2 資源分配相關引數

1) capacity:Queue的容量百分比,float型別,例如12.5。所有Queue的各個層級的capacity總和必須為100。因為彈性資源分配,如果叢集中有較多的空閒資源,queue中的application可能消耗比此設定更多的Capacity。

2) maximum-capacity: queue capacity最大佔比,float型別,此值用來限制queue中的application的彈性的最大值。預設為-1禁用“彈性限制”。

3) minimum-user-limit-percent:任何時間如果有資源需要,每個queue都會對分配給一個user的資源有一個強制的限制,這個user-limit可以在最大值和最小值之間。此屬性就是最小值,其最大值依賴於提交applications的使用者的個數。例如:假設此值為25,如果有2個使用者向此queue提交application,那麼每個使用者最多消耗queue資源容量的50%;如果第三個user提交了application,那麼任何一個user使用資源容量不能超過queue的33%;4個或者更多的使用者參與,那麼每個使用者資源使用都不會超過queue的25%。預設值為100,表示對沒有使用者資源限制。

4) user-limit-factor:queue容量的倍數,用來設定一個user可以獲取更多的資源。預設值為1,表示一個user獲取的資源容量不能超過queue配置的capacity,無論叢集有多少空閒資源。此值為float型別。[最多仍不超過maximum-capacity]。

1.3 限制應用程式數目相關引數

1) maximum-applications :叢集或者佇列中同時處於等待和執行狀態的應用程式數目上限,這是一個強限制,一旦叢集中應用程式數目超過該上限,後續提交的應用程式將被拒絕,預設值為10000。所有佇列的數目上限可通過引數yarn.scheduler.capacity.maximum-applications設定(可看做預設值),而單個佇列可通過引數yarn.scheduler.capacity..maximum-applications設定適合自己的值。

2) maximum-am-resource-percent:叢集中用於執行應用程式ApplicationMaster的資源比例上限,該引數通常用於限制處於活動狀態的應用程式數目。該引數型別為浮點型,預設是0.1,表示10%。所有佇列的ApplicationMaster資源比例上限可通過引數yarn.scheduler.capacity. maximum-am-resource-percent設定(可看做預設值),而單個佇列可通過引數yarn.scheduler.capacity.. maximum-am-resource-percent設定適合自己的值。

1.4 佇列訪問和許可權控制引數

1) state :佇列狀態可以為STOPPED或者RUNNING,如果一個佇列處於STOPPED狀態,使用者不可以將應用程式提交到該佇列或者它的子佇列中,類似的,如果ROOT佇列處於STOPPED狀態,使用者不可以向叢集中提交應用程式,但正在執行的應用程式仍可以正常執行結束,以便佇列可以優雅地退出。

2) acl_submit_applications:限定哪些Linux使用者/使用者組可向給定佇列中提交應用程式。需要注意的是,該屬性具有繼承性,即如果一個使用者可以向某個佇列中提交應用程式,則它可以向它的所有子佇列中提交應用程式。配置該屬性時,使用者之間或使用者組之間用“,”分割,使用者和使用者組之間用空格分割,比如“user1, user2 group1,group2”。

3) acl_administer_queue:為佇列指定一個管理員,該管理員可控制該佇列的所有應用程式,比如殺死任意一個應用程式等。同樣,該屬性具有繼承性,如果一個使用者可以向某個佇列中提交應用程式,則它可以向它的所有子佇列中提交應用程式。

2 線上例項

2.1 配置

2.1.1 配置ResourceManager使用CapacityScheduler

修改yarn-site.xml中的配置項,指定Scheduler

<property>  
    <name>yarn.resourcemanager.scheduler.class</name>  
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>  
</property>  

2.1.2 配置Queues

CapacityScheduler將會使用capacity-scheduler.xml作為queue配置檔案。CapacityScheduler已經預定義了一個queue:root。系統中所有的queue都是root queue的子節點。其他的queues列表可以通過“yarn.scheduler.capacity.root.queues”中指定,每個queue名稱以“,”分割。CapacityScheduler使用了一個稱為“queue path”的概念來表示“多級queue”,“queue path”是一個queue層級的全路徑,且以“root”開頭,路徑中以“.”作為分割符。
一個指定queue的子節點可以通過“yarn.scheduler.capacity..queues”風格來定義。子節點不從父節點上直接繼承properties,除非另有說明。例如,root queue有a,b,c三個子節點,以及a和b也有自己的sub-queue。

在CM頁面,進入yarn配置,選擇“容量排程程式配置高階配置程式碼段(安全閥)”,寫入如下內容,儲存。
如果在執行時,添加了queue或者修改了ACLs,可按頁面提示重新整理。但是刪除Queue是不支援的,需要依次重啟備用和活動的ResourceManager角色使配置生效。

<?xml version="1.0" encoding="UTF-8"?>
<configuration> 
  <property> 
    <name>yarn.scheduler.capacity.root.queues</name>  
    <value>default,wa,yq</value> 
  </property>  
  <property> 
    <name>yarn.scheduler.capacity.root.capacity</name>  
    <value>100</value> 
  </property>  
  <property> 
    <name>yarn.scheduler.capacity.root.acl_administer_queue</name>  
    <value>admin</value> 
  </property>  
  <property> 
    <name>yarn.scheduler.capacity.root.acl_submit_applications</name>  
    <value>admin</value> 
  </property>
  <property> 
    <name>yarn.scheduler.capacity.root.default.capacity</name> 
    <value>30</value> 
  </property>  
  <property> 
    <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>  
    <value>35</value> 
  </property>  
  <property> 
    <name>yarn.scheduler.capacity.root.wa.capacity</name>  
    <value>45</value> 
  </property>  
  <property> 
    <name>yarn.scheduler.capacity.root.wa.maximum-capacity</name>  
    <value>50</value> 
  </property>  
<property> 
    <name>yarn.scheduler.capacity.root.yq.capacity</name>  
    <value>25</value> 
  </property>  
  <property> 
    <name>yarn.scheduler.capacity.root.yq.maximum-capacity</name>  
    <value>30</value> 
  </property>  
  <property> 
    <name>yarn.scheduler.capacity.root.wa.acl_administer_queue</name>  
    <value>admin,user01</value> 
  </property>  
  <property> 
    <name>yarn.scheduler.capacity.root.wa.acl_submit_applications</name>  
    <value>admin,user01</value> 
  </property>  
  <property> 
    <name>yarn.scheduler.capacity.root.yq.acl_administer_queue</name>  
    <value>admin,user02</value> 
  </property>  
  <property> 
    <name>yarn.scheduler.capacity.root.yq.acl_submit_applications</name>  
    <value>admin,user02</value> 
  </property>  
   <property> 
    <name>yarn.scheduler.capacity.resource-calculator</name>  
    <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value> 
  </property>  
</configuration>

以上配置生效後可以進入Yarn Web UI頁面檢視,佇列設定是否正確,如下所示:

注意:
1、 所有佇列的capacity容量和為100%
2、 配置檔案標紅引數:
yarn.scheduler.capacity.root.acl_administer_queue
yarn.scheduler.capacity.root.acl_submit_applications表示admin使用者為根佇列的超級使用者,即可操作根佇列下的所有子佇列,這個兩個引數必須設定,否則,對子佇列設定的使用者訪問控制不會生效。

2.2 測試

【2.1 配置】裡我們分別配置了佇列wa和yq的可訪問使用者,即使用者user01可訪問佇列wa,使用者user02可訪問佇列yq,使用者admin對可訪問所有佇列,下面我們對以上設定進行測試。
我們通過在yarn佇列中能否提交spark-shell來驗證使用者對佇列是否有訪問許可權。

2.2.1 使用者user01能訪問佇列wa,不能訪問佇列yq

[[email protected] ~]# kinit user01
Password for [email protected]: 

使用者user01對佇列wa有訪問許可權,spark-shell正常提交

[[email protected] ~]# spark-shell --master yarn --queue wa
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.6.0
      /_/

Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67)
Type in expressions to have them evaluated.
Type :help for more information.
Spark context available as sc (master = yarn-client, app id = application_1483697304069_0012).
SQL context available as sqlContext.

scala> 

使用者user01對佇列yq沒有訪問許可權,spark-shell提交報錯

 [[email protected] ~]# spark-shell --master yarn --queue yq
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.6.0
      /_/

Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67)
Type in expressions to have them evaluated.
Type :help for more information.
17/01/09 14:29:09 ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master.

不指定佇列時,使用的是預設佇列default,使用者user01沒有許可權,spark-shell提交報錯

[[email protected] ~]# spark-shell --master yarn 
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.6.0
      /_/

Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67)
Type in expressions to have them evaluated.
Type :help for more information.
17/01/09 16:50:15 ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master.

2.2.2 使用者user02能訪問佇列yq,不能訪問佇列wa

跟user01測試結果相似,此處略。

2.2.3 使用者admin能訪問所有佇列

[[email protected] ~]# kinit admin
Password for [email protected]: 

使用者admin對佇列wa有訪問許可權,spark-shell正常提交

[[email protected] ~]# spark-shell --master yarn --queue wa
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.6.0
      /_/

Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67)
Type in expressions to have them evaluated.
Type :help for more information.
Spark context available as sc (master = yarn-client, app id = application_1483949565487_0001).
SQL context available as sqlContext.
scala> 

使用者admin對佇列yq有訪問許可權,spark-shell正常提交

 [[email protected] ~]# spark-shell --master yarn --queue yq
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.6.0
      /_/

Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67)
Type in expressions to have them evaluated.
Type :help for more information.
Spark context available as sc (master = yarn-client, app id = application_1483949565487_0002).
SQL context available as sqlContext.

scala>

使用者admin對預設佇列default也有訪問許可權,spark-shell正常提交

 [[email protected] ~]# spark-shell --master yarn 
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.6.0
      /_/

Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_67)
Type in expressions to have them evaluated.
Type :help for more information.
Spark context available as sc (master = yarn-client, app id = application_1483949565487_0003).
SQL context available as sqlContext.

scala>

3 參考文件

https://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html

相關推薦

yarn佇列提交spark任務許可權控制

轉載請註明出處:http://www.cnblogs.com/xiaodf/ 1 CapacityScheduler 1.1 模型介紹 Capacity Scheduler是一個hadoop支援的可插拔的資源排程器,它允許多租戶安全的共享叢集資源,它們的applications在容量限制之下,可以及時的

spark系列-應用篇之通過yarn api提交Spark任務

前言 在工作中,大部使用的都是hadoop和spark的shell命令,或者通過java或者scala編寫程式碼。最近工作涉及到通過yarn api處理spark任務,感覺yarn的api還是挺全面的,但是呼叫時需要傳入很多引數,而且會出現一些詭異的問題。雖然

java提交spark任務yarn平臺

一、背景    採用spark的方式處理,所以需要將spark的功能整合到程式碼,採用yarn客戶端的方式管理spark任務。不需要將cdh的一些配置檔案放到resource路徑下,只需要配置一些配置即可,非常方便二、任務管理架構三、介面1、任務提交1.  /**2.   *

hadoop-yarn叢集中,通過shell指令碼自動化提交spark任務

Set() 18/02/11 12:07:32 INFO yarn.Client: Submitting application application_1518316627470_0003 to ResourceManager 18/02/11 12:07:32 INFO impl.YarnClientIm

關於spark-submit 使用yarn-client客戶端提交spark任務的問題

rpc連線超時 17/07/13 16:18:48 WARN NettyRpcEndpointRef: Error sending message [message = AMRegisted(enjoyor4,container_e02_1499931395900_0009

如何在Java應用中提交Spark任務

pre 連接數據庫 路徑 onf body pri 重定向 fim spark 最近看到有幾個Github友關註了Streaming的監控工程——Teddy,所以思來想去還是優化下代碼,不能讓別人看笑話,是不。於是就想改在一下之前最醜陋的一個地方——任務提交 本博客內容

Spark-submit方式提交spark任務

1. 提交命令 export ALL_JARS='--jars /ljj/hbase/phoenix-4.10.0-HBase-1.1-client.jar,/ljj/hbase/phoenix-spark-4.10.0-HBase-1.1.jar,/ljj/hbase/phoen

問題定位分享(9)oozie提交spark任務報 java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/KafkaProducer

oozie中支援很多的action型別,比如spark、hive,對應的標籤為: <spark xmlns="uri:oozie:spark-action:0.1">  ... oozie中sharelib用於存放每個action型別需要的依賴,可以檢視當前所有的acti

經驗分享(5)oozie提交spark任務如何新增依賴

spark任務新增依賴的方式: 1 如果是local方式執行,可以通過--jars來新增依賴; 2 如果是yarn方式執行,可以通過spark.yarn.jars來新增依賴; 這兩種方式在oozie上都行不通,首先oozie上沒辦法也不應該通過local執行,其次通過spark.yarn.jars方式配

Spark On Yarn提交Spark應用程式到Yarn

Spark On Yarn模式配置非常簡單,只需要下載編譯好的Spark安裝包,在一臺帶有Hadoop Yarn客戶端的機器上解壓,簡單配置之後即可使用。 要把Spark應用程式提交到Yarn執行,首先需要配置HADOOP_CONF_DIR或者YARN_C

個人任務備註_編寫提交spark任務的springboot介面

完成載入詞庫介面,和查詢spark任務狀態介面,銷燬spark任務介面 載入詞庫介面執行流程: 1.springboot的介面提交載入詞庫任務並指定執行引數到spark叢集,spark叢集獲取hdfs上事先上傳好的詞庫分析專案jar包並執行指定main方法(注:程式中如果

提交spark任務Requesting 1 new executor because tasks are backlogged (new desired total will be 1)

這兩天在叢集上提交任務時一直提交不成功,一直爆出下面的問題,如果不主動停掉就會一直刷 check your cluster UI to ensure that workers are registered and have sufficient resources,開始以為是資源不足的

Jenkins任務許可權控制

1 安裝外掛 Role-based Authorization Strategy 2 系統管理->全域性安全配置,將授

【資源排程總綱】Yarn原始碼剖析(零) --- spark任務提交yarn的流程

前言 本系列的目的在於試圖剖析spark任務提交至hadoop yarn上的整個過程,從yarn的啟動,以及spark-submit提交任務到yarn上,和在yarn中啟動任務包括yarn元件之間的通訊,用以提升自身知識儲備,記錄學習的過程為目的,由於個人能力有限文章中或許

hive on spark通過YARN-client提交任務不成功

在Hive on spark中  設定spark.master 為 yarn-client , 提交HiveQL任務到yarn上執行,發現任務無法執行 輸出一下錯誤: 可以看到 Hive on S

Spark任務提交 yarn-cluster模式 解決jvm記憶體溢位問題 以及簡單概述jdk7方法區和jdk8元空間

yarn-cluster 提價任務流程 1、提交方式 ./spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi ../lib/spark-exampl

Spark(六)Spark任務提交方式和執行流程

sla handles 解析 nod 就會 clust 它的 管理機 nag 一、Spark中的基本概念 (1)Application:表示你的應用程序 (2)Driver:表示main()函數,創建SparkContext。由SparkContext負責與Cluste

idea以yarn-client 提交任務yarn

flv 一個 bic tar 打包 回來 ctp 獲得 測試 鑒於很多小白經常問我如何用idea提交任務到yarn,這樣測試的時候不用頻繁打包。 昨天,晚上健身回來錄了一個小視頻,說是小視頻但是耗時也比較長,將近40min。可能是健身脫水太多,忘了補充鹽分,無力感十足。

大資料基礎之Spark(1)Spark Submit即Spark任務提交過程

Spark版本2.1.1 一 Spark Submit本地解析 1.1 現象 提交命令: spark-submit --master local[10] --driver-memory 30g --class app.package.AppClass app-1

spark應用yarn模式提交多個應用,一個Running,其它處於accepted狀態

這篇文章解決我們的問題:https://blog.csdn.net/dandykang/article/details/48160927 以前只是開發,現在到了一家大資料剛起步公司,需要提交spark應用到yarn,每次只能執行一個,處於Running狀態,其它處於Accepted狀