獲取file文件,假設文件200M,則共有2個塊,block1為128M(hdfs默認塊大小為128M),block2為72M。默認三個副本。
- ClientNode調用DistributedFileSystem的 open 方法獲取FSDataInputStream。
- DistributedFileSystem向NameNode發出請求獲取file文件的元數據,包括所有塊所在的DataNode的位置信息。
- ClientNode調用FSDataInputStream獲取數據流。
- FSDataInputStream調用就近DanaNode獲取block1。DanaNode開始傳輸數據給客戶端,從磁盤裡面讀取數據輸入流,以Packet為單位來做校驗。ClientNode以Packet為單位接收數據,先在本地緩存,然後寫入目標文件。文件仍存在未讀取的block2,則繼續執行4。直到文件所有數據讀取完成。
- 全部數據接收完成,關閉數據流FSDataInputStream。
閱讀更多 有趣的代碼 的文章