2.2 Hadoop基礎知識
2.2.1 術語解釋
為了便于本書講解Hadoop YARN,本小節對Hadoop涉及的術語進行比較全面的介紹。
(1)Hadoop 1.0
Hadoop 1.0即第一代Hadoop,由分布式存儲系統HDFS和分布式計算架構MapReduce組成,其中,HDFS由一個NameNode和多個DataNode組成,MapReduce由一個JobTracker和多個TaskTracker組成,對應Hadoop版本為Apache Hadoop 0.20.x、1.x、0.21.X、0.22.x和CDH3。
(2)Hadoop 2.0
Hadoop 2.0即第二代Hadoop,為克服Hadoop 1.0中HDFS和MapReduce存在的各種問題而提出的。如圖2-4所示,針對Hadoop 1.0中的單NameNode制約HDFS的擴充性問題,提出了HDFS Federation,它讓多個NameNode分管不同的目錄進而實作通路隔離和橫向擴充,同時它徹底解決了NameNode 單點故障問題;針對Hadoop 1.0中的MapReduce在擴充性和多架構支援等方面的不足,它将JobTracker中的資源管理和作業控制功能分開,分别由元件ResourceManager和ApplicationMaster實作,其中,ResourceManager負責所有應用程式的資源配置設定,而ApplicationMaster僅負責管理一個應用程式,進而誕生了全新的通用資源管理架構YARN。基于YARN,使用者可以運作各種類型的應用程式(不再像1.0那樣僅局限于MapReduce一類應用),從離線計算的MapReduce到線上計算(流式處理)的Storm等。Hadoop 2.0對應Hadoop版本為Apache Hadoop 0.23.x、2.x和CDH4。

(3)MapReduce 1.0或MRv1
MapReduce 1.0計算架構主要由三部分組成,分别是程式設計模型、資料處理引擎和運作時環境。它的基本程式設計模型是将問題抽象成Map和Reduce兩個階段,其中Map階段将輸入資料解析成key/value,疊代調用map()函數處理後,再以key/value的形式輸出到本地目錄,而Reduce階段則将key相同的value進行規約處理,并将最終結果寫到HDFS上;它的資料處理引擎由MapTask和ReduceTask組成,分别負責Map階段邏輯和Reduce階段邏輯的處理;它的運作時環境由(一個)JobTracker和(若幹個)TaskTracker兩類服務組成,其中,JobTracker負責資源管理和所有作業的控制,而TaskTracker負責接收來自JobTracker的指令并執行它。該架構在擴充性、容錯性和多架構支援等方面存在不足,這也促使了MRv2的産生。
(4)MRv2
MRv2具有與MRv1相同的程式設計模型和資料處理引擎,唯一不同的是運作時環境。MRv2是在MRv1基礎上經加工之後,運作于資源管理架構YARN之上的計算架構MapReduce。它的運作時環境不再由JobTracker和TaskTracker等服務組成,而是變為通用資源管理系統YARN和作業控制程序ApplicationMaster,其中,YARN負責資源管理和排程,而ApplicationMaster僅負責一個作業的管理。簡言之,MRv1僅是一個獨立的離線計算架構,而MRv2則是運作于YARN之上的MapReduce。
(5)YARN
YARN是Hadoop 2.0中的資源管理系統,它是一個通用的資源管理子產品,可為各類應用程式進行資源管理和排程。YARN不僅限于MapReduce一種架構使用,也可以供其他架構使用,比如Tez(将在第9章介紹)、Spark、Storm(将在第10章介紹)等。YARN類似于幾年前的資源管理系統Mesos(将在12章介紹)和更早的Torque(将在6章介紹)。由于YARN的通用性,下一代MapReduce的核心已經從簡單的支援單一應用的計算架構MapReduce轉移到通用的資源管理系統YARN。
(6)HDFS Federation
Hadoop 2.0中對HDFS進行了改進,使NameNode可以橫向擴充成多個,每個NameNode分管一部分目錄,進而産生了HDFS Federation,該機制的引入不僅增強了HDFS的擴充性,也使HDFS具備了隔離性。