1.讀流程
1.1 、client通過filesystem.open(filepath)方法,與nn節點進行【rpc】協議通訊,校驗是否有許可權是否存在,假如都ok,返回該檔案的部分或全部的block的列表(包含各個block塊的分布在dn位址的列表),也就是返回【fsdatainputstream】物件;
1.2、clinet呼叫fsdatainputstream.read方法。
a.與第乙個塊的最近的dn進行read,讀取完成後,會check,假如ok,會關閉與當前的dn的通訊;假如失敗會記錄塊的這個副本+dn資訊,向nn匯報這個塊副本損壞,下次就不會從這讀取。那麼就去該塊的第二個dn的位址讀取
b.然後讀取第二個塊,步驟和a一樣
c.假如block列表讀取完成後,檔案還未結束,那麼filesystem會從nn獲取下一批次的block的列表。
1.3、client呼叫fsdatainputstream.close()方法,關閉輸入流。
2、寫流程
2.1 、client呼叫filesystem.create(filepath)方法,與nn進行【rpc】通訊,檢驗該路徑是否有許可權建立是否檔案存在,假如ok,就建立乙個新的檔案,但不關聯任何的block,返回乙個【fsdataoutputstream】(假如不ok,直接返回錯誤)
2.2、 client呼叫fsdataoutputstream.write方法
a.將第乙個塊的第乙個副本寫入dn1,第乙個副本寫完傳輸給第二個dn2,第二個副本寫完就傳輸給第三個dn3,當第dn3寫完,就返回乙個ack packet給dn2,dn2就返回ack packet給dn1,dn1就返回ack packet的fsdataoutputstream物件,標識第乙個塊的三個副本都寫完了
b.餘下的塊依次這樣
2.3、 當向檔案寫入資料完成後,client呼叫fsdataoutputstream.close()方法
關閉輸出流
2.4、 再呼叫filesystem.complete()方法,告訴nn節點寫入成功。
思考題:
1個dn,1個副本,dn掛了能不能讀/寫?
3dn,3副本,其中乙個dn掛了,能不能讀內容+寫?
10dn,3副本,其中乙個dn掛了,能不能讀內容+寫?
1個dn,1個副本,dn掛了,肯定沒法寫了,讀檔案目錄等資訊,還是ok的,但是讀檔案內容是沒法的
3個dn,3個副本,1個dn掛了,沒法寫,因為無法滿足副本數=3,內容是可以讀的,因為還有其他兩個dn有每個block的副本
10個dn,3個副本,1個dn掛了,可以讀寫,資源富足
總結:只要存活的dn>=副本數,可以寫,否則不能寫,讀是需要看是讀目錄還是讀內容,讀能容只需要至少存在乙個dn就行了,目錄都能讀
hdfs讀寫流程 HDFS 讀寫流程(詳解)
hdfs hadoop distributed file system 是gfs的開源實現。1 優點 因為有多個副本,可以保證資料可靠,容錯性高 計算向資料移動,適用於批處理 適合大資料處理,gb tb pb級資料,百萬以上的檔案,十萬以上的節點 可以構建在廉價機器上,通過多副本提高可靠性 2 缺點...
HDFS的讀寫流程(詳解)
hdfs hadoop distributed file system 是gfs的開源實現。1 優點 2 缺點 寫流程如下 1 客戶端訪問namenode,namenode檢查路徑和許可權,如果路徑中有與要上傳的檔案重名的檔案就不能上傳了,不能覆蓋,如果沒有才建立,建立名為file.copying的...
詳解HDFS檔案讀寫流程
詳細步驟解析 client發起檔案上傳請求,通過rpc與namenode建立通訊,namenode檢查目標檔案是否已存在,父目錄是否存在,返回是否可以上傳 client請求第乙個block該傳輸到哪些datanode伺服器上 client請求3臺datanode中的一台a上傳資料 本質上是乙個rpc...