NameNode和DataNode之間的交互

簡介

HDFS的設計核心是提高處理數據的吞吐量而不是低延遲,因此更適合數據的批處理,而非交互式處理,HDFS弱化了一些POSIX語義以獲求吞吐量提升。HDFS對存儲在其上的數據使用了一次寫入多次讀取的文件控制模型,一旦一個文件被寫入並且存儲到HDFS系統上,只可以追加寫入該文件而不能修改,從而達到提高吞吐量的目標

NameNode可以執行以下HDFS功能

1、執行所有的HDFS操作,如打開/關閉文件或目錄
2、映射數據塊到DataNodes
3、維護元數據,如文件的塊副本存儲位置、文件當前的狀態以及文件的訪問控制信息等

DataNode提供所有來自客戶端的讀寫請求,在接收到NameNode的命令後,其還執行文件塊的創建、刪除、複製等操作。客戶端也可以直接和DataNode交互,進行文件塊的創建、讀、寫以及副本傳輸操作。DataNode的守護進程保持一個開放端口以與客戶端及其他DataNode節點進行通信,該端口使得NameNode知道服務器和端口信息,所以NameNode可以向DataNode和客戶端發送消息,保持服務端socket的連接打開能夠使客戶端更有效率地讀寫

NameNode和DataNode之間的通信

DataNode沒有直接和NameNode連接,而是在需要時才與NameNode通信,以下是DataNode與NameNode通信的方式

1、初始化註冊:當DataNode啓動時,將向NameNode進行註冊,告知NameNode其可以處理HDFS的讀寫操作
2、週期性心跳:所有的DataNode週期性(默認是3秒)向NameNode發送包含有該節點使用統計的心跳信息,該心跳信息,使NameNode知道可以向DataNode發送命令,如複製、刪除等
3、-getDataNodeInfo <datanode_host :ipc_port> 命令顯示DataNode是否存活
4、如果NameNode長時間沒有收到心跳,會立即向DataNode發送一個快請求,如果NameNode無法識別DataNode或者NameNode重新啓動或與DataNode的通信超時,其將要求DataNode重新註冊。如果DataNode長時間(如30分鐘)沒有成功發送心跳信息,NameNode會把該DataNode標記爲死亡狀態,並且通知其他DataNode複製死亡節點上存儲的數據,以使塊的複製因子滿足配置的副本數量
5、週期性塊報告:默認情況下,每一個DataNode每1小時向NameNode發送一次塊報告,通過塊報告,可以將NameNode上存在的副本信息與DataNode上的副本信息進行同步。利用DataNode的週期性心跳塊報告被髮送給NameNode
6、完成副本寫入:成功寫入塊副本後,DataNode會向NameNode發送消息

實例圖

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章