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

本文解析了Hadoop中DataNode接收到的不同指令及其处理流程,包括数据传输、无效数据删除、节点关闭等操作,并详细介绍了每个指令的具体执行步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接下来看一下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、付费专栏及课程。

余额充值