AI創想秀,邂逅“華為云ModelArts”征文大賽——第一次收官
676
2025-04-01
MapReduce作為一個面向海量數據分布式處理的計算模型、框架和平臺,具備以下三個特點:
1、易于編程:程序員僅需描述Map階段和Reduce階段要如何解析、處理數據,具體怎么讀取數據并對處理結果進行排序、分區、組合、合并等等,都可以交由系統的執行框架處理。
2、良好的擴展性:可通過添加節點以擴展集群運算能力。
3、高容錯性:在程序運行過程中,當某些節點發生故障時,通過計算遷移或數據遷移等策略在其他節點繼續執行受影響的任務,提高集群的可用性與容錯性。
那么問題來了,MapReduce到底是如何提交任務到集群執行的呢?集群資源如何獲取?任務如何分配?由誰監控執行?
這一連串的問題我們將在這篇文章中為大家解決。
其中MapReduce Program是編輯好的應用程序,由客戶端進程JobClient提交給集群中的老大JobTracker。
JobTracker負責集群資源管理和任務調度,它會解析應用程序,然后調動各個小弟TaskTracker分工合作,為應用程序提供運行資源并分布式實施數據處理作業。在小弟干活的過程中,老大負責監控和故障處理。
1、程序員編寫好MapReduce Program作業,也就是JAVA程序,然后由客戶端進行提交;
2、客戶端JobClient向JobTracker申請一個作業ID,加入集群任務列表中;
3、客戶端JobClient把作業源代碼以及相關的依賴文件存儲到HDFS的系統指定目錄下;
4、客戶端JobClient正式向JobTracker提交作業;
5、JobTracker初始化作業,比如計算資源需求等;
6、JobTracker通過HDFS client向NameNode(管理文件系統元數據的角色,它知道每個文件的分布情況)詢問程序需要處理的輸入文件分布在哪些節點,并得到這些索引;
7、JobTracker通過和TaskTracker每分鐘一次的心跳聯系來獲知哪些節點可以運行任務(作業將拆分成許多任務給各個小弟執行,集群中每個數據節點都部署一個小弟角色),比如死機或者沒有剩余資源的節點就不再執行新任務;
8、JobTracker將任務分配給上一步中的TaskTracker,這些TaskTracker通過訪問HDFS來獲取任務代碼;
9、執行任務的TaskTracker在本節點上啟動虛擬機(JVM)來執行任務;
10、在各個JVM中執行任務,該過程受JobTracker監視。如果任務運行失敗則由JobTracker通知相應的TaskTracker重啟任務,直到全部Map任務和Reduce任務都運行完成。
這個過程看似妥當,其實有個致命的問題:集群老大JobTracter工作量太大。
老大平時需要管理眾多小弟不說,當接收到任務執行申請時既要充當整個集群的資源調度者、任務分發者,又要負責各個任務的狀態監控以及重啟失敗任務,工作相當繁忙。
在MapReduce V1中JobTracter只部署在一個節點上,沒有備用或者分擔工作的進程,所以整個集群存在性能瓶頸和單點故障問題,擴展性也受到受限。
另外,該機制不支持非MapReduce類型的任務提交集群運行,在大數據處理環境中,這也是極不友好的。
正是在這樣的背景下催生了Yarn——Hadoop2.0的資源管理系統。Yarn是一個通用的資源管理系統,可為上層應用(包括且不限于MapReduce)提供統一的資源管理和調度,它的出現解決了以上所有的問題。
,Yarn主要包括Resource Manager、Node Manager和Application Master(即App Mstr)三個部分。
Resource Manager(簡稱RM)即集群老大,是一個全局的資源管理器,負責集群資源統一管理調度和應用程序管理。它包括兩個組成部分:Resource Scheduler(資源調度器)和Applications Manager(應用程序管理器)。
資源調度器Resource Scheduler(簡稱RS)負責將集群中的資源分配給各個應用程序。資源用一個抽象概念Container表示,它封裝了節點上的多維度資源,如內存、CPU、磁盤、網絡等(目前只實現內存、CPU);
應用程序管理器Applications Manager(簡稱ASM)負責管理整個系統中的所有應用程序。主要負責接收來自Client的應用程序提交申請,與資源調度器Resource Scheduler協商資源情況,啟動并監控AppMaster(下文有解釋)運行,在AppMaster運行失敗時重啟它。
Node Manager(簡稱NM)即集群小弟,每個數據節點都部署有該角色,用以管理本節點資源(CPU、內存)。一方面它會定期向老大匯報本節點的資源使用情況和各個Container的運行狀態;另一方面,它接收并處理來自AppMaster的Container啟動/停止等各種請求。
Application Master(簡稱AppMaster、App Mstr、AM)依賴于各種計算框架的實現(例如MR AppMaster),負責一個Job生命周期內的所有管理工作,相當于老大麾下的項目負責人。
Yarn具體工作流程如下
步驟1:Yarn的客戶端Client向RM中的ASM申請Job ID,RM審核該申請的合法性,審核通過后創建一個Job ID返回給客戶端;Client把作業源代碼以及相關的依賴文件存儲到HDFS的系統指定目錄下;Client正式向ASM提交作業, 其中包括AM程序、啟動AM的命令以及用戶程序等。
步驟2:ASM接收客戶端的作業請求后為該作業分配第一個Container。并由對應的Node Manager在這個Container中啟動AM程序,用來管理當前的Job。
步驟3:AM啟動后向ASM注冊,ASM接收AM注冊信息,并將集群資源信息、作業源代碼的位置信息等反饋給AM。
步驟4:AM從HDFS獲取作業程序和相關的依賴文件,了解任務詳細情況,確定執行作業需要多少資源,并向RS發出資源申請(該步驟可能無法一次性完成整個作業的資源申請,允許多次申請)。RM根據集群資源情況為AM分配資源,并將資源位置和數量信息發給AM。
步驟5:AM申請到資源后,便與對應的Node Manager通信,要求它拿出Container來啟動JVM。
步驟6:Node Manager為任務設置好運行環境(包括環境變量、JAR 包、二進制程序等),將進程啟動命令寫到一個腳本中,并通過運行該腳本啟動JVM。
步驟7:各個JVM啟動后首先向AM注冊,AM為其分配任務。JVM訪問HDFS獲取具體任務程序并執行;任務運行過程中,AM可以通過NM詢問各個任務的運行狀態和進度,從而可以在任務運行失敗時對其進行重啟;客戶端Client可隨時向AM查詢作業的運行狀態和進度。
步驟8:當前Job中的全部任務運行完成后,相應的Container也被回收或應用到其他計算任務中。AM向ASM匯報作業執行結束,ASM注銷AM,整個作業執行完成。
在以上的資源調度和任務分配過程中可以看出Yarn的工作機制相比MapReduce V1聰明了很多:
1、老大在管理各個Job方面的壓力全部下放給了各個AppMaster,完美地解決了單點性能瓶頸問題。
2、在Yarn中,Resource Manager支持主備模式部署。也就是可以在集群中的兩個節點上都部署該角色,同一時刻只有一個在工作,當正在工作的RM故障時,立馬由另一個來接替工作,完美地解決了單點故障問題。
3、Yarn除了可以支持MapReduce的作業,還可以支持其他計算框架,如Spark、Storm等。
好啦,今天的分享到這里先告一段落,大家都學會了嗎?
分布式 Hadoop Yarn
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。