asfsd 发表于 2016-12-12 06:25:51

Hadoop源代码分析(一六)

  通过上面的讨论,DataNode上的读/写流程已经基本清楚了。我们来看下一个非主流流程,
  DataBlockScanner用于定时对数据块文件进行校验。类图如下:
  http://caibinbupt.iyunv.com/upload/attachment/56100/81d7352b-c231-35b0-a15c-78fd427a8c6e.jpg
  

  DataBlockScanner拥有它单独的线程,能定时地从目前DataNode管理的数据块文件进行校验。其实最重要的方法就是verifyBlock,我们来看这个方法最关键的地方:

  

blockSender = new BlockSender(block, 0, -1, false, false, true, datanode);
DataOutputStream out = new DataOutputStream(new IOUtils.NullOutputStream());
blockSender.sendBlock(out, null, throttler);
  校验利用了BlockSender,因为我们知道BlockSender中,发送数据的同时,会对数据进行校验。verifyBlock只需要读一个Block到一个空输出设备(NullOutputStream),如果有异常,那么校验失败,如果正常,校验成功。


  

  DataBlockScanner其他的辅助方法用于对DataBlockScanner管理的数据块文件信息进行增加/删除,排序操作。同时,校验的信息还会保持在Storage上,保存在dncp_block_verification.log.curr和dncp_block_verification.log.prev中。
页: [1]
查看完整版本: Hadoop源代码分析(一六)