日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

YARN作业提交流程剖析

發(fā)布時間:2023/12/19 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 YARN作业提交流程剖析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

YARN(MapReduce2)

Yet Another Resource Negotiator / YARN Application Resource Negotiator
對于節(jié)點數(shù)超出4000的大型集群,MapReduce1系統(tǒng)開始面臨著擴(kuò)展性瓶頸。所以有了YARN的出現(xiàn)。
YARN將jobtracker的職能劃分為多個獨立的實體,從而改善了MR1面臨的擴(kuò)展瓶頸問題。Jobtracker負(fù)責(zé)作業(yè)調(diào)度和任務(wù)進(jìn)度監(jiān)視,跟蹤任務(wù)、重啟失敗或過慢的任務(wù)和進(jìn)行任務(wù)登記,例如維護(hù)計數(shù)器總數(shù)。
YARN將這兩種角色劃分為兩個獨立的守護(hù)進(jìn)程:管理集群上資源使用的資源管理器(Resource Manager)和管理集群上運(yùn)行任務(wù)生命周期的應(yīng)用管理器(Application master)。基本思路是:應(yīng)用服務(wù)器與資源管理器協(xié)商集群的計算資源:容器(containers,每個容器都有特定的內(nèi)存上限),在這些容器上運(yùn)行特定應(yīng)用程序的進(jìn)程。容器由集群節(jié)點上運(yùn)行的節(jié)點管理器(NodeManager)監(jiān)視,以確保應(yīng)用程序使用的資源不會超過分配給它的資源。
與jobtracker不同,應(yīng)用的每個實例(一個MapReduce任務(wù))有一個專用的應(yīng)用master,它運(yùn)行在應(yīng)用的運(yùn)行期間。
YARN上的MapReduce比經(jīng)典的MapReduce包括更多的實體
1. 提交MapReduce作業(yè)的客戶端
2. YARN資源管理器(ResourceManager),負(fù)責(zé)協(xié)調(diào)集群上計算資源的分配
3. YARN節(jié)點管理器(NodeManager),負(fù)責(zé)啟動和監(jiān)視集群中機(jī)器上的計算容器(container)
4. MapReduce應(yīng)用程序master負(fù)責(zé)協(xié)調(diào)運(yùn)行MapReduce作業(yè)的任務(wù)。它和MapReduce任務(wù)在容器中運(yùn)行,這些容器由資源管理器分配并由節(jié)點管理器進(jìn)行管理
5. 分布式文件系統(tǒng)(一般為HDFS),用來與其他實體間共享作業(yè)文件
作業(yè)運(yùn)行過程如圖

一、作業(yè)的提交

1. MapReduce2中的作業(yè)提交是使用與MapReduce1相同的用戶API
2. 從資源管理器獲取新的作業(yè)ID,在YARN命名法中它是一個應(yīng)用程序ID
3. 作業(yè)客戶端檢查作業(yè)的輸出說明,計算輸入分片并將作業(yè)資源(包括作業(yè)JAR、配置和分片信息)復(fù)制到HDFS。
4. 通過調(diào)用資源管理器上的submitApplication方法提交作業(yè)

二、作業(yè)初始化

5. 資源管理器收到調(diào)用它的submitApplication消息后,便將請求傳遞給調(diào)度器(scheduler)。調(diào)度器分配一個容器,然后資源管理器在節(jié)點管理器的管理下在容器中啟動應(yīng)用程序的master進(jìn)程
6. MapReduce作業(yè)的application master是一個Java應(yīng)用程序,它的主類是MRAppMaster。它對作業(yè)進(jìn)行初始化:通過創(chuàng)建多個簿記對象以保持對作業(yè)進(jìn)度的跟蹤,因為它將接受來自任務(wù)的進(jìn)度和完成報告
7. 接下來master接受來自共享文件系統(tǒng)的在客戶端計算的輸入分片,對每一個分片創(chuàng)建一個map任務(wù)對象一級有mapreduce.job.reduces屬性確定的多個reduce任務(wù)對象
接下來,application master決定如何運(yùn)行構(gòu)成MapReduce作業(yè)的各個任務(wù)。如果作業(yè)很小,就選擇在與它同一個JVM上運(yùn)行任務(wù)
相對于在一個節(jié)點上順序運(yùn)行他們,判斷在新的容器中分配和運(yùn)行任務(wù)的開銷大于并行運(yùn)行它們的開銷時,就會發(fā)生這一情況。這不同于MapReduce1,MapReduce1從不在單個tasktracker上運(yùn)行小作業(yè)。這樣的作業(yè)稱為uberized,或者作為uber任務(wù)運(yùn)行。
哪些任務(wù)是小任務(wù)?默認(rèn)情況下,小任務(wù)就是小于10個mapper且只有一個reducer且輸入大小小于一個HDFS塊的任務(wù)。(通過設(shè)置mapreduce.job.ubertask.maxmaps、mapreduce.job.ubertask.maxreduces和mapreduce.job.ubertask.maxbytes可以改變一個作業(yè)的上述值)。將mapreduce.job.ubertask.enable設(shè)置為false也可以完全使uber任務(wù)不可用。
在任何任務(wù)運(yùn)行之前,作業(yè)的setup方法為了設(shè)置作業(yè)的Outputcommiter被調(diào)用來建立作業(yè)的輸出目錄。在MapReduce1中,它在一個由tasktracker運(yùn)行的特殊任務(wù)中被調(diào)用(作業(yè)創(chuàng)建),而在YARN執(zhí)行框架中,該方法由應(yīng)用程序master直接調(diào)用。

三、任務(wù)分配

8. 如果作業(yè)不適合作為uber任務(wù)運(yùn)行,那么application master就會為該作業(yè)中的左右map任務(wù)和reduce任務(wù)向資源管理器請求容器。心跳信息的請求包括每個map任務(wù)的數(shù)據(jù)本地化信息,特別是輸入分片所在的主機(jī)和相應(yīng)機(jī)架信息。調(diào)度器使用這些信息來做調(diào)度決策(像jobtracker的調(diào)度器一樣)。理想情況下,它將任務(wù)分配到數(shù)據(jù)本地化的節(jié)點,但如果不可能這樣做,調(diào)度器就會相對于非本地化的分配優(yōu)先使用機(jī)架本地化的分配。
請求也為任務(wù)制定了內(nèi)存需求。在默認(rèn)情況下,map任務(wù)和reduce任務(wù)都分配到1024MB的內(nèi)存,但這可以通過mapreduce.map.memory.mb和mapreduce.reduce.memory.mb來設(shè)置。
內(nèi)存的分配方式不同于MapReduce1,MapReduce1中tasktrackers有在集群配置時設(shè)置的固定數(shù)量的槽,每個任務(wù)在一個槽上運(yùn)行。槽有最大內(nèi)存分配限制,這對集群是固定的,導(dǎo)致當(dāng)任務(wù)使用較少內(nèi)存時無法充分利用內(nèi)存(因為其他等待的任務(wù)不能使用這些未使用的內(nèi)存)以及由于任務(wù)不能獲取足夠內(nèi)存而導(dǎo)致作業(yè)失敗。
在YARN中,資源分為更細(xì)的粒度,所以可以避免上述問題。應(yīng)用程序可以請求最小到最大限制范圍的任意最小值倍數(shù)的內(nèi)存容量。默認(rèn)的內(nèi)存分配容量是調(diào)度器特定的,對于容量調(diào)度器,它的默認(rèn)值最小值是1024MB(由yarn.scheduler.capacity.minimum-allocation-mb設(shè)置),默認(rèn)的最大值是10240MB(由yarn.scheduler.capacity.maximum-allocation-mb設(shè)置)。因此,任務(wù)可以通過適當(dāng)設(shè)置mapreduce.map.memory.mb和mapreduce.reduce.memory.mb來請求1GB到10GB間的任意1GB倍數(shù)的內(nèi)存容量(調(diào)度器在需要的時候使用最接近的倍數(shù))

四、任務(wù)執(zhí)行

9. 一旦資源管理器的調(diào)度器(scheduler)為任務(wù)分配了容器,application master就通過與節(jié)點管理器通信來啟動容器(container)
10. 該任務(wù)由主類為YarnChild的Java應(yīng)用程序執(zhí)行。在它運(yùn)行任務(wù)之前,首先將任務(wù)需要的資源本地化,包括作業(yè)的配置、JAR文件和所有來自分布式緩存的文件
11. 運(yùn)行map任務(wù)和reduce任務(wù)

五、進(jìn)度和狀態(tài)更新

在YARN下運(yùn)行時,任務(wù)每三秒通過umbilical接口向application master匯報進(jìn)度和狀態(tài)(包含計數(shù)器),作為作業(yè)的匯聚試圖(aggregate view),如下圖。MapReduce1通過tasktracker到j(luò)obtracker來實現(xiàn)進(jìn)度更新。

客戶端每秒鐘(通過mapreduce.client.progressmonitor.pollinterval設(shè)置)查詢一次application master以接收進(jìn)度更新,通常都會向用戶顯示。
在MapReduce1中,作業(yè)跟蹤器的Web UI展示運(yùn)行作業(yè)列表及其進(jìn)度。在YARN中,資源管理器的Web UI展示了正在運(yùn)行的應(yīng)用以及連接到的對應(yīng)application master,每個application master展示MapReduce作業(yè)的進(jìn)度等進(jìn)一步的細(xì)節(jié)。

六、作業(yè)完成

除了向application master查詢進(jìn)度外,客戶端每5秒鐘還通過調(diào)用Job的waitForCompletion來檢查作業(yè)是否完成。查詢的間隔可以通過mapreduce.client.completion.pollinterval屬性進(jìn)行設(shè)置。
作業(yè)完成后,application master和任務(wù)容器清理其工作狀態(tài),OutputCommiter的作業(yè)清理方法會被調(diào)用。作業(yè)歷史服務(wù)器保存作業(yè)的信息供用戶需要時查詢。

總結(jié)

以上是生活随笔為你收集整理的YARN作业提交流程剖析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。