yarn知識體系總結

2019/2/18 星期一

yarn知識體系總結

Yarn 產生的原因
(1)MapreduceV1 中,jobtracker 存在瓶頸:
集羣上運行的所有mr 程序都有jobtracker 來調度
SPOF 單點故障
職責劃分不清晰
(2) 將jobtracker 的職責劃分成兩個部分:
 資源調度與管理:由統一的資源調度平臺(集羣)來實現(yarn)
 任務監控與管理:
A、每一個application 運行時擁有一個自己的任務監控管理進程AppMaster
B、AppMaster 的生命週期:application 提交給yarn 集羣之後,yarn 負責啓動該application 的AppMaster,隨後任務的執行監控調度等工作都交由AppMaster,待這個application 運行完畢後,AppMaster 向yarn 註銷自己。
C、AppMaster 的具體實現由application 所使用的分佈式運算框架自己負責,比如Mapreduce 類型的application 有MrAppMaster 實現類。Spark DAG 應用則有SparkOnYarn 的SparkContext 實現

yarn的基本概念-mr程序提交的流程
yarn:hadoop的資源管理調度平臺(集羣)---爲用戶程序提供運算資源的管理和調度
用戶程序:如用戶開發的mr程序

yarn的2個主要的類節點(服務進程)
1、resourcemanager 主節點master --- 只需要1個 (也可以實現HA)
2、nodemanager 從節點 -----根據集羣規模可以有多個
具體小結如下:
(1)ResourceManager ----> master node,可配多個RM 實現HA 機制,
ResourceManager由兩個核心組件構成:
Scheduler 和ApplicationsManager;
Scheduler:負責資源調度,調度策略可插拔(內置實現CapacityScheduler / FairScheduler )不提供對application 運行的監控;
ApplicationsManager:負責響應任務提交請求,協商applicationMaster 運行的container,重啓失敗的applicationMaster
(2)NodeManager ----> slave nodes,每臺機器上一個
職責:加載containers,監控各container 的資源使用情況,並向Resourcemanager/Scheduler 彙報
(3)ApplicationMaster ----> 特定運算框架自己實現,接口爲統一的AppMaster
職責:向Scheduler 請求適當的資源,跟蹤任務的執行,監控任務執行進度、狀態等

mr程序提交的詳細流程

1、runjar啓動起來之後,就會找resourcemanager,發出一個遠程過程調用RPC //申請提交一個job(mr程序)
2、resourcemanager會返回一個jobid以及一個提交job相關文件的hdfs路徑給runjar程序 比如:hdfs://../stagingDIR
3、runjar就會上傳job相關的文件到hdfs路徑下 比如:hdfs://.../stagingDIR/jobid/worcount.jar
jbo.xml
job split的切片信息
4、通知RM,文件上傳成功
5、在RM內部會對本次客戶端提交的任務,構造出一個任務出來,放在他的內部的任務隊列中。別的客戶端提交上來的任務也會在這個隊列中,當資源不夠的時候,會等待。
6、nodemanager和resourcemanager之間時刻都保持着一個心跳的通信,任務出來之後,nodemanager會去自動去領取任務,比如:nodemanager在領取任務的時候被其中一個節點領取到了任務,nodemanager會到hdfs上拉取job的相關的文件。
7、nodemanager在自己的內部隔離出一部分資源出來,形成一個容器(container)cpu+mem 這個任務要做的第一件事情是:他會在容器裏面去啓動一個程序,(那他怎麼知道去啓動這個程序的呢?resource manager會在這個job任務中描述的會嵌入一個啓動程序的shell命令)nodemanager負責把這個shell命令在他的機器上執行一下就ok了,執行以下就會在容器中啓動一個MapReduce jar包中的一個程序,這個程序就叫做(MRappmaster進程)接下來所有的處理流程就由這個MRappmaster進程來主導了。
MRAPPmaster會做什麼事?他本身又是個什麼東西呢?
MRappmaster:其實就是一個MapReduce的應用程序的主管。這個主管進程是MapReduce框架來實現的,這個就是用來管理這個MapReduce程序的執行
在yarn中其實就只負責到把mrappmaster進程啓動起來。其他的MapReduce程序具體是怎麼運行的,yarn就不管了。yarn只負責給你相應需要的資源就Ok了
8、mrappmaster啓動起來之後,會向resourcemanager註冊並申請程序運行的資源。mrappmaster會啓動map task和reduce task進程,所以需要資源包括監控和管理任務所需要的資源。
9、resourcemanager就會把mrappmaster申請的響應的資源分配給他,那麼在任務隊列中就又會產生新的任務,這些任務是交給nodemanager去處理的(其實就是分配資源的任務)nodemanager領取到新的分配資源的任務的時候就會在自己的這臺機器上創建新的容器(一臺機器上可以創建多個容器)每臺nodemanager創建好的容器資源列表會返回給RM
10、RM就會返回資源列表信息給MRappmaster
11、mrappmaster就會去找到每臺nodemanager中領到任務並創建容器的機器,讓他們去啓動map task進程。(要啓動幾個map task進程是看job任務中關於job split切片規則的,規則中是幾個就起幾個map task進程)
12、當map task處理完成任務後會返回信息給mrappmaster 告訴他我把處理好的 任務結果放在了哪里哪里....
13、mrappmaster會再次向RM申請新的資源,RM會爲這次的申請再次分配一個任務到任務隊列中,那麼其中的一個nodemanager會去領取任務,並且分配容器,然後會返回給RM,告訴他我創建好了容器,然後RM會告訴給MRappamster告訴他,你需要的資源,我給你創建好了,並且告訴他在那臺nodemanager上。
14、mrappmaster會在響應的nodemanager容器中啓動一個reduce task 進程,並且告訴他map 輸出的結果在哪裏 哪裏...
reduce task就會去拿,在執行他的內部的執行過程
16、reduce task就會給mrappmaster返回處理結果,
17、整個MR程序處理完成,mrappmaster向RM註銷自己。

小結:
YARN的工作機制--MR程序運行流程
查看map task和reduce task的進程用命令jps看到的是yarn child

總結:
1.yarn只響應job的提交及爲job的運行分配資源
yarn不參與job的具體運行機制和流程
2.mapreduce程序中有一個MrAppmaster來負責程序的 具體運行流程控制
3.由於yarn不提供用戶程序的具體運行,所以yarn可以爲各種類型的資源程序提供資源服務
(YARN就類似於一個操作系統平臺,可以運行各種各樣運算框架所開發的程序:mapreduce storm spark...)
4.因爲yarn的這種運行機制,延長了hadoop的生命週期
5.因爲yarn可以整合各種各樣的運算框架,企業就可以把各種分佈式框架整合到hadoop集羣
以便於企業管理和節約了企業的成本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章