一、HDFS的組成
- NameNode
處理讀寫請求
- SecondNamenode
幫助namenode合併元數據
- Datanode
存儲真正的數據
二、HDFS的讀寫流程
HDFS的讀流程
1、客戶端通過DistributeFileSystem向NameNode請求上傳文件
2、NameNode查看文件是否存在,倘若沒則向客戶端響應
3、客戶端請求上傳第一個block,並請求返回這三個dataNode節點
4、客戶端通過FSDatainputStream向dn1發送請求,dn1調用dn2,dn2調用dn3,直到通道建成
5、dn1、dn2、dn3逐級應答客戶端
6、客戶端向dn1發送第一個packet,dn1-->dn2-->dn3依次傳遞
7、根據文件大小,判斷是否繼續上傳block
HDFS的寫流程
1、客戶端向NameNode發出寫文件請求
2、檢查是否已存在文件、檢查權限。若通過檢查,直接先將操作寫入EditLog,並返回輸出流對象。
3、client端按128MB的塊切分文件
4、client將NameNode返回的分配的可寫的DataNode列表和Data數據一同發送給最近的第一個DataNode節點,多個節點形成通道
5、client每向第一個DataNode寫入一個packet,這個packet便會直接在pipeline裏傳給第二個、第三個…DataNode
6、每個DataNode寫完一個塊後,會返回確認信息
7、寫完數據,關閉輸輸出流,發送完成信號給NameNode。
8、(注:發送完成信號的時機取決於集羣是強一致性還是最終一致性,強一致性則需要所有DataNode寫完後才向NameNode彙報。最終一致性則其中任意一個DataNode寫完後就能單獨向NameNode彙報,HDFS一般情況下都是強調強一致性)