您好,登錄后才能下訂單哦!
這篇文章跟大家分析一下“MapReduce運行架構以及Yarn資源調度是怎樣的”。內容詳細易懂,對“MapReduce運行架構以及Yarn資源調度是怎樣的”感興趣的朋友可以跟著小編的思路慢慢深入來閱讀一下,希望閱讀后能夠對大家有所幫助。下面跟著小編一起深入學習“MapReduce運行架構以及Yarn資源調度是怎樣的”的知識吧。
??某天, 某研究機構設計了一款私人飛機圖紙, 之后某公司根據該圖紙制作出一架私人飛機. 然后某位有錢人士覺得這架飛機非常好, 就花高價錢買下這架飛機. 飛機要想起飛, 需要向空管局申請航線, 申請成功后, 這位富人又雇傭了一位飛行員. 最后飛行員開啟飛機, 這位富人如愿坐上心儀的飛機并翱翔天際.
??上述流程可以概括為:
設計圖紙 --> 私人飛機 --> 空管局(申請航線) --> 雇傭飛行員(駕駛飛機) --> 開啟飛機(翱翔天際).
??看完上述實例, 再來看某個MapReduce應用的運行流程:
??06年, MapReduce這一計算框架納入Hadoop項目, 逐漸進入人們的眼簾. 一時間各大公司, 開發人員等都在學習使用MapReduce.
??某一天, 你基于MapReduce的原理開發了一個Application(應用程序), 并將它放在服務器上運行. 運行開始后, App先向資源管理器申請資源, 資源申請成功后, App又去找任務調度器, 讓它安排一個可以調度App的任務. 最后task執行App, 完成分布式計算.
??上述流程可以概括為:
MapReduce框架 --> Application --> 資源調度器(申請資源) --> 任務調度器(執行App) --> 分布式并行計算.
??既然程序的執行需要資源調度器和任務調度器, 那么MapReduce在各個節點上又是怎么運行的呢?
??在之前的文章Hadoop簡介中, 也曾提到過Hadoop兩大版本的組成是不一樣的, 不一樣的最大區別就在于MapReduce應用程序運行時資源和任務的調度上. 接下來, 來看這兩大版本是如何調度的.
官方配圖:
??
在Hadoop1.x版本, MR自帶資源調度器, 資源調度器都是主從架構, 第一幅圖中有兩個新角色: JobTracker和TaskTracker.
??上述三幅圖的流程與下圖相似:
??再來分析這個流程圖, 不難看出:
JobTracker的壓力很大, 容易出現單點故障. JobTracker即是資源調度主節點又是任務調度主節點, 監控整個集群的資源負載.
TaskTracker是從節點, 管理自身節點的資源, 同時和JobTracker保持心跳, 匯報資源獲取情況, 進而獲取task任務.
資源管理與計算調度強耦合, 其他框架難以加入集群.
??JobTracker, TaskTracker(以下簡稱JTT)是MR自帶的, 如果想要在這個集群上運行Spark, 需要手動實現一套JTT, 實現之后這個集群就會有兩套JTT來管理整個集群的資源.
??當MR程序申請到資源 (假設申請大量資源) 開始計算時, Spark實現的JTT并不知道MR的JTT已經申請資源, Spark的JTT仍然會認為整個集群的資源是足夠的, 當Spark的計算程序運行時, 也會去申請資源 (假設也申請大量資源) , 但此時集群上已經沒有足夠的資源, 這就會導致資源搶奪的問題, 造成資源搶奪的原因是因為資源隔離. 也就是說不同框架對資源不能全局掌控.
MR處理思想是計算像數據移動, 或者說計算移動數據不移動, 或者說是數據本地化. 而上述流程中, reduce計算的數據"over the network"通過網絡進行傳輸, 也就是說數據向計算移動, 這樣就存在大量網絡IO, 降低集群的效率.
??而在Hadoop2.x版本中, 完全廢除了MR自帶的JTT, 引入一個新的資源管理工具 – Yarn, 下面來看Yarn是如何工作的.
官方配圖:
??在Hadoop2.x版本, Hadoop將自帶的資源調度器提取解耦形成一個獨立的資源調度器 – Yarn(Yet Another Resource Negotiator), Yarn資源調度器也是主從架構. 主節點是ResourceManager, 從節點是NodeManager.
??Yarn資源調度流程圖:
??上述流程比較繁瑣, 分為9步, 圖中可以分析出:
Yarn的核心思想將Hadoop1.x中JobTracker的資源管理和任務調度兩個功能分開,分別由ResourceManager和ApplicationMaster進程實現.
ResourceManager:負責整個集群的資源管理和調度
ApplicationMaster:負責應用程序相關的事務,比如任務調度、任務監控和容錯等.
Yarn為AppMstr提供容錯機制, 當AppMstr掛掉后, RM會在一臺資源充足的隨機節點上重新啟動一個AppMstr.
每一個MapReduce作業對應一個AppMstr
NodeManager: 管理單節點上的資源, 處理來自RM的命令, 與RM保持心跳, 處理來自ApplicationMaster的命令.
Container: NM節點上的資源抽象, 內存, CPU, 磁盤, 網絡等資源的封裝.
YARN的引入,使得多個計算框架可運行在一個集群中. 每個應用程序對應一個ApplicationMaster. 目前可以運行在YARN上的計算框架有MapReduce、Spark、Storm等.
關于MapReduce運行架構以及Yarn資源調度是怎樣的就分享到這里啦,希望上述內容能夠讓大家有所提升。如果想要學習更多知識,請大家多多留意小編的更新。謝謝大家關注一下億速云網站!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。