參考:https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/html
Yarn是Hadoop2的產物。提到這個問題就不得不說下Hadoop1與Hadoop2的差異。apache
詳細的內容可參考博客:https://blog.csdn.net/jiangheng0535/article/details/12946529 。架構
Hadoop1的架構是:多個Application --> JobTracker --> 多個TaskTracker。app
多個Application提交任務到JobTracker,JobTracker根據application申請資源狀況啓動並監控TaskTracker的狀態。簡單點來講存在如下四個問題:框架
1、JobTracker 是 Map-reduce 的集中處理點,存在單點故障。分佈式
2、JobTracker 既要監控各個Task的執行狀態,又要作任務調度,負責的任務太多,形成了過多的資源消耗。當 map-reduce job 很是多的時候,會形成很大的內存開銷,潛在來講,也增長了 JobTracker fail 的風險,這也是業界廣泛總結出老 Hadoop 的 Map-Reduce 只能支持 4000 節點主機的上限。oop
3、在 TaskTracker 端,以 map/reduce task 的數目做爲資源的表示過於簡單,沒有考慮到 cpu/ 內存的佔用狀況,若是兩個大內存消耗的 task 被調度到了一塊,很容易出現 OOM。性能
4、在 TaskTracker 端,把資源強制劃分爲 map task slot 和 reduce task slot, 若是當系統中只有 map task 或者只有 reduce task 的時候,會形成資源的浪費,也就是前面提過的集羣資源利用的問題。大數據
Yarn有沒有解決問題?spa
hadoop2的架構是:多個application --> ResourceManager --> 多個NodeManager --> 多個application Master --> 多個container
多個Application提交任務到ResouceManager,ResourceManager經過NodeManager針對於每一個application啓動一個application Master。
application Master經過向ResourceManger申請資源,啓動container。
針對於上述問題:
1、yarn可經過ResouceManager的HA來解決單點故障問題。
http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html 。
2、yarn 將 JobTracker 兩個主要的功能資源管理和任務調度 / 監控分離成單獨的組件。新的資源管理器全局管理全部應用程序計算資源的分配,每個應用的 ApplicationMaster 負責相應的調度和協調。
3、yarn 經過NodeManager詳細地統計了各個節點各個緯度的資源使用狀況。
4、yarn的container沒有map和reduce之分,可充分利用資源。
mesos解決了什麼問題?
關於mesos,詳細內容可參考博客 http://www.javashuo.com/article/p-chgavfsq-v.html 。
各類大數據計算框架不斷出現,支持離線處理的MapReduce、在線處理的Storm,迭代計算框架Spark、及流式處理框架S4……各類分佈式計算框架應運而生,
各自解決某一類應用中的問題。Mesos能夠在各個框架間進行粗粒度的資源分配,每一個框架根據自身任務的特色進行細粒度的任務調度。
其架構以下:
Mesos Master:整個系統的核心。主要負責管理各個Framework(經過Framework_manager管理接入的各個Framework)和Slave(經過Slaves_manager管理全部的Slave),並將Slave上的資源按照某資源分配策略分配給各個Framework;
Mesos Slave:接收來自Mesos Master的命令、管理本地節點上的各個Mesos Task,如爲每一個Executor分配資源。Mesos Slave將本身的資源量(包括CPU和內存)發送經Mesos Master,由Mesos Master的Allocator模塊決定資源的具體分配;
Framework:負責外部的計算框架的接入,如Hadoop、Spark等。這些外部計算框架經過註冊的方式接入Mesos,由Mesos進行分佈式集羣資源的分配;而任務的調度和執行由計算機框架自己完成(即計算框架自己調度器負責將資源分配給具體的任務);
Executor:啓動框架內部的Task。因爲不一樣的框架接入Mesos的接口、方式不一樣,因此新框架接入Mesos須要編寫本身的executor,通知Mesos如何啓動框架中的Task。
mesos與yarn有哪些不一樣?
1、Mesos和Yarn都採用雙層調度機制,即資源管理系統層(將資源分配給應用程序)和資源調度層(將資源具體分配給計算框架中的任務),但資源分配程度不一樣。Mesos只負責爲Framework計算框架提供資源,具體的資源分配由計算框架本身實現。而Yarn則從計算框架中分離出資源管理,本身全權負責資源分配及調度;
2、Mesos採用Linux Container容器(一種內核虛擬化技術)對多計算框架共享資源進行隔離。而Yarn則是經過進程隔離,這一點Yarn的性能比較好(Yarn的發展借鑑了Mesos思想);
連接:https://www.jianshu.com/p/a4ba843b09cc