namenode :执行NN RPC调用的对象。
data :DN上管理存储数据结构的对象,对于FSDataset后面会继续讨论。dnRegistration :存储NN需要的所有的DN的信息。
receivedBlockList :记录DN接受到的数据块的链表,通过该数据结构向NN报告接收到的block的信息
ongoingRecovery:记录正在进行recovery的block
delHints :receivedBlockList 的副本,暂时没有弄清楚使用两个相同链表的原因
myMetrics:记录DN的运行过程中的一些信息。dataNodeThread :DN的主线程。
dataXceiverServer:DN上接受数据的线程
threadGroup :建立一个线程组,主要管理dataXceiverServer和recoverBlocks的线程,有针对线程组的函数,方便对多个线程进行操作。
blockScanner与blockScannerThread:对DN上的block进行扫描处理,具体见BlockScanner类的介绍
ipcServer:管理不同DN之间进行数据传输
2、主要的成员函数:
从NN获取version和id的信息。该函数负责在DN直接进行数据传输,首先进行检查,确保传输的数据正确后,启动一个专门的线程进行传输。该线程后边会进行专门的介绍。
函数名容易让人产生歧义,其实该函数做的只是见添加的block加入到数据结构receivedBlockList中,在后续的函数中会根据receivedBlockList决定是否通知NN。 该函数一直执行直到shouldRun变为false,在循环中一直调用offerService函数,在出现任何异常的情况下都最大可能的提供服务,就是不断的与NN就行交互,发送心跳、接受到block的情况等。 该方法暂时还是没有看明白。<pre 剩余的其他方法都是简单方法,不再一一介绍。 二、辅助类 DataTransferDataTransfer是一个线程类,负责进行DN之间的数据传输。主要流程跟client与DN之间的传输类似,先建立连接,发送元信息(需要发送到几个DN等等),最后发送数据内容。
三、辅助类BlockRecord
该类的作用只是定义一种数据类型,用于blockrecovery,好吧这个过程我还没有搞清楚。至此整个DataNode类终于纠结完了,虽然还有一些地方不清楚,欢迎大家讨论。