Apache頂級項目介紹4 - Hadoop

 

大象起舞,天下太平,極客們應該知道我們的重量級人物Hadoop登場了。

提到Hadoop, 正所謂飲水思源,我們不得不提及一下Hadoop之父,其對技術界的影響,在近10年可謂重大, 他就是Doug Cutting, 其傳奇人生及其大作這裏不贅述了,大家可以Google/Bing一下,之後或許我們會推出一些技術大牛的介紹以及好書推薦。

 

值得提及的是Hadoop之所以誕生於2005-2006之際,是Doug當時受到來自

Google Lab公開發布的幾篇paper啓發,包括Map/Reduce(2004), Google 

File System(GFS)-2003,Doug於2006年加入Yahoo, 在Yahoo的慧眼及大力推動下,山寨出身的Hadoop的運勢如日中天。

 

老樣子,Hadoop官網介紹,Hadoop是一個開源框架,適合運行在通用硬件,支持用簡單程序模型分佈式處理跨集羣大數據集,支持從單一服務器到上千服務器的水平scale up。BTW, Hadoop的官網真是無法形容,毫無美感,文字堆砌,與後來的Docker, Spark等無法相提並論。畢竟這是一個顏值時代。

 

上架構圖:

Hadoop 1.x架構剛開始比較簡單,只有2個大的模塊MapReduce和

HDFS, 其中MapReduce不單包含了分佈式計算,還有集羣資源管理,HDFS是Hadoop的核心分佈式文件系統,提供了分佈式高吞吐文件系統管理。

在後續的Hadoop 2.x版本中(目前穩定版本爲2.7.x),

 

架構做了大幅改進,支持MapReduce批處理, Tez交互式,以及抽象獨立的YARN負責job scheduling和集羣資源管理,還有HDFS2,還有上圖沒有體現的

Common模塊包含了一些公共功能,如安全認證以及支持其它模塊基礎功能。 同時,開放接口支持Online HBase, Streaming, In-Memory Spark等。

值得一提的是, 關於HDFS2,借鑑吸取了後起之秀Spark的計算模型,正所謂 

“移動計算比移動數據更划算”, 之RDD之精髓。

 

好吧,先來介紹HDFS架構圖:

 

HDFS毫無疑問的採用了master/slave架構, 一個HDFS集羣是由一個NameNode和多個DataNodes組成。NameNode是一箇中心服務器,負責管理文件系統的名字空間namespace以及客戶端對文件的訪問。DataNode一般是一個節點一個,負責管理它所在節點的存儲。一個文件根據大小被拆分成一個或多個數據塊,這些數據塊存儲在一組DataNode上,NameNode執行文件系統的操作,如打開,關閉,重命名等,同時也負責確定數據塊到具體datanodes節點的映射。

datanode負責處理文件系統客戶端的讀寫請求,在namenode的統一調度下進行數據的處理,如創建,刪除,複製等。集羣中單一的namenode結構大大簡化了系統架構,namenode統一管理hdfs原數據,用戶數據永遠不會存放於

namenode。所有的hdfs通訊協議建立在tcp/ip之上。其中,client是向

namenode發起文件讀寫請求的,namenode再根據配置返回給client相應的

datanode信息。一個block默認配置會有3分備份。

 

細心的讀者可能會發現,namenode是萬能的,高效的,中央集權的。卻隱隱存在巨大的單點故障風險,如果namenode出現故障,那整個hdfs都無法運作了,即非HA.

Hadoop 2.x後引入了HDFS2, 包含了2個namenode(目前支持2個),一個處於active狀態,一個處於standby狀態。當active出現問題時就自動切換,如何自動切換就借用了我們上一篇提到的zookeeper了,集羣中的兩個

namenode都在zookeeper中註冊,zk負責監測namenode狀態以及自動切換。說白了就是又引入一層來管理,計算機以及程序裏的抽象與問題解決大多是引入新的一層或者角色來做到的。

 

另外讀者可能也會注意到的是namenode是核心節點,維護着整個hdfs的元數據信息,但其容量是有限的,當namenode所在服務器內存無法裝載後,整個hdfs集羣就受制於他,這可無法支撐sale up成千上完的集羣大數據。其解決辦法爲引入了hdfs Federation,即有多個hdfs集羣。一個總集羣中,可以虛擬出多個單獨小集羣,各個小集羣間數據可以實時共享。

 

上圖:

好了,hdfs到此,我們繼續介紹第二個核心模塊mapreduce。下圖以著名的
wordcount爲例,介紹m/r整體結構:

 

mr編程框架原理,利用一個輸入的key-value對集合來產生一個輸出的

key-value對集合。mr庫通過map(映射)和reduce(化簡)兩個函數來實現,說到底其核心思想也就是我們大學學的數據結構中的分而治之算法吧。用戶自定義的map函數接受一個輸入key-value對,然後產生一箇中間的key-value對的集合,mr把所有具有相同key值的value結合在一起,然後傳遞給reduce函數,reduce接受合併這些value值,形成一個較小的value 集合,reduce函數具備了在集羣上大規模分佈式數據處理的能力。與傳統的分佈式計算設計相比,mapreduce封裝了並行處理,容錯處理,本地化計算,負載均衡等細節。

上圖中,reduce又包含了3個主要階段,shuffle,sort和reduce。這裏有必要提及一下shuffle:

 

shuffle操作就是針對多個map任務的輸出按照不同的分區partition通過網絡複製到不同的reduce任務節點上,這整個過程叫做shuffle。

 

繼續介紹第三大核心YRAN:

整體架構中的yran

 

繼續抽象:

 

YARN的內部細節架構:

YARN分層結構的本質是ResourceManager。它控制整個集羣並管理應用程序向基礎計算資源分配。ResourceManager將各個資源部份(計算,內存,帶寬等)安排給基礎nodemanager(YARN的每節點代理)。ResourceManger還與ApplicationMaster一起分配資源,與NodeManager一起監控基礎應用。在上下文,承擔了以前的TaskTracker的一些角色,ResourceManager承擔了

JobTracker的角色。Hadoop 1.x架構受到了JobTracker的高度約束,

jobtracker負責整個集羣的資源管理與作業調度,新的Hadoop 2.x打破了這種模型,ResourceManager管理資源,ApplicationMaster負責作業。YARN還允許使用Message Passing Interface通信模型,執行不同編程模型,包括圖形,迭代式,機器學習等計算。

好了,上代碼吧,沒時間寫了,官網word count:

 

 

“簡單”明瞭,無需多數,作者簡單加了引號,注意這段經典代碼後來被Spark用來作爲案例,幾句就搞定了。

最後,我們來看一下Hadoop的生態系統:

 

 

Hadoop v2.x生態系統如日中天,百家爭鳴。這裏僅僅拋個引子。

 

好了,本文僅作爲Hadoop的項目介紹就到此了,相信羣裏有很多Hadoop大牛技術專家,各位不靈賜教。

 

@erixhao

公衆號: 技術極客TechBooster

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