在上一篇文章寫給後端的Hadoop初級入門教程:概念篇中,咱們主要講了大數據的簡單概念,什麼是大數據,大數據的特色是什麼?以後咱們又從大數據擴展到Hadoop
,講了三個最主要的問題,Hadoop
是什麼,Hadoop
發展史,Hadoop
相較於其餘大數據框架而言優點又是什麼?java
今天呢,咱們依然沿着上一篇的脈絡,去探索Hadoop
的基本組成部分,是哪些技術有機地組合在了一塊兒造就了Hadoop
今天在大數據領域的出色表現,在Hadoop2.0
以後,Hadoop
主要由如下三個部分組成:git
Map - Reduce
:負責計算Yarn
:負責資源調度HDFS
: 負責數據的存儲它們三個相輔相成,互相成就,固然本篇文章今天只是初略地帶你們理解一下這三種技術在Hadoop
中所起到的做用,具體其中的細節,咱們將在以後關於Map-Reduce
和HDFS
專題中會作更加詳細的概述。github
首先日常看到這種英語概念,第一時間就是打開咱們的谷歌翻譯,Map的意思我想你們都知道,畢竟java
中用的不能再多,Reduce
是下降減小概括的意思,因此Map-Reduce就是一個先分隔(map)再概括(Reduce)的過程。編程
咱們來看下定義:後端
MapReduce
是一個分佈式運算程序的編程框架,是用戶開發「基於Hadoop
的數據分析應用」的核心框架。核心功能是將用戶編寫的業務邏輯代碼和自帶默認組件整合成一個完整的分佈式運算程序,併發運行在一個Hadoop
集羣上。網絡
MapReduce
主要能夠歸納爲map
階段和reduce
階段。數據結構
只看定義確實是有點晦澀,那Map-Reduce通俗理解是什麼呢?仍是咱們上一篇文章講的那個例子:多線程
初中的時候,男生愛看玄幻小說,由於怕被教導主任查到,因而採用分佈式存儲的方案,把書分紅幾頁幾頁的,放在不一樣的同窗那邊放着,但教導主任不是傻子,所謂道高一尺魔高一丈就是這個道理,最後仍是被發現了,而是還放言今天要是不把這本書湊齊交到他辦公室,所有都等着叫家長吧。架構
最後你們都把手裏的殘本交給了班長小明,小明根據頁碼排序整理好,交給了教導主任。併發
教導主任說你這不是閒的嗎,每天很差好學習擱那看的這什麼,頭破蒼穹,是英語書很差背了,仍是數學書很差看了?這麼着,你不是閒得慌嗎,就這個蕭炎,就他,你下去給我查查,整本書這個名字一共出現了多少次!不查完今天別想吃飯了!
小明想,這不是玩完了,我本身查,我得查到猴年馬月才能查完。
重點來了,傳統的編程模型要是須要知道一本書中某個單詞出現的頻率,只能寫個程序,遍歷整個文件,若是幾個字還好說,可是把鬥破蒼穹遍歷一遍,須要的時間絕對夠你吃頓飯的。
那不是還有多線程嗎?
是有多線程,可是前提是咱們得有一臺多核或者多處理器的計算機,並且多線程的程序寫起來也有點小複雜。
但小明不傻啊,小明心想,mmp,又不是我一我的看的,爲啥要我本身數,因而小明心生一計,回到班裏,你們有福同享有難同當,老師如今讓我數蕭炎在書中一共出現了多少次,我本身數到明天也數不完,誰看的誰過來你們一人數幾頁,而後大家在下面數好了彙總一下交給我。
因而全班男生一人數了幾十頁,不到一個小時就數完了,小明成功渡過一劫。
這就是 Map - Reduce,我一我的算不過來了,我找十我的並行計算,最後把結果進行彙總,不用說也知道是什麼思想了,數據結構中用的最多的分而治之。
固然,Map-Reduce確定不止咱們上面說的那麼簡單,具體實現細節仍是略微有點繁瑣的,詳細的執行流程,原理到時候咱們在Map-Reduce專題再細細分析。
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
: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行不行
歡迎點贊,關注我,有你好果子吃(滑稽)