寫操作對操作者是無感知的。
client呼叫filesystem.create(file path)方法,去與nn進行 rpc 通訊,check該路徑的檔案是否存在以及有沒有許可權建立該檔案。假如ok,就建立乙個新檔案,但是不關聯任何的block,nn根據上傳的檔案大小和副本數計算多少塊,以及塊存放的dn,最終將這些資訊返回給客戶端,則為fsdataoutputstream (紅色為面試題)
client呼叫fsdataoutputstream.write方法,將第乙個副本寫到第乙個dn,寫完寫第二個副本,寫完寫第三個副本。當第三個副本寫完,返回給ack packet給第二個副本的dn,然後第二個dn返回ack給第乙個dn,第乙個dn返回ack給fsdataoutputstream,標識第乙個塊。然後依次寫剩餘的塊(對操作者來說是透明的)
向檔案寫入資料完成後,client呼叫fsdataoutputstream.close()方法,關閉輸出流,flush快取區的資料報;
再呼叫fsdataoutputstream.complete(),通知nn節點寫入成功。
client端通過filesystem.open(filepath) ,去與nn進行rpc通訊,返回該檔案的部分或全部的block塊列表,也就是返回fsdata inputstream物件
client呼叫fsdata inputstream物件的read()方法,a)去與第乙個塊的最近的dn進行read,讀取完後會check。假如success,會關閉與當前dn通訊。假如fail,會記錄失敗的dn+block資訊,下次就不會讀取;那麼會去該塊的第二個dn的位址讀取。b)然後去第二個塊的最近的dn上讀取,重複check;c)假如當前block列表全部讀取完成,檔案還沒有結束,那麼filesystem會從nn獲取下一批的列表(對操作者透明,無感知,感覺就是連續的資料流)
client呼叫fsdatainputstream.close() 關閉輸入流
生產上,盡量將讀寫的動作 選取dn節點
【面試題】集群dn 3個,其中乙個dn掛了,那麼乙個檔案三個副本,那麼我現在能夠正確讀取檔案內容嗎?(block miss,該如何修復?)
手動修復
自動修復
hdfs讀寫流程 HDFS 讀寫流程(詳解)
hdfs hadoop distributed file system 是gfs的開源實現。1 優點 因為有多個副本,可以保證資料可靠,容錯性高 計算向資料移動,適用於批處理 適合大資料處理,gb tb pb級資料,百萬以上的檔案,十萬以上的節點 可以構建在廉價機器上,通過多副本提高可靠性 2 缺點...
hdfs讀寫流程 HDFS 檔案讀寫流程
開啟分布式檔案 呼叫分布式檔案 distributedfilesystem.open 方法 定址請求 從 namenode 處得到 datanode 的位址,distributedfilesystem使用 rpc 方式呼叫了namenode,namenode 返回存有該副本的datanode 位址,...
hdfs讀寫流程
1.client發起檔案上傳請求 通過rpc和namenode建立連線,namenode檢查目標檔案是否存在,檢查父目錄是否存在,檢查使用者是否有許可權,返回是否可以上傳 2.client請求第乙個block該傳輸到那些datanode伺服器上 3.namenode根據配置檔案中指定的備份數量及機架...