網(wǎng)站建設(shè)詢價(jià)文件無(wú)錫營(yíng)銷型網(wǎng)站制作
一、Hadoop HDFS的架構(gòu)
HDFS:Hadoop Distributed File System,分布式文件系統(tǒng)
1,NameNode
- 存儲(chǔ)文件的metadata,運(yùn)行時(shí)所有數(shù)據(jù)都保存到內(nèi)存,整個(gè)HDFS可存儲(chǔ)的文件數(shù)受限于NameNode的內(nèi)存大小
- 一個(gè)Block在NameNode中對(duì)應(yīng)一條記錄(一般一個(gè)block占用150字節(jié)),如果是大量的小文件,會(huì)消耗大量?jī)?nèi)存。同時(shí)map task的數(shù)量是由splits來(lái)決定的,所以用MapReduce處理大量的小文件時(shí),就會(huì)產(chǎn)生過(guò)多的map task,線程管理開(kāi)銷將會(huì)增加作業(yè)時(shí)間。處理大量小文件的速度遠(yuǎn)遠(yuǎn)小于處理同等大小的大文件的速度。因此Hadoop建議存儲(chǔ)大文件
- 數(shù)據(jù)會(huì)定時(shí)保存到本地磁盤,但不保存block的位置信息,而是由DataNode注冊(cè)時(shí)上報(bào)和運(yùn)行時(shí)維護(hù)(NameNode中與DataNode相關(guān)的信息并不保存到NameNode的文件系統(tǒng)中,而是NameNode每次重啟后,動(dòng)態(tài)重建)
- NameNode失效則整個(gè)HDFS都失效了,所以要保證NameNode的可用性
2,Secondary NameNode
定時(shí)與NameNode進(jìn)行同步(定期合并文件系統(tǒng)鏡像和編輯日志,然后把合并后的傳給NameNode,替換其鏡像,并清空編輯日志,類似于CheckPoint機(jī)制),但NameNode失效后仍需要手工將其設(shè)置成主機(jī).
3,DataNode
- 保存具體的block數(shù)據(jù)
- 負(fù)責(zé)數(shù)據(jù)的讀寫(xiě)操作和復(fù)制操作
- DataNode啟動(dòng)時(shí)會(huì)向NameNode報(bào)告當(dāng)前存儲(chǔ)的數(shù)據(jù)塊信息,后續(xù)也會(huì)定時(shí)報(bào)告修改信息
- DataNode之間會(huì)進(jìn)行通信,復(fù)制數(shù)據(jù)塊,保證數(shù)據(jù)的冗余性
4,Block數(shù)據(jù)塊
- 基本存儲(chǔ)單位,一般大小為64M(配置大的塊主要是因?yàn)?#xff1a;
1)減少搜尋時(shí)間,一般硬盤傳輸速率比尋道時(shí)間要快,大的塊可以減少尋道時(shí)間;
2)減少管理塊的數(shù)據(jù)開(kāi)銷,每個(gè)塊都需要在NameNode上有對(duì)應(yīng)的記錄;
3)對(duì)數(shù)據(jù)塊進(jìn)行讀寫(xiě),減少建立網(wǎng)絡(luò)的連接成本) - 一個(gè)大文件會(huì)被拆分成一個(gè)個(gè)的塊,然后存儲(chǔ)于不同的機(jī)器。如果一個(gè)文件少于Block大小,那么實(shí)際占用的空間為其文件的大小
- 基本的讀寫(xiě)單位,類似于磁盤的頁(yè),每次都是讀寫(xiě)一個(gè)塊
- 每個(gè)塊都會(huì)被復(fù)制到多臺(tái)機(jī)器,默認(rèn)復(fù)制3份
- HDFS2.x以后的block默認(rèn)128M
二、Hadoop 讀文件
1,客戶端向NameNode發(fā)送讀取請(qǐng)求
2,NameNode返回文件的所有block和這些block所在的DataNodes(包括復(fù)制節(jié)點(diǎn))
3,客戶端直接從DataNode中讀取數(shù)據(jù),如果該DataNode讀取失敗(DataNode失效或校驗(yàn)碼不對(duì)),則從復(fù)制節(jié)點(diǎn)中讀取(如果讀取的數(shù)據(jù)就在本機(jī),則直接讀取,否則通過(guò)網(wǎng)絡(luò)讀取)
三、Hadoop 寫(xiě)文件
1,客戶端將文件寫(xiě)入本地磁盤的 HDFS Client 文件中
2,當(dāng)臨時(shí)文件大小達(dá)到一個(gè) block 大小時(shí),HDFS client 通知 NameNode,申請(qǐng)寫(xiě)入文件
3,NameNode 在 HDFS 的文件系統(tǒng)中創(chuàng)建一個(gè)文件,并把該 block id 和要寫(xiě)入的 DataNode 的列表返回給客戶端
4,客戶端收到這些信息后,將臨時(shí)文件寫(xiě)入 DataNodes
(1) 客戶端將文件內(nèi)容寫(xiě)入第一個(gè) DataNode(一般以 4kb 為單位進(jìn)行傳輸)
(2) 第一個(gè) DataNode 接收后,將數(shù)據(jù)寫(xiě)入本地磁盤,同時(shí)也傳輸給第二個(gè) DataNode
(3)依此類推到最后一個(gè) DataNode,數(shù)據(jù)在 DataNode 之間是通過(guò) pipeline 的方式進(jìn)行復(fù)制的
(4)后面的 DataNode 接收完數(shù)據(jù)后,都會(huì)發(fā)送一個(gè)確認(rèn)給前一個(gè) DataNode,最終第一個(gè) DataNode 返回確認(rèn)給客戶端
(5)當(dāng)客戶端接收到整個(gè) block 的確認(rèn)后,會(huì)向 NameNode 發(fā)送一個(gè)最終的確認(rèn)信息
(6)如果寫(xiě)入某個(gè) DataNode 失敗,數(shù)據(jù)會(huì)繼續(xù)寫(xiě)入其他的 DataNode。然后 NameNode 會(huì)找另外一個(gè)好的 DataNode 繼續(xù)復(fù)制,以保證冗余性
(6) 每個(gè) block 都會(huì)有一個(gè)校驗(yàn)碼,并存放到獨(dú)立的文件中,以便讀的時(shí)候來(lái)驗(yàn)證其完整性
5,文件寫(xiě)完后(客戶端關(guān)閉),NameNode 提交文件(這時(shí)文件才可見(jiàn),如果提交前,NameNode 垮掉,那文件也就丟失了。只保證數(shù)據(jù)的信息寫(xiě)到 NameNode 上,但并不保證數(shù)據(jù)已經(jīng)被寫(xiě)到DataNode 中)