您好,登錄后才能下訂單哦!
最近一周幾乎都在做關(guān)于yarn的資源隔離的事情,也重新看了一下以前看過的關(guān)于yarn的書,這次就當是寫寫自己的工作總結(jié)吧。
之所以要做資源隔離,是因為現(xiàn)在公司內(nèi)部有很多團隊都在使用yarn來提交各式各樣的任務(wù),例如hive的mapreduce,spark在yarn上的部署,sqoop導數(shù)據(jù)等等,為了防止單個任務(wù)使用過多資源,而導致整個集群的其他任務(wù)不可運行,所以就要使用yarn的資源隔離了。
雖然yarn中,有Capacity Scheduler以及Fair Scheduler這兩種方式來實現(xiàn)資源在不同任務(wù)(準確的說應(yīng)該是隊列)之間的調(diào)度,但是個人感覺這兩種分配策略在資源隔離上面真的沒有什么太大的區(qū)別,因為兩者都可以對各個隊列限制使用的最大最小資源;而且也可將現(xiàn)有資源劃分為不同的隊列,每個應(yīng)用只在特定的隊列提交。當然對于隊列內(nèi)部任務(wù)之間的資源隔離,F(xiàn)air Scheduler支持的方式多了一種FIFO策略,由于公司使用的hadoop默認使用Fair Scheduler,所以最后還是使用的Fair策略。下面大概講一下自己是怎么做的吧。
step1:針對不同的開發(fā)團隊,建立不同的用戶,就比如下面的截圖,針對兩個group分別建立了group1以及group2這兩個用戶:
step2:修改權(quán)限
這里的權(quán)限包括hadoop權(quán)限、hdfs權(quán)限,這就要根據(jù)自己的實際情況來看了;
step3:修改yarn-site.xml
主要修改了以下幾個參數(shù)
yarn.resourcemanager.scheduler.class:配置使用哪種Scheduler,由于使用的是FairScheduler,所以設(shè)置為org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
yarn.scheduler.fair.allocation.file:指定分配策略文件路徑
yarn.scheduler.fair.preemption:是否支持隊列之間的資源搶占,雖然設(shè)置為false,但是還是多多少少會出現(xiàn)繁忙隊列搶占了一點空閑隊列資源的現(xiàn)象
關(guān)于yarn-site的配置參數(shù)還有很多,大家可以在網(wǎng)上找找;
step4:編寫fair scheduler的具體配置文件,在自己測試的時候,大概如下面的截圖
首先簡單介紹一下,yarn中資源是按照隊列(或者說是資源池)來分配的,隊列有自己的子隊列,而root隊列就像java中的Object隊列一樣(如果沒有設(shè)置,所有應(yīng)用向root.default隊列提交應(yīng)用),是所有隊列的父隊列。在上面的配置文件中,這對group1隊列定義了如下規(guī)則:
1.group1以及group2這兩個root隊列的子隊列(這里隊列命名跟用戶命名一樣);
2.group1隊列最少保留10G內(nèi)存、10個cpu內(nèi)核,最多使用15G內(nèi)存、15個cpu內(nèi)核;
3.隊列內(nèi)的應(yīng)用才用公平的調(diào)度策略分配資源,最多可以在group1內(nèi)運行50個應(yīng)用;
4.只有g(shù)roup1以及hadoop用戶可以向group1隊列提交應(yīng)用;
5.只用hadoop用戶可以管理group1隊列(即只有hadoop可以kill這上面的應(yīng)用)。
step5:重啟yarn
最后通過spark-shell --master yarn --num-executors --executor-memory --queue測試,發(fā)現(xiàn)的確可以做到資源隔離,達到如下效果:
1.group1用戶只能向group1隊列提交應(yīng)用,而且即使使用資源大于最大值,也只是會略微超過一點點,不會超過很多(有興趣的朋友可以自己試試);
2.group1用戶是不能向group2隊列提交任務(wù)的;
3.hadoop用戶還是可以向group1、group2、default三個隊列提交任務(wù),這樣可以保證系統(tǒng)有個類似root用戶的角色。
但是發(fā)現(xiàn)沒能實現(xiàn)acl的功能,即無論是hadoop、group1、group2還是任何可以執(zhí)行yarn命令的用戶都可以通過yarn application -kill殺死任何隊列上的程序。多次參考書本以及官網(wǎng),但是仍然沒有成功,最后不得已,只能說是控制yarn命令的權(quán)限為700,只讓hadoop用戶可以執(zhí)行這個命令,希望以后可以找出更好地解決方案。
2017年1月7日
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。