了解Hadoop的或多或少都听说过机架感知策略,无论是balancer还是jobtracker分配作业,数据副本放置策略都会用到机架感知。那什么叫机架感知?
首先故名思意机架感知就是感知机架,谁感知?就是hadoop系统嘛,更确切地说是hadoop能在系统内部建立一套服务器和机架的位置拓扑图,并且能识别系统节点的拓扑位置,知道了这些,才能做副本放置策略、作业本地化等更高层的设计。
难道说hadoop系统能自动感应集群或者机房内部的网路拓扑结构?想想看,各个公司的机房拓扑或者网络结构都不一样,采用的设备类型也不相同,hadoop真的那么吊能感受到?显然不能!hadoop系统想获得这个网络拓扑结构,需要系统管理员的帮助。
试想一下,hadoop能构建一幅网络拓扑图,实际的网络拓扑图又千变万化,管理员该怎么弄?所以这时候hadoop有必要设计一套标准的拓扑图结构,管理员需要让实际的网络拓扑结构尽量地与之适配。
有了这些基础想法之后,我们就可以往下进行了。之前看过一段时间datanode的代码,大家都知道datanode在启动的时候有一个向namenode注册的过程,以建立与namenode的上下级关系,也可以认为是拜码头。那就循着这条路线往里看机架感知的原理。DatanodeProtocol定义了注册方法接口
public DatanodeRegistration register(DatanodeRegistration registration ) throws IOException;