lilingjie2015 发表于 2018-11-1 08:28:18

hadoop-namenode启动过程及坏块处理流程

  初衷是当hadoop集群出现坏块时,能定位到它在某个节点上。进而通过坏块出现的频率来分析节点的健康状况。一开始想到了fsck 命令 ,纠结的是fsck只能检测到健康的块的准确位置。随后阅读fsck的实现代码发现,如果一个块有三个健康的副本 这里取得的 locs.length=3   可以得到每个块的所在节点的位置。
  


[*]if (locs.length == 0) {
[*]       report.append(" MISSING!");
[*]       res.addMissing(block.toString(), block.getNumBytes());
[*]       missing++;
[*]       missize += block.getNumBytes();
[*]   } else {
[*]       report.append(" repl=" + locs.length);
[*]       if (showLocations || showRacks) {
[*]         StringBuffer sb = new StringBuffer("[");
[*]         for (int j = 0; j < locs.length; j++) {
[*]         if (j > 0) { sb.append(&quot;, &quot;); }
[*]         if (showRacks)
[*]             sb.append(NodeBase.getPath(locs));
[*]
[*]         else
[*]             sb.append(locs);
[*]         }
[*]         sb.append(']');
[*]         report.append(&quot; &quot; + sb.toString());
[*]       }
[*]   }
  

  通过上面的代码,我们不难发现 这个时候坏块的位置信息已经丢失了。
  

  看到这里,我想我们都想问同一个问题,hadoop什么时候去更新的 这成对应关系的?
  带这这个疑问,不断的问谷哥 问度娘,遗憾的是到目前为止 还没有一个好的解决方案值得庆幸的是,在这个过程中 阅读到很多不错的资料。并做大致整理
  如果你也有同样的需求,希望可以给你带去一些帮助。如果大侠有好的解决方案,记得告诉小弟。
  xdataopenの邦


页: [1]
查看完整版本: hadoop-namenode启动过程及坏块处理流程