一、寫操作
1)客戶端通過Distributed FileSystem模塊向namenode請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在,
2)namenode回傳是否可以上傳,
3)客戶端請求第一個 block上傳到哪幾個datanode服務器上,
4)namenode回傳3個datanode節點,分別為dn1、dn2、dn3,
5)客戶端通過FSDataOutputStream模塊請求dn1上傳資料,dn1收到請求會繼續呼叫dn2,然后dn2呼叫dn3,將這個通信管道建立完成,
6)dn1、dn2、dn3逐級應答客戶端,
7)客戶端開始往dn1上傳第一個block(先從磁盤讀取資料放到一個本地記憶體快取,然后才會寫入本地磁盤),以packet為單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應答佇列等待應答,
8)當一個block傳輸完成之后,客戶端再次請求namenode上傳第二個block的服務器,(重復執行3-7步)

二、讀操作
1.請求namenode 因為namenode元資料里面記錄了DataNode的地址
2.把我們的資訊回傳給客戶端
3.客戶端收到資訊之后 就到相應客戶端去請求資料即可
4.重點是請求那個DataNode上的哪個塊資訊,因為namenode上存放的是塊編號

三、元資料
元資料保存在記憶體中,fsimage是元資料檔案的存放方式,fsimage中的內容是各個檔案的塊資訊
namenode中fsimage資訊會每隔半小時更新一次,新檔案與舊檔案合并不斷更新,在關閉時也會更新一次,開啟時namenode會吧fsimage的資料加載到記憶體

四、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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/226027.html
標籤:其他
