hdfs的讀寫策略

2021-08-16 06:07:22 字數 1458 閱讀 7193

讀資料過程:

1.客戶端呼叫filesystem 例項的open 方法,獲得這個檔案對應的輸入流inputstream

2.訪問namenode,獲取檔案對應資料塊的儲存位置,包括副本位置。

3.獲得輸入流之後,客戶端便呼叫read()方法讀取資料。選擇最近的datanode進行連線並讀取資料。

4.如果客戶端與乙個datanode位於用一台機架,那麼直接從本地讀取資料。

5.到達資料塊末端,關閉與這個datanode的連線,然後重新檢查找到下乙個資料塊。

6.不斷執行2-5直到資料完全讀完。

7.客戶端呼叫close(),關閉fsdatainutstream。

寫資料過程:

1.客戶端呼叫filesystem例項的create()方法,建立檔案。namenode 通過一些檢查,比如檔案是否存在,客戶端是否擁有建立許可權等;通過檢查之後,在namenode 新增檔案資訊。注意,因為此時檔案沒有資料,所以namenode 上也沒有檔案資料塊的資訊。

2.建立結束之後, hdfs 會返回乙個輸出流dfsdataoutputstream 給客戶端

3.客戶端呼叫輸出流dfsdataoutputstream 的write 方法向hdfs 中對應的檔案寫入資料。

4.資料首先會被分塊,分塊寫入乙個輸出流的內部data佇列中,接受完資料分塊,輸出流dfsdataoutputstream 會向namenode 申請儲存檔案和副本資料塊的若干個datanode , 這若干個datanode 會形成乙個資料傳輸管道。dfsdataoutputstream 將資料傳輸給距離上最短的datanode ,這個datanode 接收到資料報之後會傳給下乙個datanode 。資料在各datanode之間通過管道流動,而不是全部由輸出流分發,以減少傳輸開銷。

5.因為各datanode 位於不同機器上,資料需要通過網路傳送,所以,為了保證所有datanode 的資料都是準確的,接收到資料的datanode 要向傳送者傳送確認包(ack packet ) 。對於某個資料塊,只有當dfsdataoutputstream 收到了所有datanode 的正確ack. 才能確認傳輸結束。dfsdataoutputstream 內部專門維護了乙個等待ack 佇列,這一佇列儲存已經進入管道傳輸資料、但是並未被完全確認的資料報。

6.不斷執行第3 - 5 步直到資料全部寫完,客戶端呼叫close 關閉檔案。

7.dfsdatainputstream 繼續等待直到所有資料寫人完畢並被確認,呼叫complete 方法通知namenode 檔案寫入完成。namenode 接收到complete 訊息之後,等待相應數量的副本寫入完畢後,告知客戶端。

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 使用 hdfs 提供的客戶端 client,向遠端的 namenode 發起 rpc 請求 2 namenode 會檢查要建立的檔案是否已經存在,建立者是否有許可權進行操作,成功則會 為檔案建立乙個記錄,否則會讓客戶端丟擲異常 3 當客戶端開始寫入檔案的時候,客戶端會將檔案切分成多個 packe...