HDFS之檔案讀 寫流程

2021-08-14 13:56:38 字數 1500 閱讀 4280

我們通過命令bin/hdfs dfs -cat /***.log檢視乙個檔案的時候,對於nn、dn之間的操作我們是無感知的,具體中間都發生了什麼,下面來簡單描述一下。

讀操作

操作步驟:

1、client通過filesystem.open(filepath)方法,去與namenode進行rpc通訊,返回該檔案的部分或全部的block列表(也包含該列表各block分布在datanode位址的列表),返回fsdatainputstream物件;

2、client呼叫fsdatainputstream物件的read()方法

2.1)、去與第一塊的最近的datanode進行read,讀取完後,會check,假如successful,會關閉與當前datanode通訊;(假如check fail,會記錄失敗的塊+datanode資訊,下次就不會讀取;然後會去該快的第二個datanode位址讀取)

2.2)、然後去第二個塊的最近的datanode上進行讀取,check後,會關閉與此datanode的通訊;

2.3)、如果block列表讀取完了,檔案還未結束,那麼filesystem會從namenode獲取下一批的block的列表。(讀操作對於client端是透明的,感覺就是連續的資料流)

3、client呼叫fsdatainputstream.close()方法,關閉輸入流。

寫操作綜合描述:

客戶端要向hdfs寫資料,首先和namenode通訊,確認可以寫檔案並獲得接受檔案block的datanode,然後客戶端按順序將檔案逐個block上傳給相應的datanode,並由接受到block的datanode負責向其他datanode複製block副本。

操作步驟:

1、client呼叫filesystem.create(filepath)方法,與namenode進行rpc通訊,check該路徑的檔案是否存在以及有沒有許可權建立該檔案,如果都ok,就建立乙個新檔案,但是並不關聯任何block,返回乙個fsdatainputstream物件;(如果都不ok,就返回錯誤資訊,所以要try-catch);

2、client呼叫fsdatainputstream物件的write() 方法,會將第乙個塊寫入第乙個datanode,第乙個datanode寫完傳給第二個節點,第二個寫完傳給第三個節點,當第三個節點寫完返回乙個ack packet給第二個節點,第二個返回乙個ack packet給第乙個節點,第乙個節點返回ack packet給fsdatainputstream物件,意思標識第乙個塊寫完,副本數為3,剩餘的block依次這樣寫;

3、當向檔案寫入資料完成後,client呼叫fsda****utstream.close()方法,關閉輸出流,flush快取區的資料報;

4、再呼叫filesystem.complete()方法,告訴namenode節點寫入成功。

hdfs讀寫流程 HDFS 檔案讀寫流程

開啟分布式檔案 呼叫分布式檔案 distributedfilesystem.open 方法 定址請求 從 namenode 處得到 datanode 的位址,distributedfilesystem使用 rpc 方式呼叫了namenode,namenode 返回存有該副本的datanode 位址,...

HDFS檔案讀寫流程

詳細步驟解析 1 client發起檔案上傳請求,通過rpc與namenode建立通訊,namenode檢查目標檔案是否已存在,父目錄是否存在,返回是否可以上傳 2 client請求第乙個block該傳輸到哪些datanode伺服器上 3 namenode根據配置檔案中指定的備份數量及機架感知原理進行...

HDFS檔案讀寫流程

1.1 命令 hadoop fs put log user 1.2 流程圖 注意 檔案寫流程是 fsdataoutputstream 不是 fsdatainputstream。1.3 詳細過程 client 呼叫 filesystem.create filepath 方法,與 nn 進行 rpc 通...