HDFS原理

HDFS原理

HDFS架構圖

在HDFS中有三個模塊
分別是:NameNode、SecondaryNameNode、DataNode

1.NameNode

NameNode是掌控全局的模塊,主要作用有:
①.用來管理DataNode以及元數據;

  • 文件的上傳時間
  • 文件權限
  • 文件的位置信息
  • block的Id

②.提供讀寫服務;
  接收來自Client的讀寫請求,返回BlockId、地址等信息
 
③.收集DataNode彙報的block信息以及心跳信息。

NameNode保存的metedata信息包括:
文件owership和permissions

  • 文件大小,時間
  • block列表:blockID
  • Block副本位置(由DataNode上報)

SecondrayNameNode

作用:持久化內存中的元數據,除了block的位置信息,其他元數據都會持久化

由於NameNode中產生的元數據都是在內存中,隨着文件越來越大以及各種各樣的原因,存放在內存中就會不穩定,我們可以使用SecondaryNameNode將元數據持久化到磁盤上來保證數據的穩定性。在持久化的信息中,沒有block的位置信息,因爲block的位置是有可能發送變動的,如果block位置信息發生變化,就會產生信息的不同步,降低集羣的可用性。
在這裏插入圖片描述
首先,SecondaryNameNode會把NameNode中的edits和fsimage文件拉取過來,其中edits中存儲的是NameNode的這個階段的所有操作,fsimage則是空的文件,在SecondaryNameNode中,會根據edits重演NameNode的操作,並將產生的數據存放到fsimage中,最終合併到fsimage.ckpt中,然後把fsimage.ckpt推送到NameNode中。

DataNode

作用:
1.存儲源數據(以block塊的形式存儲)
2.接收客戶端的讀請求
3.向NameNode發送心跳信息

寫的流程

通過管道實現並行存儲,同步的對block數據塊進行寫入與備份,寫的時候把block塊分成64K大小的packet通過管道開始源源不斷的傳輸。
之所以會使用管道機制,是爲了實現並行存儲,這樣會減少上傳的時間,提高整個集羣的可用性。
寫操作的詳細過程 1. 如果要上傳一個大文件,client切割大文件,計算大文件block數,大文件地址/128M=block數量
2. client對NameNode彙報:
(1)當前大數據文件的block數
(2)當前大文件屬於誰 權限
(3)上傳時間
for(Block block:bocks(大文件切割出來的Block)){
3. client切割出來一個block
4. client請求block塊的Id號以及地址
5. 因爲NameNode能夠掌控全局,管理所有的DN,所以它將負載不高的DN地址返回給client
6. client拿到地址後找到DN去上傳數據
7. DN將block存儲完畢之後會向NameNode彙報當前的存儲情況
}

讀的流程

1.client訪問NameNode,查詢元數據信息,獲得這個文件的數據塊位置

2.就近挑選一臺datanode服務器,請求建立輸入流 。

3.DataNode向輸入流中寫數據

4.關閉輸入流

備份機制

1.第一個block存儲在負載不是很高的一臺服務器上

2.第一個備份的block存儲在與第一個block不同機架的隨機一臺服務器上

3.第二個備份在與第一個block備份相同機架的不同服務器上

注意:集羣的DataNode節點要大於等於副本數+1

權限

依據Linux的用戶權限系統

安全模式

1.加載fsimage到內存中

2.如果edits文件不爲空,那麼NameNode自己來合併

3.檢查DataNode的健康情況

4.如果有DataNode死亡,指揮做備份
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章