H06 HDFS讀寫流程

2021-10-07 02:04:24 字數 2118 閱讀 2598

檔案a大小100m,client將a寫入到hdfs上

hdfs按照預設配置,

hdfs分布在三個機架上rack1,rack2,rack3

a. client將a按照64m分塊。分成兩塊:block1、block2

b. client向namenode傳送寫資料請求,如圖藍色虛線①

c.namenode節點記錄block資訊。並返回可用datanode,如粉色虛線②

block1: host2,host1,host3

block2: host7,host8,host4

原理:namenode具有rackaware機架感知功能,這個可以配置

若client為datanode節點,那儲存block時,規則為:副本1,同client的節點上;副本2,不同機架節點上;副本3,同第二個副本機架的另外乙個節點上;其他副本隨機挑選

若client不為datanode節點,那儲存block時,規則為:副本1,隨機選擇乙個節點;副本2,不同副本1機架上;副本3,同第副本2相同機架的另外乙個節點上;其他副本隨機挑選

d. client向datanode傳送block1,傳送過程是以流式寫入

流式寫入過程:

1>將64m的block1按64k的package劃分;

2>然後將第乙個package傳送給host2;

3>host2接收完後,將第乙個package傳送給host1,同時client向host2傳送第二個package;

4>host1接收完第乙個package後,傳送給host3,同時接收host2發來的第二個package。

5>以此類推,如圖紅線實線所示,直到將block1傳送完畢。

6>host2,host1,host3向namenode,host2向client傳送通知,說「訊息傳送完了」。如圖粉紅顏色實線所示。

7>client收到host2發來的訊息後,向namenode傳送訊息,說我寫完了。這樣就真完成了。如圖黃色粗實線

8>傳送完block1後,再向host7,host8,host4傳送block2,如圖藍色實線所示。

9>傳送完block2後,host7,host8,host4向namenode,host7向client傳送通知,如圖淺綠色實線所示。

10>client向namenode傳送訊息,說我寫完了,如圖黃色粗實線。。。這樣就完畢了。

分析,通過寫過程,我們可以了解到:

①寫1t檔案,我們需要3t的儲存,3t的網路流量頻寬。

②在執行讀或寫的過程中,namenode和datanode通過heartbeat進行儲存通訊,確定datanode活著。如果發現datanode死掉了,就將死掉的datanode上的資料,放到其他節點去。讀取時,要讀其他節點去。

③掛掉乙個節點,沒關係,還有其他節點可以備份;甚至,掛掉某乙個機架,也沒關係;其他機架上,也有備份。

讀操作就簡單一些了,如圖所示,client要從datanode上,讀取filea。而filea由block1和block2組成。

那麼,讀操作流程為:

a. client向namenode傳送讀請求。

b. namenode檢視metadata資訊,返回filea的block的位置。

block1:host2,host1,host3

block2:host7,host8,host4

c. block的位置是有先後順序的,先讀block1,再讀block2。而且block1去host2上讀取;然後block2,去host7上讀取;

上面例子中,client位於機架外,那麼如果client位於機架內某個datanode上,例如,client是host6。那麼讀取的時候,遵循的規律是:

優選讀取本機架上的資料。

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.client發起檔案上傳請求 通過rpc和namenode建立連線,namenode檢查目標檔案是否存在,檢查父目錄是否存在,檢查使用者是否有許可權,返回是否可以上傳 2.client請求第乙個block該傳輸到那些datanode伺服器上 3.namenode根據配置檔案中指定的備份數量及機架...