下圖描述了Client向HDFS上傳一個200M大小的日志文件的大致過程:
1)首先,Client發起文件上傳請求,即通過RPC與NameNode建立通訊。
2)NameNode與各DataNode使用心跳機制來獲取DataNode信息。NameNode收到Client請求后,獲取DataNode信息,並將可存儲文件的節點信息返回給Client。
3)Client收到NameNode返回的信息,與對應的DataNode節點取得聯系,並向該節點寫文件,寫入文件被切分成128m大小的數據塊,最后一塊可能不夠128m,一個數據塊里不能同時存儲2個以上文件的數據。
4)文件寫入到DataNode后,以流水線的方式復制到其他DataNode(以3份冗余為例,數據塊副本策略為:第一個塊寫入最近的機架上的一台服務器,第二個塊由第一個塊復制到同一個機架上的另一台主機上,最后一個副本被第二個副本主機復制到不同機架的不同主機上),至於復制多少份,與所配置的hdfs-default.xml中的dfs.replication相關。