Hadoop寫入讀取流程
寫入流程
![](http://static.javashuo.com/static/loading.gif)
- 客戶端經過Distributed FileSystem模塊向namenode請求上傳文件,namenode檢查目標文件是否已存在,父目錄是否存在。
- namenode返回是否能夠上傳。
- 客戶端請求第一個 block上傳到哪幾個datanode服務器上。
- namenode返回3個datanode節點,分別爲dn一、dn二、dn3。
- 客戶端經過FSDataOutputStream模塊請求dn1上傳數據,dn1收到請求會繼續調用dn2,而後dn2調用dn3,將這個通訊管道創建完成。
- dn一、dn二、dn3逐級應答客戶端。
- 客戶端開始往dn1上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存,而後纔會寫入本地磁盤),以packet爲單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應答隊列等待應答。
- 當一個block傳輸完成以後,客戶端再次請求namenode上傳第二個block的服務器。(重複執行3-7步)。
讀取流程
![HDFS讀取流程 HDFS讀取流程](http://static.javashuo.com/static/loading.gif)
- 客戶端經過Distributed FileSystem向namenode請求下載文件,namenode經過查詢元數據,找到文件塊所在的datanode地址。
- 挑選一臺datanode(就近原則,而後隨機)服務器,請求讀取數據。
- datanode開始傳輸數據給客戶端(從磁盤裏面讀取數據輸入流,以packet爲單位來作校驗)。
- 客戶端以packet爲單位接收,先在本地緩存,而後寫入目標文件。
歡迎關注本站公眾號,獲取更多信息