Hadoop的讀寫操做、元數據及SecondaryNameNode、Checkpoint原理

1、寫操做

  1)客戶端經過Distributed FileSystem模塊向namenode請求上傳文件,namenode檢查目標文件是否已存在,父目錄是否存在。node

  2)namenode返回是否能夠上傳。緩存

  3)客戶端請求第一個 block上傳到哪幾個datanode服務器上。服務器

  4)namenode返回3個datanode節點,分別爲dn一、dn二、dn3。oop

  5)客戶端經過FSDataOutputStream模塊請求dn1上傳數據,dn1收到請求會繼續調用dn2,而後dn2調用dn3,將這個通訊管道創建完成。設計

  6)dn一、dn二、dn3逐級應答客戶端。3d

  7)客戶端開始往dn1上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存,而後纔會寫入本地磁盤),以packet爲單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應答隊列等待應答。日誌

  8)當一個block傳輸完成以後,客戶端再次請求namenode上傳第二個block的服務器。(重複執行3-7步)blog

  

2、讀操做

   1.請求namenode 由於namenode元數據裏面記錄了DataNode的地址隊列

   2.把咱們的信息返回給客戶端內存

   3.客戶端收到信息以後 就到相應客戶端去請求數據便可

   4.重點是請求那個DataNode上的哪一個塊信息,由於namenode上存放的是塊編號

  

3、元數據

  元數據保存在內存中,fsimage是元數據文件的存放方式,fsimage中的內容是各個文件的塊信息

  namenode中fsimage信息會每隔半小時更新一次,新文件與舊文件合併不斷更新,在關閉時也會更新一次,開啓時namenode會吧fsimage的數據加載到內存

4、namenode和SecondaryNameNode CheckPoint原理

  在無Secondarynamenode時namenode要處理大量的客戶端的請求還要每半小時把內存的數據同步到fsimage一次,爲了減少namenode工做負擔,設計出secondarynamenode。

  secondarynamenode是對namenode的一個備份,它會下載namenode上的日誌信息,根據日誌生成fsimage實現對namenode的備份,把fsimage傳給namenode,這時同步的任務交給secondarynamenode,namenode無需本身每半小時同步到fsimage。

  不開啓secondarynamenode的狀況下,若是namenode掛掉就沒法恢復。

  1.secondary namenode請求主Namenode中止使用edits文件,暫時將新的寫操做記錄到一個新文件中,如edits.new。 
  2.secondary namenode節點從主Namenode節點獲取fsimage和edits文件(採用HTTP GET) 
  3.secondary namenode將fsimage文件載入到內存,逐一執行edits文件中的操做,建立新的fsimage文件 
  4.secondary namenode將新的fsimage文件發送回主Namenode(使用HTTP POST) 
  5.主Namenode節點將從secondary namenode節點接收的fsimage文件替換舊的fsimage文件,用步驟1產生的edits.new文件替換舊的edits文件(即更名)。同時更新fstime文件來記錄檢查點執行的時間

  注:從Hadoop0.21.0開始,輔助Namenode已經放棄不用,由checkpoint節點取而代之,功能不變。新版本同時引入一種新的Namenode,名爲BackupNode

相關文章
相關標籤/搜索