新手必備:Hadoop基礎——YARN認知

Yarn是一個分佈式的資源管理系統,用以提高分佈式的集羣環境下的資源利用率,這些資源包括內存、IO、網絡、磁盤等。其產生的原因是爲了解決原MapReduce框架的不足。

最初MapReduce的committer們還可以週期性的在已有的代碼上進行修改,可是隨着代碼的增加以及原MapReduce框架設計的不足,在原MapReduce框架上進行修改變得越來越困難,

所以MapReduce的committer們決定從架構上重新設計MapReduce,使下一代的MapReduce(MRv2/Yarn)框架具有更好的擴展性、可用性、可靠性、向後兼容性和更高的資源利用率以及能支持除了MapReduce計算框架外的更多的計算框架。

1、MapReduce框架的不足

現在比較流行的說法是jobtracker的問題,比如單點故障,任務過重。但除了Jobtracker,同時還有一個TaskTracker。我們看下圖:
新手必備:Hadoop基礎——YARN認知

JobTacker概述

JobTacker其承擔的任務有:接受任務、計算資源、分配資源、與DataNode進行交流。

在hadoop中每個應用程序被表示成一個作業,每個作業又被分成多個任務,JobTracker的作業控制模塊則負責作業的分解和狀態監控。

*最重要的是狀態監控:主要包括TaskTracker狀態監控、作業狀態監控和任務狀態監控。主要作用:容錯和爲任務調度提供決策依據。

TaskTracker概述

TaskTracker是JobTracker和Task之間的橋樑:一方面,從JobTracker接收並執行各種命令:運行任務、提交任務、殺死任務等;另一方面,將本地節點上各個任務的狀態通過心跳週期性彙報給JobTracker。TaskTracker與JobTracker和Task之間採用了RPC協議進行通信

資源slot概述

slot不是CPU的Core,也不是memory chip,它是一個邏輯概念,一個節點的slot的數量用來表示某個節點的資源的容量或者說是能力的大小,因而slot是 Hadoop的資源單位。

hadoop中什麼是slots

所以JobTracker需要完成的任務太多,既要維護job的狀態又要維護job的task的狀態,造成過多的資源消耗

在taskTracker端,用map/reduce task作爲資源的表示過於簡單,沒有考慮到CPU、內存等資源情況,當把兩個需要消耗大內存的task調度到一起,很容易出現OOM

把資源強制劃分爲map/reduce slot,當只有map task時,reduce slot不能用;當只有reduce task時,map slot不能用,容易造成資源利用不足。

2、Yarn

首先讓我們看一看Yarn的架構

新手必備:Hadoop基礎——YARN認知

1.ResourceManager概述

是全局的,負責對於系統中的所有資源有最高的支配權。ResourceManager作爲資源的協調者有兩個主要的組件:Scheduler和ApplicationsManager(AsM)。

Scheduler負責分配最少但滿足application運行所需的資源量給Application。Scheduler只是基於資源的使用情況進行調度,並不負責監視/跟蹤application的狀態,當然也不會處理失敗的task。

ApplicationsManager負責處理client提交的job以及協商第一個container以供applicationMaster運行,並且在applicationMaster失敗的時候會重新啓動applicationMaster。

2.NodeManager概述

NM主要負責啓動RM分配給AM的container以及代表AM的container,並且會監視container的運行情況。

在啓動container的時候,NM會設置一些必要的環境變量以及將container運行所需的jar包、文件等從hdfs下載到本地,也就是所謂的資源本地化;當所有準備工作做好後,纔會啓動代表該container的腳本將程序啓動起來。

啓動起來後,NM會週期性的監視該container運行佔用的資源情況,若是超過了該container所聲明的資源量,則會kill掉該container所代表的進程。

3.ApplicationMaster概述

由於NodeManager 執行和監控任務需要資源,所以通過ApplicationMaster與ResourceManager溝通,獲取資源。換句話說,ApplicationMaster起着中間人的作用。

轉換爲更專業的術語:AM負責向ResourceManager索要NodeManager執行任務所需要的資源容器,更具體來講是ApplicationMaster負責從Scheduler申請資源,以及跟蹤這些資源的使用情況以及任務進度的監控。

所以我們看到JobTracker的功能被分散到各個進程中包括ResourceManager和NodeManager:

比如監控功能,分給了NodeManager,和Application Master。

ResourceManager裏面又分爲了兩個組件:調度器及應用程序管理器。

也就是說Yarn重構後,JobTracker的功能,被分散到了各個進程中。同時由於這些進程可以被單獨部署所以這樣就大大減輕了單點故障,及壓力。

最後要提醒在yarn上寫應用程序並不同於我們熟知的MapReduce應用程序,必須牢記yarn只是一個資源管理的框架,並不是一個計算框架,計算框架可以運行在yarn上。我們所能做的就是向RM申請container,然後配合NM一起來啓動container。

結語

感謝您的觀看,如有不足之處,歡迎批評指正。

爲了幫助大家讓學習變得輕鬆、高效,給大家免費分享一大批資料,幫助大家在成爲大數據工程師,乃至架構師的路上披荊斬棘。在這裏給大家推薦一個大數據學習交流圈:658558542 歡迎大家進×××流討論,學習交流,共同進步。

當真正開始學習的時候難免不知道從哪入手,導致效率低下影響繼續學習的信心。

但最重要的是不知道哪些技術需要重點掌握,學習時頻繁踩坑,最終浪費大量時間,所以有有效資源還是很有必要的。

最後祝福所有遇到瓶疾且不知道怎麼辦的大數據程序員們,祝福大家在往後的工作與面試中一切順利。

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