Hadoop是什么
開源分布式計算框架,用于存儲和處理大規(guī)模數(shù)據(jù)集
Hadoop優(yōu)勢
1)高可靠:通過多副本存儲確保數(shù)據(jù)安全,某個節(jié)點出現(xiàn)故障,不會導致數(shù)據(jù)丟失
2)高擴展:可以通過增加節(jié)點擴展存儲和計算能力
3)高效:并行計算,加快任務(wù)處理速度
4)高容錯:能夠自動將失敗的任務(wù)重新分配
5)成本低:可在廉價硬件上運行
Hadoop核心組件
HDFS分布式文件系統(tǒng)、MapReduce分布式離線計算系統(tǒng)、Yarn分布式集群資源管理、Common模塊
HDFS
用于存儲大規(guī)模數(shù)據(jù),將大型數(shù)據(jù)集分成塊存儲在多個節(jié)點上,每個數(shù)據(jù)塊會復制多份到不同節(jié)點上,提高可靠性。HDFS主要有NameNode和DataNode組成,NameNode主要用于管理HDFS,DataNode主要用于存儲文件,SecondaryNameNode用于輔助NameNode。

NameNode
NN是一個中心服務(wù)器,負責管理文件系統(tǒng)的命名空間以及客戶端對文件的訪問,其中存儲了文件的元數(shù)據(jù),所有的文件系統(tǒng)操作(讀、寫、刪除)都由NN控制。元數(shù)據(jù)主要由Fsimage和Edits兩個文件組成。
Fsimage:文件系統(tǒng)元數(shù)據(jù)的一個完整的永久性檢查點,包含文件系統(tǒng)中所有目錄和文件信息,如文件名、文件大小、文件路徑、文件副本數(shù)目、文件與Block的映射關(guān)系,以及Block與DN的映射關(guān)系。可用于快速回復文件系統(tǒng)狀態(tài)。NN會定期將Edits文件和Fsimage進行合并,生成新的Fsimage
Edits:記錄了文件系統(tǒng)的所有變更操作,例如文件創(chuàng)建、刪除、修改。它是一個日志文件,記錄了上一次Fsimage生成以來的所有文件系統(tǒng)變更操作。
NN的容錯機制有兩種:
1)將持久化存儲在本地硬盤的文件系統(tǒng)元數(shù)據(jù)備份
2)借助SNN(SecondaryNameNode),定期備份NN元數(shù)據(jù),用于恢復NN
DataNode
用于在本地文件系統(tǒng)存放數(shù)據(jù),向NN報告存儲信息,定期向NN發(fā)送心跳,確保數(shù)據(jù)塊的完整性和可用性。DN的基本單位是塊(block),默認128M。在HDFS上會保存數(shù)據(jù)的副本,默認是3個
HDFS寫流程

1)客戶端通過DFS模塊向NN請求上傳文件,NN檢查目標文件是否已存在,目錄是否存在
2)NN返回是否可以上傳
3)客戶端請求第一個Block(包含0-128的數(shù)據(jù)),詢問NN可以上傳到哪幾個DN節(jié)點上
4)NN返回3個DN,分別為dn1、dn2、dn3,表示這些節(jié)點可以存儲
5)客戶端通過FSDOS模塊請求dn1上傳數(shù)據(jù),dn1收到請求會繼續(xù)調(diào)用dn2,然后dn2調(diào)用dn3,將這個通信管道建立完成,dn3、dn2、dn1逐級應答客戶端
6)客戶端開始往dn1上傳第一個Block,已Packet為單位,dn1收到一個Packet會傳給dn2,db2傳給dn3,dn1每傳一個Packet會放入一個應答隊列等待應答
7)當一個Block傳輸完成之后,客戶端在請求NN上傳第二個Block,重復步驟3-6
HDFS讀流程

1)客戶端通過DFS模塊向NN請求下載文件,NN通過查詢元數(shù)據(jù),找到文件所在的DN地址
2)挑選最近的DN節(jié)點,請求讀取數(shù)據(jù)
3)DN開始傳輸數(shù)據(jù)給客戶端
4)客戶端接收數(shù)據(jù)寫入目標文件
MapReduce
MapReduce分布式離線計算框架,將用戶編寫的業(yè)務(wù)邏輯代碼和自動默認組件整合成一個完整的分布式運算程序,并發(fā)運行在Hadoop集群上。MapReduce計算=Map階段+Reduce階段
MapReduce執(zhí)行流程
1)輸入分片:輸入數(shù)據(jù)被分割成多個分片,每個分片通過對應一個Map任務(wù)
2)Map階段:Map任務(wù)讀取輸入分片,轉(zhuǎn)換成鍵值對,用戶定義的Map函數(shù)處理這些鍵值對,生成中間鍵值對
3)Shuffle階段:將Map輸出的中間鍵值對根據(jù)鍵進行分區(qū)、排序、合并,然后發(fā)送給相應的Reduce任務(wù)
4)Reduce階段:接受經(jīng)過Shuffle階段后的數(shù)據(jù),經(jīng)過用戶定義的Reduce函數(shù)處理,得到最終結(jié)果
5)結(jié)果輸出:Reduce階段輸出的結(jié)果會被寫到HDFS

Yarn
YARN(Yet Another Resource Negotiator)用于集群資源管理和作業(yè)調(diào)度,是 Hadoop 的第二代資源管理器。YARN 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等組件構(gòu)成。
ResourceManager(RM):整個集群資源(內(nèi)存、CPU等)的管理者
NodeManager(NM):單個節(jié)點資源的管理者
ApplicationMaster(AM):單個任務(wù)運行的管理者
Container:容器,相當于一臺獨立的服務(wù)器,里面封裝了任務(wù)運行所需要的資源,如內(nèi)存、CPU、磁盤、網(wǎng)絡(luò)等

Yarn執(zhí)行流程
作業(yè)提交
1.客戶端向RM提交作業(yè)并申請一個作業(yè)ID
2.RM向客戶端返回作業(yè)ID以及作業(yè)資源的提交路徑
3.客戶端提交jar包、切片信息和配置文件到指定的資源提交路徑
4.資源提交完畢,向RM發(fā)送執(zhí)行作業(yè)請求
作業(yè)初始化
5.RM收到客戶端的請求后,將該作業(yè)添加到調(diào)度器隊列中
6.空閑的NM就會領(lǐng)取到該作業(yè)
7.NM會創(chuàng)建Container
8.Container會啟動AM,下載作業(yè)資源到本地
任務(wù)分配
9.AM向RM申請運行MapTask資源
10.RM將MapTask分配給空閑的NM,NM領(lǐng)取到任務(wù)會創(chuàng)建Container
任務(wù)運行
11.AM向NM發(fā)送運行腳本,NM執(zhí)行MapTask
12.AM等所有MapTask運行完,向RM申請容器,運行ReduceTask
13.ReduceTask獲取MapTask相應分區(qū)的數(shù)據(jù)
14.所有任務(wù)完成之后,AM會向RM申請注銷自己
作業(yè)完成
框架會更新作業(yè)計算的進度和狀態(tài)

參考資料
Hadoop的入門學習(理論知識)
圖解 Hadoop 架構(gòu) |Yarn、MapReduce
大數(shù)據(jù)資源調(diào)度框架--Yarn