1.客戶端將文件寫入本地磁盤的N#x4E34;時文件中markdown
2.當臨時文件大小達到一個block大小時,HDFS client通知NameNode,申請寫入文件網絡
3.NameNode在HDFS的文件系統中建立一個文件,並把該block id和要寫入的DataNode的列表返回給客戶端性能
4.客戶端收到這些信息後,將臨時文件寫入DataNodesblog
5.文件寫完後(客戶端關閉),NameNode提交文件(這時文件纔可見,֘#x5982;果提交前,NameNode垮掉,那文件也就丟失了。fsync:只保證數據的信息寫到NameNode上,但並不保證數據已經被寫到DataNode中)ip
Rack aware(機架感知)pip
經過配置文件指定機架名和DNS的對應關係io
假設複製參數是3,在寫入文件時,會在本地的機架保存一份數據,而後在另一個機架內保存兩份數據(同機架內的傳輸速度快,從而提升性能)class
整個HDFS的集羣,最好是負載平衡的,這樣才能儘可能利用集羣的優點集羣
DataNode能夠失效cli
DataNode會定時發送心跳到NameNode。若是ղ#x5728;一段時間內NameNode沒有收到DataNode的心跳消息,則認爲其失效。此時NameNode就會將該節點的數據(從該節點的複製節點中獲取)複製到另外的DataNode中
數據能夠毀壞
不管是寫入時仍是硬盤自己的問題,只要數據有問題(讀取時經過校驗碼來檢測),均可以經過其餘的複製節點讀取,同時還會再複製一份到健康的節點中