Yarn調(diào)優(yōu)

隊(duì)列調(diào)優(yōu)

  • why
    資源隔離:防止單個(gè)隊(duì)列占太多資源
    防止單個(gè)用戶(hù)占太多資源
    防止單個(gè)應(yīng)用占太多資源
    閑置資源彈性利用:允許閑置資源能被任何隊(duì)列分配到

  • 最佳實(shí)踐
    數(shù)據(jù)部門(mén)離線數(shù)倉(cāng)資源占用最多,分配【最大資源的隊(duì)列】,并設(shè)置為【搶占高優(yōu)先級(jí)】,任務(wù)資源分配采用FIFO
    數(shù)據(jù)部門(mén)實(shí)時(shí)數(shù)倉(cāng)資源占用較少,分配10%資源的隊(duì)列,并設(shè)置為搶占高優(yōu)先級(jí),任務(wù)資源分配采用Fair
    數(shù)據(jù)部門(mén)交互式分析資源占用較多,分配50%資源的隊(duì)列,并設(shè)置為搶占中優(yōu)先級(jí),任務(wù)資源分配采用FIFO
    業(yè)務(wù)部門(mén)交互式分析資源占用較少,分配【10%資源的隊(duì)列】,并設(shè)置為【搶占低優(yōu)先級(jí)】,任務(wù)資源分配采用Fair
    通過(guò)設(shè)置【用戶(hù)資源使用資源大于隊(duì)列資源】,實(shí)現(xiàn)閑置資源的【彈性利用】
    防止同級(jí)的【隊(duì)列的最小資源設(shè)置得過(guò)大】,這樣會(huì)出現(xiàn)集群資源被分配完,仍然有很多隊(duì)列的最小資源無(wú)法被滿足!大家【都認(rèn)為自己是饑餓狀態(tài)】,從而無(wú)法搶占別人的資源,自己又持有了部分資源,最終造成【資源死鎖】!

  • 實(shí)戰(zhàn)
    1)配置隊(duì)列
    修改配置文件conf/capacity-scheduler.xml
    默認(rèn)的根隊(duì)列是root隊(duì)列
    通過(guò)yarn.scheduler.capacity.root.queue配置root隊(duì)列的子隊(duì)列,多個(gè)以逗號(hào)隔開(kāi)
    通過(guò)yarn.scheduler.capacity.<XXX>.queue配置層級(jí)隊(duì)列,<XXX>的語(yǔ)法是比如root.business.online

2)配置隊(duì)列的資源
同樣是在配置文件conf/capacity-scheduler.xml進(jìn)行指定
可以設(shè)置的【隊(duì)列資源限制】有:
a)隊(duì)列的最小,最大資源
b)單個(gè)用戶(hù)可使用隊(duì)列資源的比例,默認(rèn)單個(gè)用戶(hù)最多只能占用隊(duì)列配置的容量(即比例為1), 但鑒于閑置資源彈性利用場(chǎng)景,有時(shí)會(huì)允許單個(gè)用戶(hù)使用資源大于隊(duì)列資源
c)隊(duì)列程序可運(yùn)行的最大任務(wù)/應(yīng)用程序個(gè)數(shù)
d)任務(wù)資源分配優(yōu)先級(jí)策略:FIFO或者公平分配

3)隊(duì)列訪問(wèn)設(shè)置
隊(duì)列設(shè)置為stop狀態(tài)后無(wú)法訪問(wèn)隊(duì)列獲取資源
設(shè)置哪些用戶(hù)可以訪問(wèn)本隊(duì)列的資源和任務(wù)
設(shè)置隊(duì)列的管理員用戶(hù),管理員可以本隊(duì)列的資源和任務(wù)

CPU調(diào)優(yōu)

  • 增加NodeManager的虛擬核數(shù)
    集群中部分【簡(jiǎn)單任務(wù)多的場(chǎng)景會(huì)占用過(guò)多cpu】是種浪費(fèi)
    當(dāng)cpu資源吃緊時(shí),可以考慮通過(guò)虛擬化適當(dāng)增大cpu核數(shù)
    比如cpu核數(shù)為32,虛擬50%
    yarn.nodemanager.resource.cpu-vcores: 48

內(nèi)存調(diào)優(yōu)

  • NodeManager內(nèi)存
    yarn.nodemanager.resource.memory-mb
    默認(rèn)是8192MB,根據(jù)服務(wù)器實(shí)際配置靈活調(diào)整
    需要注意的是NodeManager和DataNode通常部署在一個(gè)節(jié)點(diǎn)
    此外還要給os預(yù)留一部分內(nèi)存比如5G

  • Container內(nèi)存
    最大內(nèi)存默認(rèn)是8192MB,根據(jù)任務(wù)的數(shù)據(jù)量靈活調(diào)整
    yarn.scheduler.maximum-allocation-mb
    spark任務(wù)耗內(nèi)存,可以設(shè)置為32G

  • MapReduce任務(wù)內(nèi)存
    檢測(cè)到集群物理節(jié)點(diǎn)使用情況很低,但yarn集群使用率很高
    說(shuō)明yarn為任務(wù)分配了過(guò)多的內(nèi)存!
    考慮【降低默認(rèn)MapReduce任務(wù)的內(nèi)存分配】
    Map任務(wù)內(nèi)存 mapreduce.map.memory: 2G
    Reduce 任務(wù)內(nèi)存 mapreduce.reduce.memory.mb 2G
    Map任務(wù)最大堆棧(Map內(nèi)存的80%) mapreduce.map.java.opts.max.heap 1.6G
    Reduce任務(wù)最大堆棧(Reduc內(nèi)存的80%) mapreduce.reduce.java.opts.max.heap 1.6G
    不過(guò)注意,對(duì)于某些對(duì)于內(nèi)存需求較高的任務(wù),需要單獨(dú)設(shè)定,保證不出現(xiàn)
    outofmemory 的情況

  • ResourceManager內(nèi)存
    設(shè)置為32G足夠

任務(wù)/應(yīng)用程序數(shù)量調(diào)優(yōu)

  • application master
    yarn.scheduler.capacity.maximum-am-resource-percent
    設(shè)置有多少資源可以用來(lái)運(yùn)行app master,默認(rèn)是10%
    此配置會(huì)影響能夠提交到集群中并發(fā)作業(yè)數(shù)量,因?yàn)槊總€(gè)作業(yè)有各自的application master
  • 需要注意的是yarn.app.mapreduce.am.resource.mb參數(shù)只能控制MapReduce任務(wù)的master內(nèi)存, 設(shè)置為2G足夠
  • 應(yīng)用總數(shù)
    yarn.scheduler.capacity.maximum-applications // 集群可以同時(shí)運(yùn)行和等待的應(yīng)用數(shù)量
    默認(rèn)是10000
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容