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