hadoop學習筆記(六):HDFS文件的讀寫流程


一、HDFS讀取文件流程:

 

詳解讀取流程:

Client調用FileSystem.open()方法:

  1 FileSystem通過RPC與NN通信,NN返回該文件的部分或全部block列表(含有block拷貝的DN地址)。

  2 選取舉栗客戶端最近的DN建立連接,讀取block,返回FSDataInputStream

Client調用輸入流的read()方法:

  1 當讀到block結尾時,FSDataInputStream關閉與當前DN的連接,並未讀取下一個block尋找最近DN

  2 讀取完一個block都會進行checksum驗證,如果讀取DN時出現錯誤,客戶端會通知NN,然后再從下一個擁有該block拷貝的DN繼續讀。

  3 如果block列表讀完后,文件還未結束,FileSystem會繼續從NN獲取下一批block列表。

關閉FSDataInputStream

二、HDFS文件寫入流程:

 

 

 詳細寫入流程:

Client調用FileSystem的create()方法:

  1 FileSystem向NN發出請求,在NN的namespace里面創建一個新的文件,但是並不關聯任何塊

  2 NN檢查文件是否已經存在、操作權限。如果檢查通過,NN記錄新文件信息,並在某一個DN上創建數據塊。

  3 返回FSDataOutputStream,將Client引導至該數據塊執行寫入操作。

Client調用輸出流的write()方法:

  HDFS默認將每個數據塊放置3份。FSDataOutputStream將數據首先寫到第一節點,第一節點將數據包傳送並寫入第二節點,第二節點 --> 第三節點。

Client調用流的close()方法:

  flush緩沖區的數據包,block完成復制份數后,NN返回成功消息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM