通过本文可以获得如下知识点: ① 写editlog的调用链路,从namenode侧->journal侧方法调用链路图。 ② journal RPC源码解析 ③ sendEdits源码、waitForWriteQuorum源码等细节。
一、QJournalProtocol RPC接口简介
此接口是QuorumJournalManager和每个JournalNode之间通信的协议,主要负责发送editlog,协调journal node节点的恢复。
1.1 写editlog的调用链路
当我们对HDFS的FSNamesystem做出了修改时,就会产生一条editlog记录这次修改。由于HDFS的HA(高可用)特性,不光要在Active NN本地写editlog文件,还要写journal node(JN)。我用一幅图总结出了写editlog的调用链路,如下图所示:
JournalSetOutputStream类是EditLogOutputStream的子类, 在JournalSetOutputStream对象上调用的所有EditLogOutputStream接口方法都会被转到FSEditLog.journalSet字段中保存的editlog文件在所有存储位置上的输出流对象(通过调用mapJournalsAndReportErrors()方法实现) 。
FSEditLog的editLogStream字段就是JournalSetOutputStream类型的(是在startLogSegme
|