三、Tasktracker、Jobtracker心跳源码分析
同样我们从Tasktracker入手,下面贴出Tasktracker.class的关键代码:
代码四:
- 代码一:
- State offerService() throws Exception {
- long lastHeartbeat = System.currentTimeMillis();
- while (running && !shuttingDown) {
- •••
-
-
- HeartbeatResponse heartbeatResponse = transmitHeartBeat(now);
-
- •••
- return State.NORMAL;
- }
-
- 代码二:
- HeartbeatResponse transmitHeartBeat(long now) throws IOException {
- •••
- HeartbeatResponse heartbeatResponse = jobClient.heartbeat(status,
- justStarted,
- justInited,
- askForNewTask,
- heartbeatResponseId);
- •••
- return heartbeatResponse;
- }
|
其实我觉得分析到这里大家就可以自己分析了,jobClient也是一个协议:
代码五:
InterTrackerProtocol jobClient; |
该协议用于定义Tasktracker和Jobtracker的通信。同样,它也是一个代理对象:
代码六:
- this.jobClient = (InterTrackerProtocol)
- UserGroupInformation.getLoginUser().doAs(
- new PrivilegedExceptionAction<Object>() {
- public Object run() throws IOException {
- return RPC.waitForProxy(InterTrackerProtocol.class,
- InterTrackerProtocol.versionID,
- jobTrackAddr, fConf);
- }
- });
|
终于,hadoop底层通信整个系列的源码分析全部完成了。我可以好好地复习学校的功课了。呵呵。