它的名字叫Hadoop
- 2019 年 12 月 23 日
- 筆記
注意,我會使用第三人稱以朋友的角度介紹大數據中必須要學會的框架Hadoop,閱讀時間需要五分鐘。

Hadoop之父Doug Cutting和他手上拿的Hadoop
大家好,介紹一下我的朋友,它的名字叫Hadoop,它和其它大數據框架一樣,都是出生於電腦。特殊的是,它所有的細胞都是由二進位組成的,每一個細胞都是由0和1組成特定的串。
它跟我說,它最感激的是它的父親,沒有他不放棄的研究,很難有現在強大的自己。
它父親當時為了爬蟲項目如何存儲以及計算,剛好,Google三大論文發布出來。Google三大論文分別是GFSGoogle分散式文件系統、MapReduce分散式計算框架和BigTable分散式存儲系統。
(想要知道Google三大論文可以到後台回復「Google三大論文」獲取,Google三大論文的翻譯資料最開始是由CSDN部落格出現的,很驚訝吧,現在CSDN這個狀況很難和原創有一點點的關係)
爬蟲項目數據量非常多,不是一台電腦簡單能存下了,所以他轉戰花了時間去研究Google的三大論文,給予了他很多的靈感,得出了HDFS、MapReduce和HBase三個項目。HBase最初確實是Hadoop的一部分,之後,HBase逐漸成為Apache軟體基金會旗下的頂級項目,具備Apache軟體許可證,現在目前是2.x版本。
但如何給它起一個名字似乎不是一個難題,因為Doug Cutting在生活中有孩子,他的孩子非常喜歡一個玩偶,叫它哈杜。所以Doug Cutting就給它起了一個名字,就叫Hadoop。
那玩偶就是Hadoop之父手上拿的,是瘦瘦的黃色小象,不想現在Logo標誌上這麼胖胖的

Hadoop項目的Logo標誌
名字有了,Hadoop之父就開始干,發決心狠狠地將它扔進到黑暗的小盒子里。誰都不知它未來會是什麼樣子,只知道它的父親正在將它進行重新改造,又重新改造,一直如此。這其中的艱難很難想像。
也是正因為如此,它才會越發的強大。當它出來的時候,它的一切重新變了模樣。GFS變成了HDFS,BigTable變成了HBase,MapReduce還是MapReduce但都進行了改進。所以Hadoop一出生就有了三個玩伴。後來HBase逐漸分離了Hadoop,漸漸地成為Apache的頂級項目,當然Hadoop也是Apache的頂級項目。Hadoop還是替HBase高興的,又一個兒時玩伴成為了頂級項目。
Hadoop還有兩個夥伴中間是通過什麼組件來進行資源聯繫的,恐怕它自己也不知道。等到起跑運行才發現沒有這個組件是會出問題的。
Hadoop如果沒有Google三大論文的幫助,它到現在也不會分身,只能在一台伺服器上存儲和計算著越來越多的數據量,而且會非常緩慢,因為一台伺服器的CPU數量和記憶體都有限。
有了Google三大論文的幫助,Hadoop除了得出HDFS和MapReduce組件,還有Yarn資源管理器組件。它們都極具有分身的能力,也沒必要在一台伺服器上分身,它們的目的是聯合多台伺服器擴大CPU數量和增大記憶體容量。
作為Hadoop的第三人稱以朋友的角度,我會介紹Hadoop的三個組件——HDFS架構、MapReduce模型和Yarn資源管理器。

Hadoop項目的三個組件
HDFS分散式存儲架構每一個工作節點DataNode都會佔據一台伺服器(也可以是虛擬機),多個DataNode不可能會在同一台伺服器上,因為沒必要要兩個DataNode在一台伺服器上爭奪資源,這會亂套的,伺服器上只需要一個DataNode彙報給管理節點NameNode就可以了。NameNode可以和任何一個DataNode共存在一台伺服器上。
真正存儲數據的是在DataNode,而且不管數據的大小都會切割成固定的塊大小,默認為128M。一個不滿128M的文件會給128M的虛擬空間,一個滿128M的塊大小會被切割,目的是為了NameNode更好的管理文件系統,以及MapReduce更好的讀取。後面會出處理多個小文件的案例,所以請關注大數據紳探,避免走失哦。
NameNode還有一個輔助節點SecondaryNameNode,它是專門記錄NameNode所有的操作,但不能接替NameNode成為一個NameNode節點。只是有了SecondaryNameNode,NameNode掛掉重啟的時候可以恢復最新的數據。SecondaryNameNode和NameNode一樣,也可以和任何一個DataNode共存在一台伺服器上,當然,SecondaryNameNode和NameNode也一樣可以共存在一台伺服器上。
MapReduce分散式計算框架是用Java編寫的,讀取HDFS上的數據會使用輸入格式類生成一個Map任務進行,一個Map根據數據塊的大小進行設置的,也可以自己設置。但我的建議是和HDFS的數據塊的大小一致,是為了減少伺服器之間的I/O傳輸。
數據進入到Map任務之後會有Shuffle過程,然後聚合到Reduce任務上,再使用Java的輸出格式類寫入到某個路徑上。

MapReduce簡單的過程
那如何讓MapReduce跑起來計算呢,則就需要Yarn資源管理器。Yarn和HDFS一樣,也有很多個組件。Yarn除了沒有輔助節點,都有管理節點ResourceManager和工作節點NodeManager。而NodeManager和HDFS中的DataNode是一一對應的,不多不少。
簡單的介紹就到這裡,後面會出幾篇文章分別詳細介紹Hadoop的三個組件的。