騰訊云EMR基于YARN針對云原生容器化的優(yōu)化與實踐

來源: 云加社區(qū)
作者:張翮
時間:2021-06-22
17545
本文主要介紹HADOOP資源調(diào)度器YARN在容器環(huán)境中的優(yōu)化與實踐。

導(dǎo)語|傳統(tǒng)HADOOP生態(tài)系統(tǒng)使用YARN管理/調(diào)度計算資源,該系統(tǒng)?般具有明顯的資源使?周期。實時計算集群資源消耗主要在?天,而數(shù)據(jù)報表型業(yè)務(wù)則安排在離線計算集群中。離在線業(yè)務(wù)分開部署的首要問題就是資源使用率低,消耗成本?。隨著業(yè)務(wù)的增?和突發(fā)的報表計算需求,為了解決為離線集群預(yù)留資源,騰訊云EMR團隊和容器團隊聯(lián)合推出Hadoop Yarn on Kubernetes Pod,以提?容器資源使用率,降低資源成本,將閑時容器集群CPU使?率提升數(shù)倍之多。本文主要介紹HADOOP資源調(diào)度器YARN在容器環(huán)境中的優(yōu)化與實踐。

一、Hadoop Yarn on Kubernetes Pod混合部署模式

Hadoop Yarn on Kubernetes Pod方案提供彈性擴縮容和離在線混合部署兩項功能。彈性擴縮容主要聚焦于如何利?云原生資源,快速擴容資源以補充算力。離在線混合部署模式的目的是為了充分使用在線集群的空閑資源,盡可能減少為離線集群預(yù)留空閑資源的頻次。

EMR彈性擴縮容模塊(yarn-autoscaler)提供按負載和按時間彈性伸縮兩種擴縮容方式。對于按負載伸縮,用戶可以對不同指標設(shè)置閾值來觸發(fā)擴縮容,比如設(shè)置Yarn隊列中availablevcore、pending vcore、available mem、pending mem。亦可以使用時間擴縮規(guī)則,按天、按周、按月等規(guī)則指定觸發(fā)。

當彈性規(guī)則被觸發(fā)后,離在線部署模塊獲取當前在線TKE集群中可以提供的閑置算力的規(guī)格及數(shù)量,調(diào)用Kubernetes api創(chuàng)建對應(yīng)數(shù)量的資源,ex-scheduler擴展調(diào)度器確保Pod被創(chuàng)建在剩余資源更多的節(jié)點上,該POD負責(zé)啟動YARN的服務(wù)。

640.png

通過該方案,Yarn的NodeManager服務(wù)可以快速部署到POD節(jié)點中。但也Yarn原生調(diào)度沒有考慮異構(gòu)資源,由此引發(fā)了兩個問題:

1.AM的POD被驅(qū)逐,導(dǎo)致APP失敗

在node節(jié)點的資源緊缺的條件下,kubelet為了保證node節(jié)點的穩(wěn)定性,回觸發(fā)主動驅(qū)逐pod的機制。如果該節(jié)點存在AM服務(wù),則整個Application就要被視為失敗,ResourceManager此時會重新分配AM。對于計算量很大的任務(wù),Application重跑的代價不可承受。

2.Yarn原生非獨占分區(qū)資源共享局限性

Yarn的標簽分區(qū)特性?持獨占分區(qū)(Exclusive),非獨占分區(qū)(Non-exclusive)。

·獨占分區(qū)(Exclusive):例如指定獨占分區(qū)x,Yarn的container只會分配到該x分區(qū)。

·非獨占分區(qū)(Non-exclusive):例如非獨占分區(qū)x,x分區(qū)的資源可以共享給default分區(qū)。

只有當指定分區(qū)default時,default上運?的Application可以使?分區(qū)x的資源。

640 (1).png

但是在實際使?場景中,?戶要給各個業(yè)務(wù)部門分配各自的獨占分區(qū)資源,同時會劃分出供各部門使用的default分區(qū)。default分區(qū)資源會比較充足,業(yè)務(wù)部門希望能夠使用自己的獨占分區(qū)和同時充分利用default分區(qū)資源,獨占分區(qū)資源和default分區(qū)都不夠用的時候,才會觸發(fā)彈性擴容,往屬于自己的獨占分區(qū)中擴容資源。

二、對Yarn改造帶來的挑戰(zhàn)

對上述feature的開發(fā),除了需求技術(shù)本?的難度。還需要考慮到盡可能降低用戶存量集群穩(wěn)定性的影響,減少用戶業(yè)務(wù)側(cè)改造成本。

·集群穩(wěn)定性:Hadoop Yarn作為大數(shù)據(jù)系統(tǒng)中的基礎(chǔ)調(diào)度組件,如果改動過多,引發(fā)的故障幾率就會增大。同時引入的feature,必然需要升級存量集群的Haoop Yarn。升級操作要做到對存量業(yè)務(wù)集群無感知,不能影響到當天的業(yè)務(wù)。

·業(yè)務(wù)側(cè)使用成本:引入的新feature也必須符合原?yarn的使用習(xí)慣,方便業(yè)務(wù)側(cè)用戶理解,同時降低業(yè)務(wù)側(cè)對代碼的改造。

1.AM自主選擇存儲介質(zhì)

目前Yarn的社區(qū)沒有考慮云上異構(gòu)資源混合部署的特點。在線TKE集群中,當資源緊張時會對容器進行驅(qū)逐。為了避免Appliction重新計算,浪費資源的現(xiàn)象,必須提供AM可以指定能否分配到POD類型資源。

自主選擇存儲介質(zhì)中,使用配置化標識,由NodeManager通過RPC上報能否將資源提供給AM使用,ResourceManager通過上報信息決定將Application的AM分配到穩(wěn)定資源介質(zhì)中。由NodeManager通過配置化上報信息的好處是顯而易見的:

·去集中化:減少ResourceManager處理邏輯。否則,擴容資源時,還需將資源信息通過RPC/配置流入到ResourceManager中。如無必要,勿增實體,對ResourceManager的改造應(yīng)該輕量化。

·集群穩(wěn)定性:存量業(yè)務(wù)集群對Yarn升級后,需要重啟NodeManager,只需要重啟ResourceManager。Yare的高可用特性可保證升級過程對業(yè)務(wù)無影響。無需重啟NodeManager的原因是,NM默認將本機資源視為可分配。

·簡單易用:用戶可以通過配置?由決定任務(wù)資源擁有分配AM的權(quán)利,不單單局限POD容器資源。

640 (2).png

2.多標簽動態(tài)分配資源

Yarn的原生標簽設(shè)計中,提交任務(wù)時的標簽表達式中只能含有單個標簽。如果為了提?利用率,同時使用多個分區(qū)資源,就必須將非default分區(qū)設(shè)置為Non-exclusive特性。標簽表達式必須解決如下三個問題:

·資源隔離:分區(qū)A設(shè)置Non-exclusive后,資源被其他分區(qū)上的APP占用后,無法及時交換給分區(qū)A的App。

·自由共享資源:只有default分區(qū)才有資格申請Non-exclusive分區(qū)資源。

·動態(tài)選擇分區(qū)資源:多分區(qū)資源共享時,無法根據(jù)分區(qū)剩余資源大小選擇可用區(qū),影響任務(wù)執(zhí)行效率。

騰訊云EMR團隊通過支持擴展表達式語法,增加對邏輯運算符表達式的支持,使App可以申請多個分區(qū)資源。同時開發(fā)資源統(tǒng)計模塊動態(tài)統(tǒng)計分區(qū)可用資源,為App分配最合適的分區(qū)。

640 (3).png

三、實操演練

測試環(huán)境:指定172.17.48.28/172.17.48.17的NodeManager為default分區(qū),172.17.48.29/172.17.48.26的NodeManager為x分區(qū)。

640.webp.jpg

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

<name>yarn.scheduler.capacity.root.queues</name>

<value>a,b</value>

</property>

<property>

<name>yarn.scheduler.capacity.root.accessible-node-labels.x.capacity</nam e>

<value>100</value>

</property>

<property>

<name>yarn.scheduler.capacity.root.accessible-node-labels.y.capacity</nam e>

<value>100</value>

</property>

<!-- configuration of queue-a -->

<property>

<name>yarn.scheduler.capacity.root.a.accessible-node-labels</name>

<value>x</value>

</property>

<property>

<name>yarn.scheduler.capacity.root.a.capacity</name>

<value>50</value>

</property>

<property>

<name>yarn.scheduler.capacity.root.a.accessible-node-labels.x.capacity</n ame>

<value>100</value>

</property>

<!-- configuration of queue-b -->

<property>

<name>yarn.scheduler.capacity.root.b.accessible-node-labels</name>

<value>y</value>

</property>

<property>

<name>yarn.scheduler.capacity.root.b.capacity</name>

<value>50</value>

</property>

<property>

<name>yarn.scheduler.capacity.root.b.accessible-node-labels.y.capacity</n ame>

<value>100</value>

</property>

</configuration>

1.規(guī)定AM只能分配在172.17.48.28

對另外三個節(jié)點的NodeManager節(jié)點配置如下配置項:

yarn.nodemanager.am-alloc-disabled=true

配置后,提交的Application的AM只能在172.17.48.28節(jié)點啟動。

1624348866(1).png

2.使用組合標簽

通過mapreduce.job.node-label-expression指定標簽表達式,x||表示同時使用x/default分區(qū)。

hadoop jar/usr/local/service/hadoop/share/hadoop/mapreduce/hadoop-mapredu ce-examples-3.1.2.jar pi-D mapreduce.job.queuename="a"-D mapreduce.job.node-label-expression="x||"10 10

使用該命令提交后,觀察到Application的container被分配在x/default分區(qū)。

640.webp.jpg

四、Hadoop Yarn on Kubernetes Pod最佳實踐

640.webp (1).jpg

該客戶大數(shù)據(jù)應(yīng)用和存儲跑在Yarn管理的大數(shù)據(jù)集群,在生產(chǎn)環(huán)境中,面臨諸多問題,主要體現(xiàn)在大數(shù)據(jù)的算力不足和在線業(yè)務(wù)波谷時資源的浪費。如離線計算在算力不足時,數(shù)據(jù)準時性無法得到保證,尤其是當遇到隨機緊急大數(shù)據(jù)查詢?nèi)蝿?wù),沒有可用的計算資源,只能停掉已有的計算任務(wù),或者等已有任務(wù)完成,?論哪種?式,總體任務(wù)執(zhí)行的效率都會大打折扣。

基于Hadoop Yarn on Kubernetes Pod方案,將離線任務(wù)自動擴容至云上集群,與TKE在線業(yè)務(wù)集群混合部署,充分利用云上波谷時段的閑置資源,提高離線業(yè)務(wù)的算力,并利用云上資源快速的彈性擴容能力,及時補充離線計算的算力。

通過Hadoop Yarn on Kubernetes Pod?案對客戶的在線TKE集群資源使用進下優(yōu)化后,集群閑時CPU使用率能提高500%。

640.webp (2).jpg

在線集群閑時CPU占用

640.webp (3).jpg

離在線混部后CPU占用

五、總結(jié)

本文提出了基于YARN針對云原生容器化的優(yōu)化與實踐,在混合部署云原生環(huán)境中,極大地提高了任務(wù)運行的穩(wěn)定性,高效性,有效提高了集群資源利用率,節(jié)約硬件成本。在未來,我們會探討更多大數(shù)據(jù)云原生場景,為企業(yè)客戶帶來更多的實際效益。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于云加社區(qū),本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多