【MR】MapReduce 1 與 MapReduce 2(YARN)框架對比

這裏轉載一篇寫的好博文,供大家參考和學習
http://blog.csdn.net/yangjjuan/article/details/74530255?ref=myread

一,新舊MapReduce API比較
(1)新的API傾向於使用抽象類,而不是接口,因爲這更容易擴展。如在新的API中,Mapper 和Reducer現在都是抽象類。接口只有方法聲明而沒有方法實現,且要求所有實現類(不包括抽象類)必須實現接口中的每一個方法。接口的最大優點是允許一個類實現多個接口,進而實現類似C++中的“多重繼承”。抽象類則是一種較寬鬆,它可爲某些方法提供默認實現。而繼承類則可選擇是否重新實現這些方法。正是因爲這一點,抽象類在類衍化方面更有優勢,也就是說,抽象類具有良好的向後兼容性,當需要爲抽象類添加新的方法時,只要新添加的方法提供了默認實現,用戶之前的代碼就不必修改了。
(2)新的API是在org.apache.Hadoop.mapreduce包(和子包)中的。之前版本的API則是放在org.apache.hadoop.mapred中的。
(3)新的API廣泛使用context object(上下文對象),並允許用戶代碼與MapReduce系統進行通信。例如,MapContext基本上充當着JobConf的OutputCollector和Reporter的角色。
(4)新的API統一了配置。舊的API有一個特殊的JobConf對象用於作業配置,這是一個對於Hadoop通常的Configuration對象的擴展。在新的API中,這種區別沒有了,所以作業配置通過Configuration來完成。作業控制的執行由Job類來負責,而不是JobClient,它在新的API中已經蕩然無存。

二,新舊MapReduce 框架比較
兩個框架最大的區別在於原來框架中的JobTracker和TaskTracker不
見了,取而代之的是ResourceManager、NodeManager和Application Master三個。
(1)ResourceManager起到了JobTracker的資源分配的作用,它做的關於作業調度的就只有啓動、監控每個作業所屬的Application Master,並重啓故障的 Application Master。不再負責原來框架中JobTracker的監控、重啓每個Task。使得單點故障的影響變得小,恢復更加容易。NodeManager 功能比較專一,就是負責 Container 狀態的維護,並向 RM 保持心跳。Application Master 負責一個 Job 生命週期內的所有工作,類似老的框架中 JobTracker。但注意每一個 Job(不是每一種)都有一個 Application Master,它可以運行在 ResourceManager 以外的機器上。
(2)新框架將JobTracker的分 離,減少了它的資源消耗,使系統更容易從單點故障中恢復,並且監測每個作業子任務狀態的程序分佈式化了,更安全。
(3)在新框架中,Application Master是可變的,可以爲不同的計算框架編寫自己的Application Master,使得更多的計算框架可以運行在Hadoop集羣上。
(4)老的框架中,JobTracker一個很大的負擔就是監控job下的tasks的運行狀況,現在,這個部分就扔給Application Master做了,而ResourceManager中有一個模塊叫ApplicationsManager,它是監測Application Master的運行狀況,如果出問題,會將其在其他機器上重啓。
(5)Container很好地起到了資源隔離的作用,讓資源更好地被利用起來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章