NetworkTopology是网络拓扑的意思,这在网络架构中运用很多,机器的各种部署等等。hadoop的DataNode也是分布在各个节点设置各个不同的机架上的,所以数据的读取必然会联系到网络的拓扑结构。NetworkTopology类很简单,就是对一棵树进行各种操作,下面主要分析一下该类中InnerNode内部类的 getLeaf方法,代码如下:
该类的两个参数说明:
leafIndex就是我们需要从这个InnerNode下获取的那个节点的下标,excludeNode是我们指定的不参与该搜索的那个节点,当然你也可以将该参数传递null即所搜全部节点。
代码一开始检查excludeNode是否是叶子节点,这里叶子节点的判定条件是excludeNode为null或者excludeNode不是内部节点,InnerNode是NetworkTopology的一个内部类,代表一个机架上的一个交换机或者路由,所以它肯定是有子节点的,否则这个交换机或者路由的存在是没有必要的。
接下来numOfExcludedLeaves表示excludeNode包含的子节点数量,如果excludeNode本身就是一个子节点那么该值自然为1,如果不是子节点则该值为它本身的子节点数量。
接下来的isLeafParent()方法判断所搜索的这个InnerNode下的节点是否都为叶子节点。