`
sid1211
  • 浏览: 50896 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop corrupt处理流程

 
阅读更多

 

Datanode block corrupt流程说明

1、 Datanode上有一个线程DataBlockScannerDatanode上面的block进行数据校验,其中该类中最重要的方法是verifyBlock(Block block),在verifyBlock(Block block)方法中利用了BlockSender,其方法是将block读入到一个空设备(IOUtils.NullOutputStream())中,通过读写进行检验。

2、  如果检验失败后handleScanFailure(Block block),通过RPC直接向Namenode汇报存在坏块,即调用NamenodereportBadBlocks(blocks)方法

3、NamenodeFSNamesystem转发调用markBlockAsCorrupt(Block blk,DatanodeInfo dn),经过校验后将该block放置入neededReplications结构中,至此DatanodeNamenode汇报结束

4、  Namenode通过ReplicationMonitor线程,对block出现的问题(excess,neededreplica…)进行处理。该线程调用computeDatanodeWork()方法,该方法首先调用computeReplicationWork()方法。

5、  computeReplicationWork()方法中,从neededReplicaions结构中按照优先级构建出需要复制的block—blocksToReplicate,对每个block调用computeReplicationWorkForBlock()方法

6、  随后调用ReplicationTargetChooser类的chooseTarget去获取目的主机,用于放置block

7、  随后更改6中获得的DatanodeDescriptor的状态,将该block放置入需要replicate的队列中,同时pendingReplications加入该block准备复制

8、  最后修改corruptblock对应的DatanodeDescriptor状态,将该block置入invalidate队列中

9、  再下一次心跳汇报时,会将对应的blockDatanodeCommand的形式,发送给datanode进行处理

 

 

 

注:集群中主机数需要大于相应副本数才会进行复制,对corrupt进行处理,否则第6步找不出目的主机

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics