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給...