HDFS儲存的機制之HDFS讀寫流程

2021-10-05 17:18:09 字數 2770 閱讀 4133

(7步)

1.hdfs提供的客戶端client,向遠端的namenode發起rpc請求。

2.namenode會檢查要建立的檔案是否已經存在,建立者是否有許可權進行操作。

成功則會檔案建立乙個記錄,否則會讓客戶端丟擲異常。

3.(a)當客戶端client開始寫入檔案的時候,客戶端會將檔案切分成多個packets,並在內部以資料佇列「data queue"形式管理這些packets。

(b)然後客戶端client向namenode申請blocks,並獲取用來儲存replications的合適的datanode列表。

namenode記錄資料位置資訊(元資料),告訴client存哪。

列表的大小根據namenode中的replication值而定。

4.開始以pipeline的形式將所有packet按副本數replications寫入。

客戶端client把packet以流的方式寫入第乙個datanode,該datanode把該packet儲存之後,再將其傳遞給在此pipeline的下乙個datanode,直到最後乙個datanode(這幾個datanode是packets的副本存放節點),這種寫資料的方式呈流水線形式。

5.(a)最後乙個datanode(最後乙個packet副本)成功儲存之後會返回乙個ack packet(確認佇列),通過pipeline傳遞給客戶端client。

(b)在客戶端的開發庫內部維護著「ack queue」,客戶端client成功收到datanode返回的ack packet後會從「ack queue」移除相應的 packet。

(乙個pipeline是針對乙個block的,如圖2中第5步建立傳輸通道所示) 6.

如果傳輸過程中, 有某個datanode出現了故障, 那麼當前的pipeline會被關閉(應該是針對該故障datanode會關閉), 出現故障的datanode會從當前的pipeline中移除。

剩餘的block會繼續以pipeline的形式傳輸,同時namenode會分配乙個新的datanode, 保持replications設定的數量。

7.客戶端完成資料的寫入後,會對資料流呼叫close(),關閉資料流。

namenode將元資料同步到記憶體中。

只要寫入了dfs.replication.min的複本數( 預設為1),寫操作就會成功, 並且這個塊可以在集群中非同步複製, 直到達到其目標複本數(replication的預設值為3),因為namenode已經知道檔案由哪些塊組成, 所以它在返回成功前只需要等待資料塊進行最小量的複製。

(5步)

1.客戶端(client)首先呼叫filesystem的open()函式開啟它想要開啟的檔案。

(對於hdfs來說就是通過distributedfilesystem例項通過rpc呼叫請求元資料節點,得到組成檔案的前幾個資料塊資訊)

對於每乙個資料塊,元資料節點返回儲存資料塊的datanode位址(是分批次獲取的,每次是幾個資料塊)這些datanode會按照與客戶端的接近度(距離)來排序。

(如果客戶端節點自己就是存放了目標資料塊的datanode,就優先從本節點讀取) 2.

distributedfilesystem返回fsdatainputstream(支援檔案seek的輸入流)給客戶端,客戶端就能從流中讀取資料了,fsdatainputstream中封裝了乙個管理了datanode與namenode io的dfsinputstream。

3.客戶端呼叫read()方法開始讀取資料,儲存了檔案前幾個塊的位址的dfsinputstream,就會鏈結儲存了第乙個塊的第乙個(最近的)datanode,然後dfsinputstream就通過重複呼叫read()方法,資料就從datanode流向了客戶端。

當該datanode中最後乙個快的讀取完成了,dfsinputstream會關閉與datanode的連線,然後為下一塊尋找最佳節點。

(這個過程對客戶端是透明的,在客戶端那邊就像是讀取了乙個連續不斷的流) 4.

塊是順序讀取的,通過dfsinputstream在datanode上開啟新的連線去作為客戶端讀取流,同樣它也會請求namenode來獲取下一批所需要的塊所在的datanode位址。

當客戶端完成了讀取就在fsdatainpustream上呼叫close()方法結束整個流程。

5.在讀取過程中,如果fsdatainputstream在和乙個datanode進行交流時出現了乙個錯誤,它就去試一試下乙個最接近的塊,同時也會記住剛才發生錯誤的datanode,之後便不會再在這個datanode上進行沒必要的嘗試。

dfsinputstream 也會在 datanode 上傳輸出的資料上核查檢查數(checknums)。

如果損壞的塊被發現了,dfsinputstream 就試圖從另乙個擁有備份的 datanode 中去讀取備份塊中的資料。

在這個設計中乙個重要的方面是客戶端直接從datanode上檢索資料,並通過namenode指導來得到每乙個塊的最佳datanode。這種設計hdfs拓展大量的併發客戶端,因為資料傳輸只是與集群上的所有datanode展開,namenode僅僅只需要服務於獲取塊位置的請求。而塊位置資訊是存放在記憶體中,所以效率很高,如果不這樣設計,隨著客戶端資料量的增加,資料服務就會很快成為乙個瓶頸 。

HDFS 的工作機制 讀操作

1 client 向 namenode 發起 rpc 請求,來確定請求檔案 block 所在的位置 2 namenode會視情況返回檔案的部分或者全部block列表,對於每個block,namenode 都會返回含有該 block 副本的 datanode 位址 3 這些返回的 dn 位址,會按照集...

Hadoop中HDFS的儲存機制

hadoop中hdfs的儲存機制 hdfs hadoop distributed file system 是hadoop分布式計算中的資料儲存系統,是基於流資料模式訪問和處理超大檔案的需求而開發的。下面我們首先介紹hdfs中的一些基礎概念,然後介紹hdfs中讀寫操作的過程,最後分析了hdfs的優缺點...

Hadoop中的HDFS的儲存機制

hadoop中hdfs的儲存機制 hdfs hadoop distributed file system 是hadoop分布式計算中的資料儲存系統,是基於流資料模式訪問和處理超大檔案的需求而開發的。下面我們首先介紹hdfs中的一些基礎概念,然後介紹hdfs中讀寫操作的過程,最後分析了hdfs的優缺點...