client 向 Active NN 發送寫請求時,NN爲這些數據分配DN地址,HDFS文件塊副本的放置對於系統總體的可靠性和性能有關鍵性影響。一個簡單但非優化的副本放置策略是,把副本分別放在不一樣機架,甚至不一樣IDC,這樣能夠防止整個機架、甚至整個IDC崩潰帶來的錯誤,可是這樣文件寫必須在多個機架之間、甚至IDC之間傳輸,增長了副本寫的代價,是否有較優的方案來解決這個問題呢?node
目錄:apache
經常使用策略:vim
機架配置:網絡
[network_topology] hdp2=/rack1 192.168.2.2=/rack2 hdp3=/rack2 192.168.2.99=/rack1
手工修改配置文件,重啓服務後修改內容會被沖掉,因此用咱們在 ambaria 上去修改,選擇 "host" -> "Action" -> "Selected hosts" -> "hosts" --> "set Rack" 修改每臺host對應的rack, 保存修改,重啓因修改配置而受影響的組件服務,成功後示例以下,這時再去看 topology_mappings.data 的內容已經修改爲功:app
分配原理:oop
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
寫文件時根據策略輸入 dn 節點列表,讀文件時按與client由近到遠距離返回 dn 列表性能