Yarn 筆記一

1.Yarn架構

ResourceManager(rm)處理客戶端請求、啓動/監控ApplicationMaster、監控NodeManager、資源分配與調度;
NodeManager(nm)單個節點上的資源管理、處理來自ResourceManager的命令、處理來自ApplicationMaster的命令;
ApplicationMaster(am)數據切分、爲應用程序申請資源,並分配給內部任務、任務監控與容錯。
Container對任務運行環境的抽象,封裝了CPU、內存等多維資源以及環境變量、啓動命令等任務運行相關的信息。
 
2.Yarn任務提交(工作機制)
作業提交過程之YARN
 
作業提交
1步:Client調用job.waitForCompletion方法,向整個集羣提交MapReduce作業。
2步:ClientRM申請一個作業id
3步:RM給Client返回該job資源的提交路徑和作業id。
4步:Client提交jar包、切片信息和配置文件到指定的資源提交路徑。
5步:Client提交完資源後,向RM申請運行rAppMaster
作業初始化
6步:當RM收到Client的請求後,將該job添加到容量調度器中。
7步:某一個空閒的NM領取到該Job
8步:該NM創建Container,併產生MRAppmaster
9步:下載Client提交的資源到本地。
任務分配
10步:MrAppMasterRM申請運行多個MapTask任務資源。
11步:RM將運行MapTask任務分配給另外兩個NodeManager,另兩個NodeManager分別領取任務並創建容器。
任務運行
12步:MR向兩個接收到任務的NodeManager發送程序啓動腳本,這兩個NodeManager分別啓動MapTaskMapTask對數據分區排序。
13步:MrAppMaster等待所有MapTask運行完畢後,向RM申請容器,運行ReduceTask
14步:ReduceTaskMapTask獲取相應分區的數據。
15步:程序運行完畢後,MR會向RM申請註銷自己。
進度和狀態更新
YARN中的任務將其進度和狀態返回給應用管理器, 客戶端每秒(通過 mapreduce.client.progressmonitor.pollinterval設置)嚮應用管理器請求進度更新, 展示給用戶。
作業完成
除了嚮應用管理器請求作業進度外, 客戶端每5秒都會通過調用waitForCompletion()來檢查作業是否完成。時間間隔可以通過mapreduce.client.completion.pollinterval來設置。作業完成之後, 應用管理器和Container會清理工作狀態。作業的信息會被作業歷史服務器存儲以備之後用戶覈查。
 
3.Yarn調度策略
1.
FIFO(先進先出調度器)
2.容量調度器(Capacity Scheduler 默認的調度器) 隊列內部FIFO

3.Fair Scheduler(公平調度器,CDH版本的hadoop默認使用的調度器)
 
Fair調度器的設計目標是爲所有的應用分配公平的資源(對公平的定義可以通過參數來設置)。公 平調度在也可以在多個隊列間工作。舉個例子,假設有兩個用戶AB,他們分別擁有一個隊列。 當A啓動一個jobB沒有任務時,A會獲得全部集羣資源;當B啓動一個job後,Ajob會繼續運行,不過一會兒之後兩個任務會各自獲得一半的集羣資源。如果此時B再啓動第二個job並且其它job還在運行,則它將會和B的第一個job共享B這個隊列的資源,也就是B的兩個job會用於四分之 一的集羣資源,而Ajob仍然用於集羣一半的資源,結果就是資源最終在兩個用戶之間平等的共
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章