HDFS副本放置策略和機架感知


副本放置策略

的副本放置策略的基本思想是:
第一block在復制和client哪里node於(假設client它不是群集的范圍內,則這第一個node是隨機選取的。當然系統會嘗試不選擇哪些太滿或者太忙的node)。
第二個副本放置在與第一個節點不同的機架中的node中(隨機選擇)。
第三個副本和第二個在同一個機架,隨機放在不同的node中。
假設還有很多其它的副本就隨機放在集群的node里。

Hadoop的副本放置策略在可靠性(block在不同的機架)和帶寬(一個管道僅僅須要穿越一個網絡節點)中做了一個非常好的平衡。

下圖是備份參數是3的情況下一個管道的三個datanode的分布情況。


流水線復制

當client向 HDFS 文件寫入數據的時候。一開始是寫到本地暫時文件里。


假設該文件的副本系數設置為 3 ,當本地暫時文件累積到一個數據塊的大小時,client會從 Namenode 獲取一個 Datanode 列表用於存放副本。然后client開始向第一個Datanode數據傳輸,第一個 Datanode 一小部分一小部分 (4 KB) 地接收數據,將每一部分寫入本地倉庫。並同一時候傳輸該部分到列表中第二個 Datanode 節點。第二個 Datanode 也是這樣,一小部分一小部分地接收數據,寫入本地倉庫。並同一時候傳給第三個 Datanode 。

最后,第三個 Datanode 接收數據並存儲在本地。因此,Datanode 能流水線式地從前一個節點接收數據。並同一時候轉發給下一個節點,數據以流水線的方式從前一個Datanode拷貝到下一個Datanode。

機架感知

大型Hadoop集群以機架的形式來組織的,同一個機架上不同節點間的網絡狀況比不同機架之間更為理想。另外,NameNode設法將數據塊副本保存在不同的機架上以提高容錯性。

網絡拓撲

有了機架感知。NameNode就能夠畫出上圖所看到的的datanode網絡拓撲圖。D1,R1都是交換機,最底層是datanode。
則H1的rackid=/D1/R1/H1,H1的parent是R1,R1的parent是D1。這些rackid信息能夠通過topology.script.file.name配置。有了這些rackid信息就能夠計算出隨意兩台datanode之間的距離。

distance(/D1/R1/H1,/D1/R1/H1)=0 同樣的datanode
distance(/D1/R1/H1,/D1/R1/H2)=2 同一rack下的不同datanode
distance(/D1/R1/H1,/D1/R1/H4)=4 同一IDC下的不同datanode
distance(/D1/R1/H1,/D2/R3/H7)=6 不同IDC下的datanode

注意:
1)當沒有配置機架信息時,全部的機器Hadoop都默認在同一個默認的
機架下,以名為”/default-rack”。這樣的情況下,不論什么一台datanode機器,無論物理上是否屬於同一個機架。都會被覺得是在同一個機架下。


2)一旦配置topology.script.file.name。就依照網絡拓撲結構來尋找datanode。topology.script.file.name這個配置選項的value指定為一個可運行程序。通常為一個腳本。

版權聲明:本文博客原創文章,博客,未經同意,不得轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM