HDFS的機架感知策略

山有木xi發表於2020-06-15

通常來說大型的Hadoop叢集是以機架的形式來組織的他們分佈在不同的機架上面,同一個機架節點往往透過同一個網路交換機連線,在網路寬頻方面比跨機架通訊有較大優勢。但是如果某一個檔案資料庫同時儲存在同一個機架上面時,可能由於各種故障原因,導致檔案不可用。HDFS採用機架感知策略來改進資料的可靠性、可用性和網路寬度的利用率。

透過機架感知的過程,NameNode可以確定每一個 DataNode所屬的機架id。一個簡單但沒有最佳化的策略就是將副本存放在不同的機架上,這樣可以防止當整個機架失效時資料的丟失,並且允許讀資料的時候充分利用多個機架的頻寬。這種策略設定可以將副本均勻分佈在叢集中,有利於當元件失效的情況下的均勻負載。

也就是說, HDFS系統的機架感知策略的優勢是防止由於某個機架失效導致資料丟失,並且允許讀取資料時充分利用多個機架的頻寬。HDFS會盡量讓讀取任務去讀取距離客戶端最近的副本資料來減少整體頻寬消耗,從而實現降低整體的頻寬延時。

對於副本距離的計算公式,HDFS採用如下約定:

  • Distance(Rack 1/D1 Rack1/D1)=0 //同一臺伺服器的距離為0

  • Distance(Rack 1/D1 Rack1/D3)=2 //通機架不同伺服器的距離為2

  • Distance(Rack 1/D1 Rack2/D1)=4 //不同機架伺服器距離為4

通常而言,一個Rack共享一個電源,一條網線,一個交換機,HDFS備份通常在同一個Rack上儲存一份,在另外一個Rack上儲存兩份(另外:HDFS以block為單位,備份也要以block為單位)

透過機架感知,處於工作狀態的HDFS總是設法確保資料塊的三個副本(或者更多)中至少有兩個在同一機架,至少有一個處在不同機架

而HDFS為每一個block存三份的話,那麼client如何來寫入呢?

當client 寫檔案建立新block之後,Name node會為這個block 建立一整個HDFS cluster 裡獨有的ID,並且決定哪些Data node來儲存這個block的所有備份。被選擇到的Data node會組成一個佇列,client 向佇列的第一個Data node 寫入,第一個Data node除了把資料存在自己的硬碟上以外,還要把資料傳給佇列裡的下一個Data node,直到最後一個Data node接到資料完畢

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2698442/,如需轉載,請註明出處,否則將追究法律責任。

相關文章