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

