NM协议详解 (#26)

Reviewed-on: #26
Co-authored-by: zeekling <lingzhaohui@zeekling.cn>
Co-committed-by: zeekling <lingzhaohui@zeekling.cn>
This commit is contained in:
LingZhaoHui 2024-05-25 15:11:39 +00:00 committed by LingZhaoHui
parent b5700d9100
commit f3917672d1

View File

@ -0,0 +1,56 @@
## NameNode客户端协议详解
协议的定义主要在类NamenodeProtocols中。如下
```java
public interface NamenodeProtocols
extends ClientProtocol,
DatanodeProtocol,
DatanodeLifelineProtocol,
NamenodeProtocol,
RefreshAuthorizationPolicyProtocol,
ReconfigurationProtocol,
RefreshUserMappingsProtocol,
RefreshCallQueueProtocol,
GenericRefreshProtocol,
GetUserMappingsProtocol,
HAServiceProtocol {
}
```
根据交互对象的不同,将协议进行了不同的归类。要想了解协议内容,需要将其单独分开分析。
### NamenodeProtocol 详解
```java
BlocksWithLocations getBlocks(DatanodeInfo datanode, long size, long
minBlockSize) throws IOException;
```
当前协议主要是备NameNode和主NameNode之间的通信协议。
获取指定DataNode中的块信息。
- size 请求的块数量。
- minBlockSize 查询的block块需要小于当前值。
```java
public ExportedBlockKeys getBlockKeys() throws IOException;
```
获取NameNode产生的所有的blockkey信息。blockKey是由BlockTokenSecretManager产生的BlockTokenSecretManager有两种模式master模式和worker模式。
master主要产生token并且将token导入给workers。master和worker都可以校验token。一般情况下NN是master模式DN是worker模式。主要用于加密。
```java
public long getTransactionID() throws IOException;
```
获取最新的事务ID。
### DatanodeProtocol
DataNode和NameNode之间的协议。
### DatanodeLifelineProtocol
DN和NN之间心跳协议。