HDFS1.0源代码解析—DataNode启动(三)

11 篇文章 0 订阅
10 篇文章 0 订阅
本文深入解析HDFS1.0中DataNode的processCommand方法,涵盖DNA_TRANSFER、DNA_INVALIDATE、DNA_SHUTDOWN等指令的处理流程,涉及数据传输、节点注册、版本升级等关键操作。
摘要由CSDN通过智能技术生成

接下来看一下 processCommand(cmd),NameNode会返回那些指令,DataNode响应的动作。

  final static int DNA_UNKNOWN = 0;    // unknown action
  final static int DNA_TRANSFER = 1;   // transfer blocks to another datanode,在DataNode之间进行数据传输
  final static int DNA_INVALIDATE = 2; // invalidate blocks,删除已经无效的数据
  final static int DNA_SHUTDOWN = 3;   // shutdown node,关闭DataNode
  final static int DNA_REGISTER = 4;   // re-register,DataNode向NameNode进行注册
  final static int DNA_FINALIZE = 5;   // finalize previous upgrade,提交已经完成的Update
  final static int DNA_RECOVERBLOCK = 6;  // request a block recovery,恢复一个block
  final static int DNA_ACCESSKEYUPDATE = 7;  // update access key,更新access key
  final static int DNA_BALANCERBANDWIDTHUPDATE = 8; // update balancer bandwidth

具体的处理流程如下:

1、 case DatanodeProtocol.DNA_TRANSFER:

如果是DataNode之间传输数据,首选检查传输的块是否存在或者是否是处于创建的过程中,如果是想NN(NameNode)报告错误 notifyNamenode(DatanodeProtocol.INVALID_BLOCK, errStr);并返回。下一步判断DN上的真实数据大小是否小于NN记录的数据大小,如果是说明DN上记录的数据出现了问题,想NN报告错误,  namenode.reportBadBlocks(....);并返回。最后启动一个专门用于DN之间数据传输的线程,new Daemon(new DataTransfer(xferTargets, block, this)).start();定义该线程的类是包含在DN类中的,后便的日志会单独进行介绍。

2、case DatanodeProtocol.DNA_INVALIDATE:

删除DN上的无效数据。

  if (blockScanner != null) {
          blockScanner.deleteBlocks(toDelete);
        }
如果blockScanner存在,通知它 不要再扫描这些要删除的数据块,从磁盘上删除数据具体执行在 data.invalidate(toDelete);FSDataset中会进行介绍具体的过程。

3、 case DatanodeProtocol.DNA_SHUTDOWN:

当前的DataNode停止运行。该过程需要停止一系列的线程,包括httpserver、DN之间传输数据的ipcserver、client和DN之间传输数据的dataXceiverServer、 blockScannerThread、dataNodeThread等等。

4、case DatanodeProtocol.DNA_REGISTER:

如果NN失去了DN的数据要求DN进行重新连接。

5、 case DatanodeProtocol.DNA_FINALIZE:

版本升级结束。

6、 case UpgradeCommand.UC_ACTION_START_UPGRADE:

不太明白

7、case DatanodeProtocol.DNA_RECOVERBLOCK

有点晕没搞太清楚,待续。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值