1.拓扑距离
这里简单讲下hadoop的网络拓扑距离的计算
在大数量的情景中,带宽是稀缺资 源,如何充分利用带宽,完美的计算代价开销以及限制因素都太多。hadoop给出了这样的解决方案:
计算两个节点间的间距,采用 最近距离的节点进行操作,如果你对数据结构比较熟悉的话,可以看出这里是距离测量算法的一个实例。
如果用数据结构表示的话,这里可以表示为tree,两个节点的距离计算就是寻找公共祖先的计算。
在现实情况下比较典型的情景如下,
tree结构的节点由数据中心data center,这里表示为d1 ,d2,机架rack,这里表示为r1,r2,r3,还有服务器节点node,这里表示为n1,n2,n3, n4
1.distance(d1/r1/n1,d1/r1/n1)=0 (相同节点)
2.distance(d1/r1/n1,d1/r1/n2)=2 (相 同机架不同节点)
3.distance(d1/r1/n1,d1/r2/n3)=4 (相同数据中心不同机架)
4.distance(d1/r1/n1,d2/r3/n4)=6 (不同数据中心)
2.副本存放
先来定义一下, namenode节点选择一个datanode节点去存储block副本得过程就叫做副本存放,这个过程的策略其实就是在可 靠性和读写带宽间得权衡。那么我们来看两个极端现象:
1.把所有的副本存放在同一个节点上,写带 宽是保证了,但是这个可靠性是完全假的,一旦这个节点挂掉,数据就全没了,而且跨机架的读带宽也很低。
2.所有副本打散在不同的节点上,可靠性提高了,但是带宽有成了问题。
即使在同一个数据中 心也有很多种副本存放方案,0.17.0版本中提供了一个相对较为均衡的方案,1.x之后副本存放方案已经是可 选的了。
我们来讲下hadoop默认的方案:
1.把第一副本放在和客户端同一个节点上,如果客户 端不在集群中,那么就会随即选一个节点存放。
2.第二个副本会在和第一个副本不同的机架上随机选 一个
3.第三个副本会在第二个副本相同的机架上随机选一个不同的节点
4.剩余的副本就完全随 机节点了。