最近看了某大神的博客,很是詳細地描述了關於Hadoop 1.x與Hadoop 2.x的區別和改進,博客原文連接以下:html
http://www.cnblogs.com/edisonchou/p/4470682.htmlnode
看了博客以後,本身簡單總結概述了一下二者之間的區別,與Hadoop 1.x相比,Hadoop 2.x的改進主要在如下兩個方面:服務器
(1)HDFS的改進架構
HDFS的NameNode能夠以集羣的方式佈署,加強了NameNodes的水平擴展能力和高可用性,分別體如今HDFS Federation與HA。框架
(2)MapReduce的改進oop
MapReduce將JobTracker中的資源管理及任務生命週期管理(包括定時觸發及監控),拆分紅兩個獨立的組件,並改名爲YARN(Yet Another Resource Negotiator)。性能
Hadoop 1.x中NameNode只能有一個,雖然能夠經過SecondaryNameNode與NameNode進行數據同步備份,可是總會存在必定的時延,若是NameNode掛掉,可是若是有部份數據尚未同步到SecondaryNameNode上,仍是可能會存在着數據丟失的問題。spa
針對Hadoop1.0單NameNode一旦掛掉則不能恢復集羣,Hadoop2.0提出了HA,指的是能夠同時啓動2個NameNode。其中一個處於工做(Active)狀態,另外一個處於隨時待命(Standby)狀態。這樣,當一個NameNode所在的服務器掛掉時,能夠在數據不丟失的狀況下,手工或者自動切換到另外一個NameNode提供服務。htm
Hadoop1.x的HDFS架構的侷限:blog
(1)訪問隔離
如今大部分公司的集羣都是共享的,天天有來自不一樣group的不一樣用戶提交做業。單個namenode難以提供隔離性,即:某個用戶提交的負載很大的job會減慢其餘用戶的job,單一的NameNode難以像HBase按照應用類別將不一樣做業分派到不一樣NameNode上。
(2)橫向擴展
HDFS的底層存儲是能夠水平擴展的(解釋:底層存儲指的是datanode,當集羣存儲空間不夠時,可簡單的添加機器已進行水平擴展),但NameNode不能夠。
(3)NameNode性能
文件操做的性能制約於單個NameNode的吞吐量,單個NameNode當前僅支持約60K的task,所以要想辦法增長NameNode。
針對Hadoop1.0單NameNode制約HDFS的擴展性問題,Hadoop2.0提出了HDFS Federation,它讓多個NameNode分管不一樣的目錄進而實現訪問隔離和橫向擴展,同時完全解決了NameNode單點故障問題。
Hadoop1.x的MapReduce框架的主要侷限:
(1)JobTracker 是 Map-Reduce 的集中處理點,存在單點故障;
(2)JobTracker 完成了太多的任務,形成了過多的資源消耗,當 map-reduce job 很是多的時候,會形成很大的內存開銷,潛在來講,也增長了 JobTracker 失效的風險,這也是業界廣泛總結出老 Hadoop 的 Map-Reduce 只能支持 4000 節點主機的上限;
針對上述問題,Hadoop2.0將JobTracker中的資源管理和做業控制分開,分別由ResourceManager(負責全部應用程序的資源分配)和ApplicationMaster(負責做業控制)實現,即引入了資源管理框架YARN。因爲YARN具備通用性,所以YARN也能夠做爲其餘計算框架的資源管理系統,不只限於MapReduce,也是其餘計算框架(例如Spark)的管理平臺。