|
Hadoop 2.0中存在两个ipc包, 分别为hadoop RPC和新的YarnRPC, 本文简要描述了两种RPC.
Hadoop 2.0中存在两个ipc包, 分别在hadoop-common和hadoop-yarncommon项目下. 分别为hadoop RPC和新的YarnRPC.
1. 使用hadoop ipc包的协议
原有的协议
协议名
| 客户端
| 服务端
| 主要方法
| ClientProtocol
| Client
| Namenode
| | DatanodeProtocol
| DN
| NN
| | NamenodeProtocol
| SNN
| NN
| | RefreshAuthorizationPolicyProtocol
| Client
| NN
| | RefreshUserMappingsProtocol
| Client
| NN
| | GetUserMappingsProtocol
| Client
| NN
| | TaskUmbilicalProtocol
| YarnChild(运行task的containner)
| AM
| 状态更新, 获取map结束事件等
| 2. 使用YarnRPC的协议
这些都是用在yarn上的协议, 并且都是0.23开始新增的协议.
协议名
| 客户端
| 服务端
| 主要方法
| ClientRMProtocol
| Client
| RM
| 提交,查询,kill AM等
| AMRMProtocol
| AM
| RM
| 注册, 结束AM, 请求资源
| ContainerManager
| AM
| NM
| 启动, 停止, 查询 container
| RMAdminProtocol
| Client
| RM
| 刷新node, queu, acl等
|
HSClientProtocol
| Client
| HistoryServer
| 继承于MRClientProtocol
| MRClientProtocol
| Client
| AM
| 获取job/task信息, kill job/task等
| 下图显示了yarn中各个进程使用的协议.
3. 为什么要新增YarnRPC呢
事实上, YarnRPC只是封装了hadoop-common的ipc, 最终还是使用了hadoop-common的ipc包, 包括server和client, 所以底层的网络通信方法是一样的.
新增的协议都使用了YarnRPC包,
至于底层使用何种序列化方式, 可以通过配置决定:
yarnRPC的底层序列化方式: yarn. ipc. serializer.type 默认为protocolbuffers
hadoop-common RPC的序列化方式: rpc.engine.( protocol.getName()) 默认为WritableRpcEngine |
|
|