Hadoop HDFS讀寫流程

2022-02-19 14:25:43 字數 2101 閱讀 9001

1) 客戶端呼叫

distributedfilesystem

的 open()

方法開啟檔案。

2) distributedfilesystem 用

rpc

連線到

namenode

,請求獲取檔案的資料塊的資訊;

namenode

返回檔案的部分或者全部資料塊列表;對於每個資料塊,

namenode

都會返回該資料塊副本的

datanode

位址;distributedfilesystem

返回 fsdatainputstream

給客戶端,用來讀取資料。

3) 客戶端呼叫

fsdatainputstream

的 read()

方法開始讀取資料。

4) fsinputstream 連線儲存此檔案第乙個資料塊的最近的

datanode

,並以資料流的形式讀取資料;客戶端多次呼叫

read()

,直到到達資料塊結束位置。

5) fsinputstream連線儲存此檔案下乙個資料塊的最近的

datanode

,並讀取資料。

6) 當客戶端讀取完所有資料塊的資料後,呼叫

fsdatainputstream

的 close()

方法。1)  客戶端呼叫

distribuedfilesystem

的 create()

方法來建立檔案。

2) distributedfilesystem 用

rpc

連線 namenode

,請求在檔案系統的命名空間中建立乙個新的檔案;

namenode

首先確定檔案原來不存在,並且客戶端有建立檔案的許可權,然後建立新檔案;

distributedfilesystem

返回 fsoutputstream

給客戶端用於寫資料。

3) 客戶端呼叫

fsoutputstream

的 write()

函式,向對應的檔案寫入資料。

4) 當客戶端開始寫入檔案的時候,客戶端會將檔案切分成多個

packets

,並在內部以資料佇列「

data queue

(資料佇列)」的形式管理這些

packets

,並向

namenode

申請 blocks

,獲 取用來儲存

replicas

的合適的

datanode

列表,列表的大小根據

namenode

中 replication

的設定而定;

佇列中的分包被打包成資料報,將第乙個塊寫入第乙個datanode,第乙個 datanode寫完傳給第二個節點

,第二個寫完傳給第三節點

5) 為了保證所有

datanode

的資料都是準確的,接收到資料的

datanode

要向傳送者傳送確認包(

ack packet

)。確認包沿著資料流管道反向而上,

當第三個節點寫完返回乙個ack packet給

第二個節點

,第二個返回乙個

ack packet

給第乙個節點

,第乙個節點返回

ack packet

給fsdataoutputstream物件,

意思標識第乙個塊寫完

,副本數為

3;然後剩餘的塊依次這樣寫

; 6) 不斷執行第

(3)~(5)

步,直到資料全部寫完。

7) 呼叫

fsoutputstream

的 close()

方法,將所有的資料塊寫入資料流管道中的資料結點,並等待確認返回成功。最後通過

namenode

完成寫入。

Hadoop HDFS 讀寫資料

1 初始化filesystem,然後客戶端 client 用filesystem的open 函式開啟檔案 2 filesystem用rpc呼叫元資料節點,得到檔案的資料塊資訊,對於每乙個資料塊,元資料節點返回儲存資料塊的資料節點的位址。3 filesystem返回fsdatainputstream給...

hadoop hdfs 資料讀寫

向 namenode 請求上傳檔案 響應可以上傳檔案 向 namenode 請求,上傳到哪幾台 datanode namenode 返回,指定檔案上傳的 datanode 節點資料 通過獲取到的 namenode 節點資訊,客戶端向乙個節點傳送通訊,開通資料通訊管道 確認建立通道 建立 fsdata...

Hadoop HDFS 讀寫資料

1 初始化filesystem,然後客戶端 client 用filesystem的open 函式開啟檔案 2 filesystem用rpc呼叫元資料節點,得到檔案的資料塊資訊,對於每乙個資料塊,元資料節點返回儲存資料塊的資料節點的位址。3 filesystem返回fsdatainputstream給...