今天跟小伙伴讨论一下hadoop的机架感知机会,又去刨了一下hadoop源码,初略的知道了hadoop机架感知实现
首先我们都知道hadoop默认会将数据存储三份,存储策略为本地一份,同机架内其它某一节点上一份,不同机架的某一节点上一份。这样如果本地数据损坏,节点可以从同一机架内的相邻节点拿到数据,速度肯定比从跨机架节点上拿数据要快;同时,如果整个机架的网络出现异常,也能保证在其它机架的节点上找到数据。那hadoop是怎么知道集群内机器的拓扑关系的呢??
hadoop集群会缓存了每个host与网络拓扑的关系,如何实现缓存可以通过配置项net.topology.node.switch.mapping.impl来定制,但hadoop自己有一个默认实现org.apache.hadoop.net.ScriptBasedMapping,且hadoop所有解析过的域名都会缓存到org.apache.hadoop.net.CachedDNSToSwitchMapping类中,
具体实现:现在hadoop已经自己的所有节点域名names,需要知道所有的域名的拓扑关系,可以调用 org.apache.hadoop.net.CachedDNSToSwitchMa