參考:https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/
Yarn是Hadoop2的產物。提到這個問題就不得不說下Hadoop1與Hadoop2的差別。
詳細的內容可參考博客:https://blog.csdn.net/jiangheng0535/article/details/12946529 。
Hadoop1的架構是:多個Application --> JobTracker --> 多個TaskTracker。
多個Application提交任務到JobTracker,JobTracker根據application申請資源情況啟動並監控TaskTracker的狀態。簡單點來說存在以下四個問題:
1、JobTracker 是 Map-reduce 的集中處理點,存在單點故障。
2、JobTracker 既要監控各個Task的執行狀態,又要做任務調度,負責的任務太多,造成了過多的資源消耗。當 map-reduce job 非常多的時候,會造成很大的內存開銷,潛在來說,也增加了 JobTracker fail 的風險,這也是業界普遍總結出老 Hadoop 的 Map-Reduce 只能支持 4000 節點主機的上限。
3、在 TaskTracker 端,以 map/reduce task 的數目作為資源的表示過於簡單,沒有考慮到 cpu/ 內存的占用情況,如果兩個大內存消耗的 task 被調度到了一塊,很容易出現 OOM。
4、在 TaskTracker 端,把資源強制划分為 map task slot 和 reduce task slot, 如果當系統中只有 map task 或者只有 reduce task 的時候,會造成資源的浪費,也就是前面提過的集群資源利用的問題。
Yarn有沒有解決問題?
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,詳細內容可參考博客 https://blog.csdn.net/u012050154/article/details/52572756 。
各種大數據計算框架不斷出現,支持離線處理的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