前言:
在上一篇文章寫給後端的Hadoop初級入門教程:概念篇中,我們主要講了大資料的簡單概念,什麼是大資料,大資料的特點是什麼?之後我們又從大資料擴充套件到Hadoop
,講了三個最主要的問題,Hadoop
是什麼,Hadoop
發展史,Hadoop
相較於其他大資料框架而言優勢又是什麼?
今天呢,我們依然沿著上一篇的脈絡,去探索Hadoop
的基本組成部分,是哪些技術有機地組合在了一起造就了Hadoop
今天在大資料領域的出色表現,在Hadoop2.0
之後,Hadoop
主要由以下三個部分組成:
Map - Reduce
:負責計算Yarn
:負責資源排程HDFS
: 負責資料的儲存
它們三個相輔相成,互相成就,當然本篇文章今天只是初略地帶大家理解一下這三種技術在Hadoop
中所起到的作用,具體其中的細節,我們將在之後關於Map-Reduce
和HDFS
專題中會做更加詳細的概述。
Map-Ruduce程式設計模型:
首先平常看到這種英語概念,第一時間就是開啟我們的谷歌翻譯,Map的意思我想大家都知道,畢竟java
中用的不能再多,Reduce
是降低減少歸納的意思,所以Map-Reduce就是一個先分隔(map)再歸納(Reduce)的過程。
我們來看下定義:
MapReduce
是一個分散式運算程式的程式設計框架,是使用者開發“基於Hadoop
的資料分析應用”的核心框架。核心功能是將使用者編寫的業務邏輯程式碼和自帶預設元件整合成一個完整的分散式運算程式,併發執行在一個Hadoop
叢集上。
MapReduce
主要可以概括為map
階段和reduce
階段。
只看定義確實是有點晦澀,那Map-Reduce通俗理解是什麼呢?還是我們上一篇文章講的那個例子:
初中的時候,男生愛看玄幻小說,因為怕被教導主任查到,於是採用分散式儲存的方案,把書分成幾頁幾頁的,放在不同的同學那邊放著,但教導主任不是傻子,所謂道高一尺魔高一丈就是這個道理,最後還是被發現了,而是還放言今天要是不把這本書湊齊交到他辦公室,全部都等著叫家長吧。
最後大家都把手裡的殘本交給了班長小明,小明根據頁碼排序整理好,交給了教導主任。
教導主任說你這不是閒的嗎,天天不好好學習擱那看的這什麼,頭破蒼穹,是英語書不好背了,還是數學書不好看了?這麼著,你不是閒得慌嗎,就這個蕭炎,就他,你下去給我查查,整本書這個名字一共出現了多少次!不查完今天別想吃飯了!
小明想,這不是玩完了,我自己查,我得查到猴年馬月才能查完。
重點來了,傳統的程式設計模型要是需要知道一本書中某個單詞出現的頻率,只能寫個程式,遍歷整個檔案,如果幾個字還好說,但是把鬥破蒼穹遍歷一遍,需要的時間絕對夠你吃頓飯的。
那不是還有多執行緒嗎?
是有多執行緒,但是前提是我們得有一臺多核或者多處理器的計算機,而且多執行緒的程式寫起來也有點小複雜。
但小明不傻啊,小明心想,mmp,又不是我一個人看的,為啥要我自己數,於是小明心生一計,回到班裡,大家有福同享有難同當,老師現在讓我數蕭炎在書中一共出現了多少次,我自己數到明天也數不完,誰看的誰過來大家一人數幾頁,然後你們在下面數好了彙總一下交給我。
於是全班男生一人數了幾十頁,不到一個小時就數完了,小明成功渡過一劫。
這就是 Map - Reduce,我一個人算不過來了,我找十個人平行計算,最後把結果進行彙總,不用說也知道是什麼思想了,資料結構中用的最多的分而治之。
當然,Map-Reduce肯定不止我們上面說的那麼簡單,具體實現細節還是略微有點繁瑣的,詳細的執行流程,原理到時候我們在Map-Reduce專題再細細分析。
Yarn:
Yarn
這個東西在Hadoop2.x
時代才誕生,在遙遠的Hadoop1.x
時代,Map-Reduce
不僅要負責計算,還要負責資源排程,簡直是又當爹又當媽,一兩天還好,時間長了Map-Reduce
就受不了了,就向Hadoop
總部提意見,總部肯定裝作沒聽到啊,一個人幹倆人的活兒不能再划算了。於是就不搭理Map-Reduce
,後來有一天,Map-Reduce
終於忍無可忍了,就甩袖子不幹了,因為之前Map-Reduce又幹計算又幹資源排程,所以Map-Reduce甩袖子不幹了,整個Hadoop
計算和資源排程系統全都歇菜了。
耦合太嚴重,於是Hadoop
覺得這不行,被Map-Reduce卡脖子可還得了?於是Hadoop
又招了一個專門負責資源排程,就是Yarn
,這樣一來,Map-Reduce只負責計算,Yarn只負責資源排程,Hadoop
內部瞬間和諧多了。再也沒有出現過一人罷工,全員歇菜的問題了。
Yarn主要幹四個事兒,分別是:
ResourceManager(RM):
- 處理客戶端請求。
- 監控
NodeManager
。 - 啟動或監控
ApplicationMaster
。 - 資源的分配與排程。
NodeManager(NM):
- 管理單個節點上的資源。
- 處理來自
ResourceManager
的命令 - 處理來自
ApplicationMaster
的命令
ApplicationMaster(AM):
- 負責資料的切分。
- 為應用程式申請資源並分配給內部的任務。
- 任務的監控與容錯。
Container :
Container
是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如記憶體、CPU、磁碟、網路等。
等。
HDFS:
HDFS
:Hadoop
分散式檔案系統(Hadoop Distributed File System
),聽名字就知道是Hadoop
中負責檔案儲存部分的技術了。
HDFS
相對於前面的Map-Reduce
和Yarn
就比較容易理解了,HDFS
架構主要分為三個部分:
NameNode(nn):
儲存檔案的後設資料,如檔名,檔案目錄結構,檔案屬性(生成時間、副本數、檔案許可權),以及每個檔案的塊列表和塊所在的DataNode
等。
NameNode
主要儲存檔案的後設資料,比如我們去圖書館借書,NameNode
存的就是這個圖書館所有書籍的目錄,作者,檔案屬性,以及書的位置等資訊。
DataNode(dn) :
DataNode(dn)
:在本地檔案系統儲存檔案塊資料,以及塊資料的校驗和。
還是上面那個圖書館的例子,如果NameNode
主要存的是目錄的話,那麼DataNode
就是存書的書架,也就是我們實際的資料實際是在DataNode
上存放的。
Secondary NameNode(2nn):
Secondary NameNode(2nn)
:用來監控HDFS
狀態的輔助後臺程式,每隔一段時間獲取HDFS
後設資料的快照
看名字就知道了,和我們Nginx
中講的萬一Nginx
掛了是一個性質,你只有一個NameNode
,萬一不小心NameNode
掛了,所有檔案的後設資料都沒法兒訪問,找不到檔案的實際位置,那不就gg了嗎,所以Secondary NameNode(2nn):
主要就起一個輔助備份的作用.
萬一NameNode
掛了,別怕,有Secondary NameNode(2nn)
在,他那有備份,恢復都是小KS。
這些就是HDFS整體的組成部分,當然,後面肯定會有HDFS的專題來詳細把這東西說清楚講明白的。
下面開始技術總結:
今天這篇文章,我們初略地講了Hadoop
的三個重要的組成部分,Map-Ruduce
Yarn
和 HDFS
檔案系統,分別負責Hadoop
的分散式計算,資源排程,分散式儲存實現,每一個都不可或缺,正是這三項技術的在Hadoop
內部的完美配合,造就了今天Hadoop
在大資料領域的地位,看到這裡,我想盡管我們可能還不知道Yarn內部是怎麼協調資源的,MR是如何進行平行計算的,但是我相信,大家對於Hadoop
一定有了一個初略的認識,下一篇文章,我們講一步一步通過配置虛擬機器,然後實現我們Hadoop
的偽分散式環境的配置。
非常感謝能讀到這裡的朋友,你們的支援和關注是我堅持高質量分享下去的動力。
相關程式碼已經上傳至本人github。一定要點個star啊啊啊啊啊啊啊
萬水千山總是情,給個star行不行
歡迎點贊,關注我,有你好果子吃(滑稽)