一、現(xiàn)狀
當(dāng)前yarn上任務(wù)只有隊列間的資源搶占,隊列內(nèi)缺乏任務(wù)優(yōu)先級配置,因此所有任務(wù)的優(yōu)先級都是默認(rèn)的,默認(rèn)優(yōu)先級的配置通過此參數(shù)配置yarn.scheduler.capacity.root.<leaf-queue-path>.default-application-priority,默認(rèn)值為0;此外hive on tez的任務(wù)在maper階段會盡可能申請所需的最大資源來運行,極端情況下如果存在一個有問題的任務(wù)一直占用集群所有資源會導(dǎo)致其他任務(wù)都無法運行,因此需要一種方式能夠讓重要的任務(wù)盡可能的搶占到資源。
當(dāng)前yarn的隊列資源調(diào)度使用的是capacity容量調(diào)度器,該調(diào)度器支持隊列間和隊列內(nèi)搶占的,當(dāng)前的集群配置也是啟用了兩類搶占方式的,但隊列內(nèi)的搶占依賴任務(wù)的優(yōu)先級,從網(wǎng)上找到的內(nèi)容是需要在任務(wù)運行前配置SET mapreduce.job.priority=50,嘗試過沒有效果,造成無效有兩個原因:
一是最大優(yōu)先級參數(shù)(yarn.cluster.max-application-priority)沒有配置,hadoop官網(wǎng)可以查到該值得默認(rèn)值是0,設(shè)置為大于最大優(yōu)先級的值時均按最大優(yōu)先級設(shè)置;
二是tez中設(shè)置任務(wù)優(yōu)先級的參數(shù)確實不是mapreduce.job.priority,通過查看tez源碼發(fā)現(xiàn)對應(yīng)的參數(shù)應(yīng)該為tez.am.application.priority,該值越大代表獲取資源的優(yōu)先級越高。

二、集群配置
增加最大優(yōu)先級參數(shù)配置yarn.cluster.max-application-priority=100;意味著在配置任務(wù)優(yōu)先級tez.am.application.priority時值不能大于該值。
三、使用方式
在hive sql運行前配置set tez.am.application.priority=【0到100之間的數(shù)字】
驗證方式: 在yarn頁面中找到對應(yīng)任務(wù),查看Application Priority值是否為配置的值。
