1. 程式人生 > >hadoop裡面的MapReduce和yarn的執行原理

hadoop裡面的MapReduce和yarn的執行原理

hadoop 1.xx與hadoop2.xx的區別特別大。特別是HDFS和mapreduce都有了很大的改變。hadoop2.xx具有高容錯,有效的減少了由於單點故障所產生的影響,並且可用性和速度都有很大的提升。
hadoop2.xx的主要變更:
1)、HDFS的NameNode 可以以叢集的方式進行部署,這就是高可用叢集,即HA-hadoop叢集。
2)、MapReduce裡面的JobTracker中的資源管理及任務生命週期管理(包括定時觸發及監控),拆分成兩個獨立的元件,並更名為YARN(Yet Another Resource Negotiator)。
下面就詳細介紹一下:
一、hadoop 1.xx中的MapReduce
hadoop1的MapReduce的執行圖如下:
這裡寫圖片描述


多個客戶端向主機發送請求,JobTracker(資源和任務的排程管理)將任務和資源分配給從機裡面的TaskTracker裡面,同時TaskTracker過了一定的時間會發送一個心跳,來反映是否活著。這就造成了JobTracker的壓力過大。
出現的問題:
1.單節點,主要時指JobTracker程序
2.節點壓力大
3.只能執行MapReduce框架
這裡寫圖片描述

這裡寫圖片描述
詳見:http://www.cnblogs.com/sy270321/p/4395916.html
二、yarn架構
yarn:Yet Another Resource Negotiator另一種資源管理。
主要概念是將資源管理的功能和作業排程/監控分離成獨立的守護程序。主要有全域性的ResourceManager和每個應用程式的ApplicationMaster程序,一個應用程式可以是一個單一的程序和多程序的新元件。
ResourceManager和NodeManager構成了計算機資料框架。
ResourceManager是在系統中的所有應用程式中仲裁資源的最終權威。NodeManager是每臺機器框架代理負責容器,監測他們的資源使用(cpu、記憶體、磁碟、網路)和報告同一個的ResourceManager /Scheduler排程程式。
實際上,每個應用程式的ApplicationMaster是一個特定於框架的庫,它的任務是與來自ResourceManager的資源進行協商,並與NodeManager(s)一起工作,以執行和監視任務。
這裡寫圖片描述


yarn架構:
master/slaver結構(主從結構):一個主機(ResourceManager)多個從機(NodeManager)
ResourceManager作用:
在整個叢集中只有一個ResourceManager處於工作狀態(即使在高可用的Hadoop叢集裡面),負責資源的統一管理和排程。
1)處理客戶端傳送的請求(啟動或者殺死應用程式)
2)啟動/監控ApplicationMaster,ApplicationMaster掛了,RM將會在另一個節點上啟動AM
3)RM要監控NodeManager
4)整個叢集資源的分配和呼叫
ResourceManager有兩個主要元件:Scheduler(排程程式)和ApplicationsManager。
Scheduler排程器負責將資源分配給各種執行的應用程式,這些應用程式受到熟悉的容量、佇列等約束。排程器是純粹的排程器,因為它沒有對應用程式的狀態進行監視或跟蹤。此外它不能保證重新啟動失敗或者是由於應用程式失敗或硬體故障的任務。
排程器根據應用程式的資源需求執行排程功能;它基於一個資源容器的抽象概念,它包含了諸如記憶體、cpu、磁碟、網路等元素。
排程器有一個可插拔的策略,負責在各種佇列、應用程式等之間劃分叢集資源。
ApplicationsManager負責接受工作提交,協商第一個容器執行應用程式特定的ApplicationMaster,並提供重新啟動ApplicationMaster容器失敗的服務.
每個應用程式的ApplicationMaster有責任從排程程式中協商適當的資源容器,跟蹤它們的狀態並監控進度。
hadoop2.xx裡面的MapReduce保持API相容性與以前的hadoop1.xx穩定版本。
這意味著所有MapReduce作業都應該在僅僅重新編譯的情況下,在YARN上面保持不變.
YARN還支援通過預訂系統進行資源保留的概念,該元件允許使用者指定資源的時間過長和時間限制(例如:,最後期限),以及儲備資源以確保可以預見的重要工作的執行。
保留區系統跟蹤資源的超時時間,執行預訂控制,並動態地指示底層排程程式以確保保留已滿。