【Hadoop學習】HDFS基本原理

HDFS簡介

HDSF

Hadoop Distributed File System, Hadoop分佈式文件系統。

特色

1. 保存多個副本,且提供容錯機制,副本丟失或宕機自動恢復。默認存3份。

2. 運行在廉價的機器上。

3. 適合大數據的處理。HDFS默認會將文件分割成block,64M爲1個block。
   而後將block按鍵值對存儲在HDFS上,並將鍵值對的映射存到內存中。若是小文件太多,那內存的負擔會很重。
   (筆記:HDFS不適合小文件存儲:小文件多,形成內存負擔。)

系統結構

clipboard.png

MasterSlave結構。node

分爲三個角色:NameNodeSecondaryNameNodeDataNode網絡

NameNode分佈式

Master節點,大領導。

1. 管理數據塊映射;

2. 處理客戶端的讀寫請求;

3. 配置副本策略;

4. 管理HDFS的名稱空間。

5. namenode 內存中存儲的是 = fsimage + edits。

SecondaryNameNodeoop

小弟,分擔大哥namenode的工做量。

SecondaryNameNode負責定時默認1小時,從namenode上,獲取fsimage和edits來進行合併,而後再發送給namenode。
減小namenode的工做量。

NameNode的冷備份。

DataNode大數據

Slave節點,奴隸,幹活的。

1. 存儲client發來的數據塊block;

2. 執行數據塊的讀寫操做。

熱備份spa

b是a的熱備份,若是a壞掉。那麼b立刻運行代替a的工做。

冷備份日誌

b是a的冷備份,若是a壞掉。那麼b不能立刻代替a工做。可是b上存儲a的一些信息,減小a壞掉以後的損失。

fsimagecode

元數據鏡像文件(文件系統的目錄樹)。(?仍是不懂)

editsblog

元數據的操做日誌(針對文件系統作的修改操做記錄)

工做原理

寫操做

寫操做原理圖ip

clipboard.png

寫操做場景

有一個文件FileA,100M大小。Client將FileA寫入到HDFS上。

HDFS按默認配置。

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

寫操做流程

  1. Client將FileA按64M分塊。分紅兩塊,block1和Block2;
  2. Client向nameNode發送寫數據請求,如圖藍色虛線①--->。
  3. 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相同的另外一個節點上;其餘副本隨機挑選。 (?沒明白)
  4. 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> host二、host一、host3向NameNode發送通知,host2向Client發送通知,說「消息發送完了」。如圖粉紅顏色實線所示。
    
    7> client收到host2發來的消息後,向namenode發送消息,說block1寫完了。這樣block1就完成了。如圖黃色粗實線;
    
    8> 發送完block1後,再向host7,host8,host4發送block2,如圖藍色實線所示;
    
    9> 發送完block2後,host7,host8,host4向NameNode發送通知,host7向Client發送通知,如圖淺綠色實線所示;
    
    10> client向NameNode發送消息,說我寫完了,如圖黃色粗實線。這樣就完畢了。

寫操做總結

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

 2. 在執行讀或寫的過程當中,NameNode和DataNode經過HeartBeat進行保存通訊,肯定DataNode活着。若是發現DataNode死掉了,就將死掉的DataNode上的數據,放到其餘節點去。讀取時,要讀其餘節點去。

 3. 掛掉一個節點,不要緊,還有其餘節點能夠備份;甚至,掛掉某一個機架,也不要緊;其餘機架上,也有備份。

讀操做

讀操做原理圖

clipboard.png

讀操做場景

client要從datanode上,讀取FileA。而FileA由block1和block2組成。

讀操做流程

  1. client向namenode發送讀請求;
  2. namenode查看Metadata信息,返回fileA的block的位置:

    block1:host2,host1,host3
    
    block2:host7,host8,host4
  3. block的位置是有前後順序的,先讀block1,再讀block2。並且block1去host2上讀取;而後block2,去host7上讀取。

注:
上面例子中,client位於機架外,那麼若是client位於機架內某個DataNode上,例如,client是host6。那麼讀取的時候,遵循的規律是:優選讀取本機架上的數據

整理自大牛筆記的博文。

相關文章
相關標籤/搜索