前言:
有很多小伙伴對這幾個東西的概念有些模糊,這里我做一個總結(jié),希望大家能一篇看懂。
一、HDFS
HDFS是分布式文件系統(tǒng),有高容錯性的特點,可以部署在價格低廉的服務器上,主要包含namenode和datanode。
Namenode是hdfs中文件目錄和文件分配管理者,它保存著文件名和數(shù)據(jù)塊的映射管理,數(shù)據(jù)塊和datanode列表的映射關(guān)系。其中文件名和數(shù)據(jù)塊的關(guān)系保存在磁盤上,但是namenode上不保存數(shù)據(jù)塊和datanode列表的關(guān)系,該列表是通過datanode上報建立起來的。
Namenode上的有三種交互,1、client訪問namenode獲取的相關(guān)datanode的信息。2、datanode心跳匯報當前block的情況。3、secondarynamenode做checkpoint交互。
? DataNode它負責實際的數(shù)據(jù)存儲,并將數(shù)據(jù)息定期匯報給NameNode。DataNode以固定大小的block為基本單位組織文件內(nèi)容,默認情況下block大小為128MB。當用戶上傳一個大的文件到HDFS上時,該文件會被切分成若干個block,分別存儲到不同的DataNode;同時,為了保證數(shù)據(jù)可靠,會將同一個block以流水線方式寫到若干個(默認是3,該參數(shù)可配置)不同的DataNode上。這種文件切割后存儲的過程是對用戶透明的。
?CheckPoint的時間點
fs.checkpoint.period 指定兩次checkpoint的最大時間間隔,默認3600秒。?
fs.checkpoint.size 規(guī)定edits文件的最大值,一旦超過這個值則強制checkpoint,不管是否到達最大時間間隔。默認大小是64M。
流程解析
1、每隔兩個小時,或者edits文件超過最大值時,SecondaryNameNode通知NameNode切換edits,
此時在NameNode中生成一個名為edits.new的新edits,在fsimage被替換之前,所有的操作都會寫到edits.new中。
2、SecondaryNameNode通過Http協(xié)議復制edits和fsimage到SecondaryNameNode中
3、SecondaryNameNode將fsimage導入內(nèi)存,用edits中的操作,生成新的fsimage.ckpt文件
4、SecondaryNameNode將新的fsimage復制,并通過http Post傳給NameNode
5、NameNode將接收到的新的fsimage.ckpt替換掉之前的fsimage,同時將新的edits.new重命名為edits,將之前的替換掉
?SecondaryNameNode,用來輔助namenode進行元數(shù)據(jù)的合并,并且傳回到namenode。

二、YARN
YARN主要包括幾種角色
ResourceManager(RM):主要接收客戶端任務請求,接收和監(jiān)控NodeManager(NM)的資源情況匯報,負責資源的分配與調(diào)度,啟動和監(jiān)控ApplicationMaster(AM),一個集群只有一個。
NodeManager:主要是節(jié)點上的資源管理,啟動Container運行task計算,上報資源、container情況給RM和任務處理情況給AM,整個集群有多個。
ApplicationMaster:主要是單個Application(Job)的task管理和調(diào)度,向RM進行資源的申請,向NM發(fā)出launch Container指令,接收NM的task處理狀態(tài)信息。每個應用有一個。
Container:是YARN中資源的抽象,它封裝了某個節(jié)點上一定量的資源(CPU和內(nèi)存兩類資源)

三、MapReduce
MapReduce是hadoop的一種離線計算框架,適合離線批處理,具有很好的容錯性和擴展性,適合簡單的批處理任務。缺點啟動開銷大,任務多使用磁盤效率比較低。
一個MapReduce?作業(yè)通常會把輸入的數(shù)據(jù)集切分為若干獨立的數(shù)據(jù)塊,由?map任務(task)以完全并行的方式處理它們??蚣軙ap的輸出先進行排序,然后把結(jié)果輸入給reduce任務。通常作業(yè)的輸入和輸出都會被存儲在文件系統(tǒng)中。整個框架負責任務的調(diào)度和監(jiān)控,以及重新執(zhí)行已經(jīng)失敗的任務。通常,MapReduce框架和分布式文件系統(tǒng)是運行在一組相同的節(jié)點上的,計算節(jié)點和存儲節(jié)點通常在一起。這種配置允許框架在那些已經(jīng)存好數(shù)據(jù)的節(jié)點上高效地調(diào)度任務,這可以使整個集群的網(wǎng)絡帶寬被非常高效地利用。
一個MapReduce任務包含一般會這幾個部分:Map、Shuffle(Sort、Partitioner、?Combiner、Merge、Sort)、Reduce。
Mapreduce工作原理如下圖:
