内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

HadoopYarn的資源調(diào)度器有哪些

這篇文章主要介紹“Hadoop Yarn的資源調(diào)度器有哪些”,在日常操作中,相信很多人在Hadoop Yarn的資源調(diào)度器有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Hadoop Yarn的資源調(diào)度器有哪些”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供鳳翔網(wǎng)站建設(shè)、鳳翔做網(wǎng)站、鳳翔網(wǎng)站設(shè)計(jì)、鳳翔網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、鳳翔企業(yè)網(wǎng)站模板建站服務(wù),十余年鳳翔做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

一、調(diào)度器的選擇

在Yarn中有三種調(diào)度器可以選擇:FIFO Scheduler ,Capacity SchedulerFairS cheduler。

FIFO Scheduler把應(yīng)用按提交的順序排成一個(gè)隊(duì)列,這是一個(gè)先進(jìn)先出隊(duì)列,在進(jìn)行資源分配的時(shí)候,先給隊(duì)列中最頭上的應(yīng)用進(jìn)行分配資源,待最頭上的應(yīng)用需求滿足后再給下一個(gè)分配,以此類推。

FIFO Scheduler是最簡(jiǎn)單也是最容易理解的調(diào)度器,也不需要任何配置,但它并不適用于共享集群。大的應(yīng)用可能會(huì)占用所有集群資源,這就導(dǎo)致其它應(yīng)用被阻塞。在共享集群中,更適合采用Capacity SchedulerFair Scheduler,這兩個(gè)調(diào)度器都允許大任務(wù)和小任務(wù)在提交的同時(shí)獲得一定的系統(tǒng)資源。

下面“Yarn調(diào)度器對(duì)比圖”展示了這幾個(gè)調(diào)度器的區(qū)別,從圖中可以看出,在FIFO 調(diào)度器中,小任務(wù)會(huì)被大任務(wù)阻塞。

而對(duì)于Capacity調(diào)度器,有一個(gè)專門的隊(duì)列用來運(yùn)行小任務(wù),但是為小任務(wù)專門設(shè)置一個(gè)隊(duì)列會(huì)預(yù)先占用一定的集群資源,這就導(dǎo)致大任務(wù)的執(zhí)行時(shí)間會(huì)落后于使用FIFO調(diào)度器時(shí)的時(shí)間。

在Fair調(diào)度器中,我們不需要預(yù)先占用一定的系統(tǒng)資源,F(xiàn)air調(diào)度器會(huì)為所有運(yùn)行的job動(dòng)態(tài)的調(diào)整系統(tǒng)資源。如下圖所示,當(dāng)?shù)谝粋€(gè)大job提交時(shí),只有這一個(gè)job在運(yùn)行,此時(shí)它獲得了所有集群資源;當(dāng)?shù)诙€(gè)小任務(wù)提交后,F(xiàn)air調(diào)度器會(huì)分配一半資源給這個(gè)小任務(wù),讓這兩個(gè)任務(wù)公平的共享集群資源。

需要注意的是,在下圖Fair調(diào)度器中,從第二個(gè)任務(wù)提交到獲得資源會(huì)有一定的延遲,因?yàn)樗枰却谝粋€(gè)任務(wù)釋放占用的Container。小任務(wù)執(zhí)行完成之后也會(huì)釋放自己占用的資源,大任務(wù)又獲得了全部的系統(tǒng)資源。最終的效果就是Fair調(diào)度器即得到了高的資源利用率又能保證小任務(wù)及時(shí)完成。

Yarn調(diào)度器對(duì)比圖:
Hadoop Yarn的資源調(diào)度器有哪些

二、Capacity Scheduler(容器調(diào)度器)的配置

2.1 容器調(diào)度介紹

Capacity 調(diào)度器允許多個(gè)組織共享整個(gè)集群,每個(gè)組織可以獲得集群的一部分計(jì)算能力。通過為每個(gè)組織分配專門的隊(duì)列,然后再為每個(gè)隊(duì)列分配一定的集群資源,這樣整個(gè)集群就可以通過設(shè)置多個(gè)隊(duì)列的方式給多個(gè)組織提供服務(wù)了。除此之外,隊(duì)列內(nèi)部又可以垂直劃分,這樣一個(gè)組織內(nèi)部的多個(gè)成員就可以共享這個(gè)隊(duì)列資源了,在一個(gè)隊(duì)列內(nèi)部,資源的調(diào)度是采用的是先進(jìn)先出(FIFO)策略。

通過上面那幅圖,我們已經(jīng)知道一個(gè)job可能使用不了整個(gè)隊(duì)列的資源。然而如果這個(gè)隊(duì)列中運(yùn)行多個(gè)job,如果這個(gè)隊(duì)列的資源夠用,那么就分配給這些job,如果這個(gè)隊(duì)列的資源不夠用了呢?其實(shí)Capacity調(diào)度器仍可能分配額外的資源給這個(gè)隊(duì)列,這就是“彈性隊(duì)列”(queue elasticity)的概念。

在正常的操作中,Capacity調(diào)度器不會(huì)強(qiáng)制釋放Container,當(dāng)一個(gè)隊(duì)列資源不夠用時(shí),這個(gè)隊(duì)列只能獲得其它隊(duì)列釋放后的Container資源。當(dāng)然,我們可以為隊(duì)列設(shè)置一個(gè)最大資源使用量,以免這個(gè)隊(duì)列過多的占用空閑資源,導(dǎo)致其它隊(duì)列無法使用這些空閑資源,這就是”彈性隊(duì)列”需要權(quán)衡的地方。

2.2 容器調(diào)度的配置

假設(shè)我們有如下層次的隊(duì)列:

root
├── prod
└── dev
    ├── eng
    └── science123456

下面是一個(gè)簡(jiǎn)單的Capacity調(diào)度器的配置文件,文件名為capacity-scheduler.xml。在這個(gè)配置中,在root隊(duì)列下面定義了兩個(gè)子隊(duì)列proddev,分別占40%和60%的容量。需要注意,一個(gè)隊(duì)列的配置是通過屬性yarn.sheduler.capacity.<queue-path>.<sub-property>指定的,<queue-path>代表的是隊(duì)列的繼承樹,如root.prod隊(duì)列,<sub-property>一般指capacitymaximum-capacity。

Hadoop Yarn的資源調(diào)度器有哪些

我們可以看到,dev隊(duì)列又被分成了engscience兩個(gè)相同容量的子隊(duì)列。devmaximum-capacity屬性被設(shè)置成了75%,所以即使prod隊(duì)列完全空閑dev也不會(huì)占用全部集群資源,也就是說,prod隊(duì)列仍有25%的可用資源用來應(yīng)急。我們注意到,engscience兩個(gè)隊(duì)列沒有設(shè)置maximum-capacity屬性,也就是說engscience隊(duì)列中的job可能會(huì)用到整個(gè)dev隊(duì)列的所有資源(最多為集群的75%)。而類似的,prod由于沒有設(shè)置maximum-capacity屬性,它有可能會(huì)占用集群全部資源。

Capacity容器除了可以配置隊(duì)列及其容量外,我們還可以配置一個(gè)用戶或應(yīng)用可以分配的最大資源數(shù)量、可以同時(shí)運(yùn)行多少應(yīng)用、隊(duì)列的ACL認(rèn)證等。

2.3 隊(duì)列的設(shè)置

關(guān)于隊(duì)列的設(shè)置,這取決于我們具體的應(yīng)用。比如,在MapReduce中,我們可以通過mapreduce.job.queuename屬性指定要用的隊(duì)列。如果隊(duì)列不存在,我們?cè)谔峤蝗蝿?wù)時(shí)就會(huì)收到錯(cuò)誤。如果我們沒有定義任何隊(duì)列,所有的應(yīng)用將會(huì)放在一個(gè)default隊(duì)列中。

注意:對(duì)于Capacity調(diào)度器,我們的隊(duì)列名必須是隊(duì)列樹中的最后一部分,如果我們使用隊(duì)列樹則不會(huì)被識(shí)別。比如,在上面配置中,我們使用prodeng作為隊(duì)列名是可以的,但是如果我們用root.dev.eng或者dev.eng是無效的。

三、Fair Scheduler(公平調(diào)度器)的配置

3.1 公平調(diào)度

Fair調(diào)度器的設(shè)計(jì)目標(biāo)是為所有的應(yīng)用分配公平的資源(對(duì)公平的定義可以通過參數(shù)來設(shè)置)。在上面的“Yarn調(diào)度器對(duì)比圖”展示了一個(gè)隊(duì)列中兩個(gè)應(yīng)用的公平調(diào)度;當(dāng)然,公平調(diào)度在也可以在多個(gè)隊(duì)列間工作。舉個(gè)例子,假設(shè)有兩個(gè)用戶A和B,他們分別擁有一個(gè)隊(duì)列。當(dāng)A啟動(dòng)一個(gè)job而B沒有任務(wù)時(shí),A會(huì)獲得全部集群資源;當(dāng)B啟動(dòng)一個(gè)job后,A的job會(huì)繼續(xù)運(yùn)行,不過一會(huì)兒之后兩個(gè)任務(wù)會(huì)各自獲得一半的集群資源。如果此時(shí)B再啟動(dòng)第二個(gè)job并且其它job還在運(yùn)行,則它將會(huì)和B的第一個(gè)job共享B這個(gè)隊(duì)列的資源,也就是B的兩個(gè)job會(huì)用于四分之一的集群資源,而A的job仍然用于集群一半的資源,結(jié)果就是資源最終在兩個(gè)用戶之間平等的共享。過程如下圖所示:
Hadoop Yarn的資源調(diào)度器有哪些

3.2 啟用Fair Scheduler

調(diào)度器的使用是通過yarn-site.xml配置文件中的yarn.resourcemanager.scheduler.class參數(shù)進(jìn)行配置的,默認(rèn)采用Capacity Scheduler調(diào)度器。如果我們要使用Fair調(diào)度器,需要在這個(gè)參數(shù)上配置FairScheduler類的全限定名: org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler。

3.3 隊(duì)列的配置

Fair調(diào)度器的配置文件位于類路徑下的fair-scheduler.xml文件中,這個(gè)路徑可以通過yarn.scheduler.fair.allocation.file屬性進(jìn)行修改。若沒有這個(gè)配置文件,F(xiàn)air調(diào)度器采用的分配策略,這個(gè)策略和3.1節(jié)介紹的類似:調(diào)度器會(huì)在用戶提交第一個(gè)應(yīng)用時(shí)為其自動(dòng)創(chuàng)建一個(gè)隊(duì)列,隊(duì)列的名字就是用戶名,所有的應(yīng)用都會(huì)被分配到相應(yīng)的用戶隊(duì)列中。

我們可以在配置文件中配置每一個(gè)隊(duì)列,并且可以像Capacity 調(diào)度器一樣分層次配置隊(duì)列。比如,參考capacity-scheduler.xml來配置fair-scheduler:
Hadoop Yarn的資源調(diào)度器有哪些

隊(duì)列的層次是通過嵌套<queue>元素實(shí)現(xiàn)的。所有的隊(duì)列都是root隊(duì)列的孩子,即使我們沒有配到<root>元素里。在這個(gè)配置中,我們把dev隊(duì)列有分成了engscience兩個(gè)隊(duì)列。

Fair調(diào)度器中的隊(duì)列有一個(gè)權(quán)重屬性(這個(gè)權(quán)重就是對(duì)公平的定義),并把這個(gè)屬性作為公平調(diào)度的依據(jù)。在這個(gè)例子中,當(dāng)調(diào)度器分配集群40:60資源給proddev時(shí)便視作公平,engscience隊(duì)列沒有定義權(quán)重,則會(huì)被平均分配。這里的權(quán)重并不是百分比,我們把上面的40和60分別替換成2和3,效果也是一樣的。注意,對(duì)于在沒有配置文件時(shí)按用戶自動(dòng)創(chuàng)建的隊(duì)列,它們?nèi)杂袡?quán)重并且權(quán)重值為1。

每個(gè)隊(duì)列內(nèi)部仍可以有不同的調(diào)度策略。隊(duì)列的默認(rèn)調(diào)度策略可以通過頂級(jí)元素<defaultQueueSchedulingPolicy>進(jìn)行配置,如果沒有配置,默認(rèn)采用公平調(diào)度。

盡管是Fair調(diào)度器,其仍支持在隊(duì)列級(jí)別進(jìn)行FIFO調(diào)度。每個(gè)隊(duì)列的調(diào)度策略可以被其內(nèi)部的<schedulingPolicy> 元素覆蓋,在上面這個(gè)例子中,prod隊(duì)列就被指定采用FIFO進(jìn)行調(diào)度,所以,對(duì)于提交到prod隊(duì)列的任務(wù)就可以按照FIFO規(guī)則順序的執(zhí)行了。需要注意,proddev之間的調(diào)度仍然是公平調(diào)度,同樣engscience也是公平調(diào)度。

盡管上面的配置中沒有展示,每個(gè)隊(duì)列仍可配置最大、最小資源占用數(shù)和最大可運(yùn)行的應(yīng)用的數(shù)量。

3.4 隊(duì)列的設(shè)置

Fair調(diào)度器采用了一套基于規(guī)則的系統(tǒng)來確定應(yīng)用應(yīng)該放到哪個(gè)隊(duì)列。在上面的例子中,<queuePlacementPolicy> 元素定義了一個(gè)規(guī)則列表,其中的每個(gè)規(guī)則會(huì)被逐個(gè)嘗試直到匹配成功。例如,上例第一個(gè)規(guī)則specified,則會(huì)把應(yīng)用放到它指定的隊(duì)列中,若這個(gè)應(yīng)用沒有指定隊(duì)列名或隊(duì)列名不存在,則說明不匹配這個(gè)規(guī)則,然后嘗試下一個(gè)規(guī)則。primaryGroup規(guī)則會(huì)嘗試把應(yīng)用放在以用戶所在的Unix組名命名的隊(duì)列中,如果沒有這個(gè)隊(duì)列,不創(chuàng)建隊(duì)列轉(zhuǎn)而嘗試下一個(gè)規(guī)則。當(dāng)前面所有規(guī)則不滿足時(shí),則觸發(fā)default規(guī)則,把應(yīng)用放在dev.eng隊(duì)列中。

當(dāng)然,我們可以不配置queuePlacementPolicy規(guī)則,調(diào)度器則默認(rèn)采用如下規(guī)則:

<queuePlacementPolicy>
<rule name="specified" />
<rule name="user" />
</queuePlacementPolicy>12345

上面規(guī)則可以歸結(jié)成一句話,除非隊(duì)列被準(zhǔn)確的定義,否則會(huì)以用戶名為隊(duì)列名創(chuàng)建隊(duì)列。

還有一個(gè)簡(jiǎn)單的配置策略可以使得所有的應(yīng)用放入同一個(gè)隊(duì)列(default),這樣就可以讓所有應(yīng)用之間平等共享集群而不是在用戶之間。這個(gè)配置的定義如下:

<queuePlacementPolicy>
<rule name="default" />
</queuePlacementPolicy>1234

實(shí)現(xiàn)上面功能我們還可以不使用配置文件,直接設(shè)置yarn.scheduler.fair.user-as-default-queue=false,這樣應(yīng)用便會(huì)被放入default 隊(duì)列,而不是各個(gè)用戶名隊(duì)列。另外,我們還可以設(shè)置yarn.scheduler.fair.allow-undeclared-pools=false,這樣用戶就無法創(chuàng)建隊(duì)列了。

3.5 搶占(Preemption)

當(dāng)一個(gè)job提交到一個(gè)繁忙集群中的空隊(duì)列時(shí),job并不會(huì)馬上執(zhí)行,而是阻塞直到正在運(yùn)行的job釋放系統(tǒng)資源。為了使提交job的執(zhí)行時(shí)間更具預(yù)測(cè)性(可以設(shè)置等待的超時(shí)時(shí)間),F(xiàn)air調(diào)度器支持搶占。

搶占就是允許調(diào)度器殺掉占用超過其應(yīng)占份額資源隊(duì)列的containers,這些containers資源便可被分配到應(yīng)該享有這些份額資源的隊(duì)列中。需要注意搶占會(huì)降低集群的執(zhí)行效率,因?yàn)楸唤K止的containers需要被重新執(zhí)行。

可以通過設(shè)置一個(gè)全局的參數(shù)yarn.scheduler.fair.preemption=true來啟用搶占功能。此外,還有兩個(gè)參數(shù)用來控制搶占的過期時(shí)間(這兩個(gè)參數(shù)默認(rèn)沒有配置,需要至少配置一個(gè)來允許搶占Container):

- minimum share preemption timeout
- fair share preemption timeout123

如果隊(duì)列在minimum share preemption timeout指定的時(shí)間內(nèi)未獲得最小的資源保障,調(diào)度器就會(huì)搶占containers。我們可以通過配置文件中的頂級(jí)元素<defaultMinSharePreemptionTimeout>為所有隊(duì)列配置這個(gè)超時(shí)時(shí)間;我們還可以在<queue>元素內(nèi)配置<minSharePreemptionTimeout>元素來為某個(gè)隊(duì)列指定超時(shí)時(shí)間。

與之類似,如果隊(duì)列在fair share preemption timeout指定時(shí)間內(nèi)未獲得平等的資源的一半(這個(gè)比例可以配置),調(diào)度器則會(huì)進(jìn)行搶占containers。這個(gè)超時(shí)時(shí)間可以通過頂級(jí)元素<defaultFairSharePreemptionTimeout>和元素級(jí)元素<fairSharePreemptionTimeout>分別配置所有隊(duì)列和某個(gè)隊(duì)列的超時(shí)時(shí)間。上面提到的比例可以通過<defaultFairSharePreemptionThreshold>(配置所有隊(duì)列)和<fairSharePreemptionThreshold>(配置某個(gè)隊(duì)列)進(jìn)行配置,默認(rèn)是0.5。

到此,關(guān)于“Hadoop Yarn的資源調(diào)度器有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

網(wǎng)頁(yè)標(biāo)題:HadoopYarn的資源調(diào)度器有哪些
當(dāng)前網(wǎng)址:http://www.rwnh.cn/article18/jdjegp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)微信小程序、Google網(wǎng)站策劃、外貿(mào)建站、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
平定县| 鄢陵县| 和平区| 长沙市| 玉环县| 全南县| 特克斯县| 温州市| 伊金霍洛旗| 玉环县| 玉树县| 扶风县| 五寨县| 黑河市| 台东县| 外汇| 新乡市| 潜山县| 武鸣县| 西峡县| 革吉县| 东城区| 会昌县| 锦屏县| 娱乐| 金川县| 神木县| 乌什县| 崇仁县| 临泽县| 丹巴县| 娄烦县| 恭城| 石台县| 左贡县| 白水县| 楚雄市| 泸西县| 芒康县| 雷山县| 青神县|