設(shè)想一下,作為一個開發(fā)人員,你現(xiàn)在所在的公司有一套線上的 Hadoop 集群。A部門經(jīng)常做一些定時的 BI 報表,B部門則經(jīng)常使用軟件做一些臨時需求。那么他們肯定會遇到同時提交任務(wù)的場景,這個時候到底應(yīng)該如何分配資源滿足這兩個任務(wù)呢?是先執(zhí)行A的任務(wù),再執(zhí)行B的任務(wù),還是同時跑兩個?
如果你存在上述的困惑,可以多了解一些 Yarn 的資源調(diào)度器。
Yarn 的三種調(diào)度器
從 Hadoop2 開始,官方把資源管理單獨(dú)剝離出來,主要是為了考慮后期作為一個公共的資源管理平臺,任何滿足規(guī)則的計算引擎都可以在它上面執(zhí)行。Yarn 作為一款 Hadoop 集群的資源共享,不僅可以跑 MapReduce,還可以跑 Spark,F(xiàn)link。
在 Yarn 框架中,調(diào)度器是一塊很重要的內(nèi)容。有了合適的調(diào)度規(guī)則,就可以保證多個應(yīng)用在同一時間有條不紊的工作。
最原始的調(diào)度規(guī)則就是 FIFO,即按照用戶提交任務(wù)的時間來決定哪個任務(wù)先執(zhí)行,但是這樣很可能一個大任務(wù)獨(dú)占資源,其他的資源需要不斷的等待,也可能一堆小任務(wù)占用資源,大任務(wù)一直無法得到適當(dāng)?shù)馁Y源,造成饑餓。所以 FIFO 雖然很簡單,但是并不能滿足我們的需求。
如下圖所示,在 Yarn 中有三種調(diào)度器可以選擇:FIFO Scheduler,Capacity Scheduler,F(xiàn)air Scheduler。
FIFO Scheduler
把應(yīng)用按提交的順序排成一個先進(jìn)先出隊列,在進(jìn)行資源分配的時候,先給隊列中最頭部的應(yīng)用進(jìn)行分配資源,等到最頭部的應(yīng)用需求滿足后再給下一個分配,以此類推。
FIFO Scheduler 是最簡單也是最容易理解的調(diào)度器,它不需要任何配置,但不適用于共享集群中。大的應(yīng)用可能會占用所有集群資源,從而導(dǎo)致其它應(yīng)用被阻塞。
Capacity 調(diào)度器
允許多租戶安全的共享集群資源,提供的核心理念就是 Queues(隊列),它支持多個隊列,每個隊列可配置一定的資源量,以確保在其他 queues 允許使用空閑資源之前,資源可以在一個組織的 sub-queues 之間共享,且每個隊列采用 FIFO 調(diào)度策略。為了在共享資源上,提供更多的控制和預(yù)見性,applications 在容量限制之下,可以及時的分配資源。
Fair 調(diào)度器
在 Fair 調(diào)度器中,我們不需要預(yù)先占用一定的系統(tǒng)資源,F(xiàn)air 調(diào)度器會為所有運(yùn)行的 job 動態(tài)的調(diào)整系統(tǒng)資源。當(dāng)?shù)谝粋€大 job 提交時,只有這一個 job 在運(yùn)行,此時它獲得了所有集群資源;當(dāng)?shù)诙€小任務(wù)提交后,F(xiàn)air 調(diào)度器會分配一半資源給這個小任務(wù),讓這兩個任務(wù)公平的共享集群資源。
需要注意的是,從第二個任務(wù)提交到獲得資源會有一定的延遲,因為它需要等待第一個任務(wù)釋放占用的 Container。小任務(wù)執(zhí)行完成之后也會釋放自己占用的資源,大任務(wù)又獲得了全部的系統(tǒng)資源。最終的效果就是 Fair 調(diào)度器既得到了高的資源利用率又能保證小任務(wù)及時完成。
EasyMR 如何管理 Yarn 資源隊列
最原始的調(diào)度規(guī)則就是 FIFO,即按照用戶提交任務(wù)的時間來決定哪個任務(wù)先執(zhí)行,但是這樣可能會導(dǎo)致一個大任務(wù)獨(dú)占資源,其他的資源需要不斷的等待,也可能導(dǎo)致一堆小任務(wù)占用資源,大任務(wù)一直無法得到適當(dāng)?shù)馁Y源,造成饑餓。
所以 FIFO 雖然很簡單,但是并不能滿足我們的需求。最常使用的是容量調(diào)度策略,但是運(yùn)維人員在配置容量隊列時,需要考慮隊列資源利用率,隊列的狀態(tài),修改完成后,亦無法校驗配置是否正確。
EasyMR 出于簡單高效原則,開放了資源隊列管理功能。
以容量調(diào)度為例,為大家簡單演示 EasyMR 中隊列的使用。假設(shè)公司有個大數(shù)據(jù)部門,該部門下有個做數(shù)據(jù)同步的小組,隊列樹形圖如下:
root
├── bigdata
|---dataSync
要創(chuàng)建這樣層次的隊列,首先需要在父級別下面創(chuàng)建 bigdata 隊列,然后在 bigdata 下面劃分一個子隊列 dataSync,下文進(jìn)行詳細(xì)介紹。
創(chuàng)建隊列
首先創(chuàng)建父隊列 bigdata,設(shè)置最小容量20%,最大容量50%。
在父隊列中添加 bigdata 隊列名稱。
<property>
<!-- root隊列中有哪些子隊列-->
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,bigdata</value>
<description></description>
</property>
設(shè)置 bigdata 的容量調(diào)度配置。
<property>
<!-- bigdata隊列占用的容量百分比-->
<name>yarn.scheduler.capacity.root.bigdata.capacity</name>
<value>20</value>
<description></description>
</property>
<property>
<!-- root隊列中bigdata隊列占用的容量百分比的最大值-->
<name>yarn.scheduler.capacity.root.bigdata.maximum-capacity</name>
<value>50</value>
<description></description>
</property>
<property>
<!-- queue容量的倍數(shù),用來設(shè)置一個user可以獲取更多的資源。默認(rèn)值為1-->
<name>yarn.scheduler.capacity.root.bigdata.user-limit-factor</name>
<value>1</value>
<description></description>
</property>
<property>
<!--設(shè)置bigdata隊列的狀態(tài)-->
<name>yarn.scheduler.capacity.root.bigdata.state</name>
<value>RUNNING</value>
<description></description>
</property>
創(chuàng)建子隊列
在 bigdata 父隊列下面,選擇創(chuàng)建子隊列,設(shè)置最小容量10%,最大容量30%。
在 bigdata 隊列中添加 dataSync 隊列名。
<property>
<!-- bigdata隊列中有哪些子隊列-->
<name>yarn.scheduler.capacity.root.bigdata.queues</name>
<value>dataSync</value>
<description></description>
</property>
設(shè)置 dataSync 隊列的容量調(diào)度配置。
<property>
<!-- bigdata隊列dataSync子隊列的容量百分比-->
<name>yarn.scheduler.capacity.root.bigdata.dataSync.capacity</name>
<value>10</value>
<description></description>
</property>
<property>
<!-- bigdata隊列中bigdata隊列占用的容量百分比的最大值-->
<name>yarn.scheduler.capacity.root.bigdata.dataSync.maximum-capacity</name>
<value>30</value>
<description></description>
</property>
<property>
<!-- queue容量的倍數(shù),用來設(shè)置一個user可以獲取更多的資源。默認(rèn)值為1-->
<name>yarn.scheduler.capacity.root.bigdata.dataSync.user-limit-factor</name>
<value>1</value>
<description></description>
</property>
<property>
<!--設(shè)置子隊列dataSync隊列的狀態(tài)-->
<name>yarn.scheduler.capacity.root.bigdata.dataSync.state</name>
<value>RUNNING</value>
<description></description>
</property>
查看隊列
創(chuàng)建完成后,可以在 EasyMR 資源隊列查看隊列詳情。
在 EasyMR 創(chuàng)建完成后,也可以在 yarn web 管理頁面查看隊列創(chuàng)建詳情。
至此,Yarn 的一個簡單容量調(diào)度就創(chuàng)建完成了。
《數(shù)棧產(chǎn)品白皮書》:https://www.dtstack.com/resources/1004?src=szsm
《數(shù)據(jù)治理行業(yè)實(shí)踐白皮書》下載地址:https://www.dtstack.com/resources/1001?src=szsm
想了解或咨詢更多有關(guān)袋鼠云大數(shù)據(jù)產(chǎn)品、行業(yè)解決方案、客戶案例的朋友,瀏覽袋鼠云官網(wǎng):https://www.dtstack.com/?src=szbky文章來源:http://www.zghlxwxcb.cn/news/detail-687307.html
同時,歡迎對大數(shù)據(jù)開源項目有興趣的同學(xué)加入「袋鼠云開源框架釘釘技術(shù)qun」,交流最新開源技術(shù)信息,qun號碼:30537511,項目地址:https://github.com/DTStack文章來源地址http://www.zghlxwxcb.cn/news/detail-687307.html
到了這里,關(guān)于大數(shù)據(jù)計算引擎 EasyMR 如何簡單高效管理 Yarn 資源隊列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!