Hadoop-HDFS

HDFS - 寫文件

1.客戶端將文件寫入本地磁盤的N#x4E34;時文件中markdown

2.當臨時文件大小達到一個block大小時,HDFS client通知NameNode,申請寫入文件網絡

3.NameNode在HDFS的文件系統中建立一個文件,並把該block id和要寫入的DataNode的列表返回給客戶端性能

4.客戶端收到這些信息後,將臨時文件寫入DataNodesblog

  • 4.1 客戶端將文件內容寫入第一個DataNode(通常以4kb爲單位進行傳輸)
  • 4.2 第一個DataNode接收後,將數據寫入本地磁盤,同時也傳輸給第二個DataNode
  • 4.3 依此類推到最後一個DataNode,數據在DataNode之間是經過pipeline的方式進行復制的
  • 4.4 後面的DataNode接收完數據後,都會發送一個確認給前一個DataNode,最終第一個DataNode返回確認給客戶端
  • 4.5 當客戶端接收到整個block的確認後,會向NameNode發送一個最終的確認信息
  • 4.6 若是寫入某個DataNode失敗,數據會繼續寫入其餘的DataNode。而後NameNode會找另一個好的DataNode繼續複製,以保證冗餘性
  • 4.7 每一個block都會有一個校驗碼,並存放到獨立的文件中,以便讀的時候來驗證其完整性

5.文件寫完後(客戶端關閉),NameNode提交文件(這時文件纔可見,֘#x5982;果提交前,NameNode垮掉,那文件也就丟失了。fsync:只保證數據的信息寫到NameNode上,但並不保證數據已經被寫到DataNode中)ip

Rack aware(機架感知)pip

經過配置文件指定機架名和DNS的對應關係io

假設複製參數是3,在寫入文件時,會在本地的機架保存一份數據,而後在另一個機架內保存兩份數據(同機架內的傳輸速度快,從而提升性能)class

整個HDFS的集羣,最好是負載平衡的,這樣才能儘可能利用集羣的優點集羣

HDFS - 讀文件

 

  1. 客戶端向NameNode發送讀取請求
  2. NameNode#x8FD4;迴文件的全部block和這些block所在的DataNodes(包括複製節點)
  3. 客戶端直接從DataNode中讀取數據,若是該DataNode讀取失敗(DataNode失效或校驗碼不對),則從複製節點中讀取(若是讀取的數據就在本機,則直接讀取,不然經過網絡讀取)
 

HDFS - 可靠性

  1. DataNode能夠失效cli

    DataNode會定時發送心跳到NameNode。若是ղ#x5728;一段時間內NameNode沒有收到DataNode的心跳消息,則認爲其失效。此時NameNode就會將該節點的數據(從該節點的複製節點中獲取)複製到另外的DataNode中

  2. 數據能夠毀壞

    不管是寫入時仍是硬盤自己的問題,只要數據有問題(讀取時經過校驗碼來檢測),均可以經過其餘的複製節點讀取,同時還會再複製一份到健康的節點中

  3. NameNode不可靠
相關文章
相關標籤/搜索