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(", "); }
[*] if (showRacks)
[*] sb.append(NodeBase.getPath(locs));
[*]
[*] else
[*] sb.append(locs);
[*] }
[*] sb.append(']');
[*] report.append(" " + sb.toString());
[*] }
[*] }
通过上面的代码,我们不难发现 这个时候坏块的位置信息已经丢失了。
看到这里,我想我们都想问同一个问题,hadoop什么时候去更新的 这成对应关系的?
带这这个疑问,不断的问谷哥 问度娘,遗憾的是到目前为止 还没有一个好的解决方案值得庆幸的是,在这个过程中 阅读到很多不错的资料。并做大致整理
如果你也有同样的需求,希望可以给你带去一些帮助。如果大侠有好的解决方案,记得告诉小弟。
xdataopenの邦
页:
[1]