机房360首页
当前位置:首页 » 技术文库 » 关于Hadoop的NetworkTopology的遇到的一些问题

关于Hadoop的NetworkTopology的遇到的一些问题

来源: 作者: 更新时间:2016/9/6 9:33:39

摘要:我们都知道,Hdfs会根据你配的机架,适当的分配block的分布,AM的也需要相应的机架信息去申请资源,机架信息在DN注册的会执行我们配置的机架感知的脚本,把DN对应到相应的机架当中

  背景问题

  问题是周末,其他团队HBase推数据变慢了,我也跟着一起找问题,现象是新加的节点的网络流量非常大,后来帮哥发现是原来没有配机架的集群,新机器配了机架,既然加了机架导致这个问题,那我们把机架变为没变机架的时候,是否就可以解决这个问题?后来发现已经加的节点无法从已经加入的机架去除,这就要找根本的问题了。

  问题:为什么我更新原有DN的机架信息不生效?

  关于机架

  我们都知道,Hdfs会根据你配的机架,适当的分配block的分布,AM的也需要相应的机架信息去申请资源,机架信息在DN注册的会执行我们配置的机架感知的脚本,把DN对应到相应的机架当中

  * Resolve network locations for specified hosts

  *

  * @param names

  * @return Network locations if available, Else returns null

  */

  public List resolveNetworkLocation(List names) {

  // resolve its network location

  List rName = dnsToSwitchMapping.resolve(names);

  return rName;

  }

  其中,代码中的resolve方法就是调用了ScriptBasedMapping的resolve中的方法,而ScriptBasedMapping是CachedDNSToSwitchMapping的子类,在调用ScriptBasedMapping的resolve方法之前

  @Override

  public List resolve(List names) {

  // normalize all input names to be in the form of IP addresses

  names = NetUtils.normalizeHostNames(names);

  List result = new ArrayList(names.size());

  if (names.isEmpty()) {

  return result;

  }

  List uncachedHosts = getUncachedHosts(names);

  // Resolve the uncached hosts

  List resolvedHosts = rawMapping.resolve(uncachedHosts);

  //cache them

  cacheResolvedHosts(uncachedHosts, resolvedHosts);

  //now look up the entire list in the cache

  return getCachedHosts(names);

  }

  他会检查这个节点是否曾经在Cache中,如果在即使你的机架信息改变了,还是会从Cache中拿第一次的机架信息,所以更改机架信息对已经注册的DN是不生效的。 但对于NetworkTopology来说,当你移除这个机架的最后一个节点的时候,他会相应的把这个机架从NetworkTopology中移除

  解决方案和结论

  结论是机架信息对于新的注册的DN有效,如果你是变更了原有DN的机架信息是不生效的,只会用第一次注册的机架信息

  解决方案:

  如果要实现机架变更后,DN重新注册刷新机架信息也是可以的,只要自己实现DNSToSwitchMapping不加Cache就行了


责任编辑:hang

机房360微信公众号订阅
扫一扫,订阅更多数据中心资讯

本文地址:http://www.jifang360.com/news/201696/n013686585.html 网友评论: 阅读次数:
版权声明:凡本站原创文章,未经授权,禁止转载,否则追究法律责任。
转载声明:凡注明来源的文章其内容和图片均为网上转载,非商业用途,如有侵权请告知,会删除。
相关评论
正在加载评论列表...
评论表单加载中...
  • 我要分享
推荐图片