client 向 Active NN 发送写请求时,NN为这些数据分配DN地址,HDFS文件块副本的放置对于系统整体的可靠性和性能有关键性影响。一个简单但非优化的副本放置策略是,把副本分别放在不同机架,甚至不同IDC,这样可以防止整个机架、甚至整个IDC崩溃带来的错误,但是这样文件写必须在多个机架之间、甚至IDC之间传输,增加了副本写的代价,是否有较优的方案来解决这个问题呢?
目录:
常用策略
机架配置
分配原理
常用策略:
hdfs 在缺省配置下副本数是3个,通常的策略是:
第一个副本放在和Client相同机架的Node里(如果Client不在集群范围,第一个Node是随机选取不太满或者不太忙的Node)
第二个副本放在与第一个Node不同的机架中的Node
第三个副本放在与第二个Node所在机架里不同的Node. 示例图如下:
机架配置:
分配原理:
有了机架感知,NameNode就可以画出下图所示的datanode网络拓扑图,
最底层是Hx是 datanode, 则H1的rackid=/D1/R1/H1,H1的parent是R1,R1的是D1,有了这些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
写文件时根据策略输入 dn 节点列表,读文件时按与client由近到远距离返回 dn 列表
下面关于Hadoop的文章您也可能喜欢,不妨看看:
Ubuntu14.04下Hadoop2.4.1单机/伪分布式安装配置教程
CentOS安装和配置Hadoop2.2.0