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 列表性能