1. 程式人生 > >HDFS原理

HDFS原理

image 通知 發現 data- 紅顏 不為 保存 隨機選擇 流量

技術分享


有一個文件FileA,100M大小。

Client將FileA寫入到HDFS上。

HDFS按默認配置。

HDFS分布在三個機架上Rack1,Rack2。Rack3。

a. Client將FileA按64M分塊。分成兩塊。block1和Block2;

b. Client向nameNode發送寫數據請求,如圖藍色虛線------>

c. NameNode節點,記錄block信息。並返回可用的DataNode,如粉色虛線--------->

Block1: host2,host1,host3

Block2: host7,host8,host4

原理:

NameNode具有RackAware機架感知功能,這個能夠配置。

若client為DataNode節點。那存儲block時,規則為:副本1,同client的節點上;副本2,不同機架節點上。副本3。同第二個副本機架的還有一個節點上。其它副本隨機挑選。

若client不為DataNode節點。那存儲block時。規則為:副本1,隨機選擇一個節點上;副本2。不同副本1。機架上;副本3,同副本2同樣的還有一個節點上;其它副本隨機挑選。

d. client向DataNode發送block1;發送過程是以流式寫入。

流式寫入過程。

1>

將64M的block1按64k的package劃分;

2>然後將第一個package發送給host2;

3>host2接收完後。將第一個package發送給host1,同一時候client想host2發送第二個package;

4>host1接收完第一個package後,發送給host3,同一時候接收host2發來的第二個package。

5>以此類推,如圖紅線實線所看到的,直到將block1發送完成。

6>host2,host1,host3向NameNode,host2向Client發送通知,說“消息發送完了”。如圖粉紅顏色

實線所看到的。

7>client收到host2發來的消息後,向namenode發送消息。說我寫完了。這樣就真完畢了。如圖黃色粗實線

8>發送完block1後,再向host7,host8,host4發送block2,如圖藍色實線所看到的。

9>發送完block2後,host7,host8,host4向NameNode。host7向Client發送通知。如圖淺綠色實線所看到的。

10>client向NameNode發送消息。說我寫完了,如圖黃色粗實線。。。

這樣就完成了。

分析,通過寫過程。我們能夠了解到:

寫1T文件。我們須要3T的存儲。3T的網絡流量貸款。

在運行讀或寫的過程中,NameNode和DataNode通過HeartBeat進行保存通信,確定DataNode活著。

假設發現DataNode死掉了,就將死掉的DataNode上的數據,放到其它節點去。

讀取時。要讀其它節點去。

掛掉一個節點,沒關系,還有其它節點能夠備份。甚至,掛掉某一個機架,也沒關系;其它機架上,也有備份。



HDFS原理