blob: 944c8d14812754ad89a62254157f1c330b188b3c [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.mapred;
import java.io.IOException;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.ipc.VersionedProtocol;
import org.apache.hadoop.mapreduce.MRJobConfig;
import org.apache.hadoop.security.KerberosInfo;
/**
* Protocol that a TaskTracker and the central JobTracker use to communicate.
* The JobTracker is the Server, which implements this protocol.
*/
@KerberosInfo(MRJobConfig.JOB_JOBTRACKER_ID)
@InterfaceAudience.Private
@InterfaceStability.Stable
interface InterTrackerProtocol extends VersionedProtocol {
/**
* version 3 introduced to replace
* emitHearbeat/pollForNewTask/pollForTaskWithClosedJob with
* {@link #heartbeat(TaskTrackerStatus, boolean, boolean, boolean, short)}
* version 4 changed TaskReport for HADOOP-549.
* version 5 introduced that removes locateMapOutputs and instead uses
* getTaskCompletionEvents to figure finished maps and fetch the outputs
* version 6 adds maxTasks to TaskTrackerStatus for HADOOP-1245
* version 7 replaces maxTasks by maxMapTasks and maxReduceTasks in
* TaskTrackerStatus for HADOOP-1274
* Version 8: HeartbeatResponse is added with the next heartbeat interval.
* version 9 changes the counter representation for HADOOP-2248
* version 10 changes the TaskStatus representation for HADOOP-2208
* version 11 changes string to JobID in getTaskCompletionEvents().
* version 12 changes the counters representation for HADOOP-1915
* version 13 added call getBuildVersion() for HADOOP-236
* Version 14: replaced getFilesystemName with getSystemDir for HADOOP-3135
* Version 15: Changed format of Task and TaskStatus for HADOOP-153
* Version 16: adds ResourceStatus to TaskTrackerStatus for HADOOP-3759
* Version 17: Changed format of Task and TaskStatus for HADOOP-3150
* Version 18: Changed status message due to changes in TaskStatus
* Version 19: Changed heartbeat to piggyback JobTracker restart information
so that the TaskTracker can synchronize itself.
* Version 20: Changed status message due to changes in TaskStatus
* (HADOOP-4232)
* Version 21: Changed information reported in TaskTrackerStatus'
* ResourceStatus and the corresponding accessor methods
* (HADOOP-4035)
* Version 22: Replaced parameter 'initialContact' with 'restarted'
* in heartbeat method (HADOOP-4305)
* Version 23: Added parameter 'initialContact' again in heartbeat method
* (HADOOP-4869)
* Version 24: Changed format of Task and TaskStatus for HADOOP-4759
* Version 25: JobIDs are passed in response to JobTracker restart
* Version 26: Modified TaskID to be aware of the new TaskTypes
* Version 27: Added numRequiredSlots to TaskStatus for MAPREDUCE-516
* Version 28: Adding node health status to TaskStatus for MAPREDUCE-211
* Version 29: Adding user name to the serialized Task for use by TT.
* Version 30: Adding available memory and CPU usage information on TT to
* TaskTrackerStatus for MAPREDUCE-1218
*/
public static final long versionID = 30L;
public final static int TRACKERS_OK = 0;
public final static int UNKNOWN_TASKTRACKER = 1;
/**
* Called regularly by the {@link TaskTracker} to update the status of its
* tasks within the job tracker. {@link JobTracker} responds with a
* {@link HeartbeatResponse} that directs the
* {@link TaskTracker} to undertake a series of 'actions'
* (see {@link org.apache.hadoop.mapred.TaskTrackerAction.ActionType}).
*
* {@link TaskTracker} must also indicate whether this is the first
* interaction (since state refresh) and acknowledge the last response
* it recieved from the {@link JobTracker}
*
* @param status the status update
* @param restarted <code>true</code> if the process has just started or
* restarted, <code>false</code> otherwise
* @param initialContact <code>true</code> if this is first interaction since
* 'refresh', <code>false</code> otherwise.
* @param acceptNewTasks <code>true</code> if the {@link TaskTracker} is
* ready to accept new tasks to run.
* @param responseId the last responseId successfully acted upon by the
* {@link TaskTracker}.
* @return a {@link org.apache.hadoop.mapred.HeartbeatResponse} with
* fresh instructions.
*/
HeartbeatResponse heartbeat(TaskTrackerStatus status,
boolean restarted,
boolean initialContact,
boolean acceptNewTasks,
short responseId)
throws IOException;
/**
* The task tracker calls this once, to discern where it can find
* files referred to by the JobTracker
*/
public String getFilesystemName() throws IOException;
/**
* Report a problem to the job tracker.
* @param taskTracker the name of the task tracker
* @param errorClass the kind of error (eg. the class that was thrown)
* @param errorMessage the human readable error message
* @throws IOException if there was a problem in communication or on the
* remote side
*/
public void reportTaskTrackerError(String taskTracker,
String errorClass,
String errorMessage) throws IOException;
/**
* Get task completion events for the jobid, starting from fromEventId.
* Returns empty aray if no events are available.
* @param jobid job id
* @param fromEventId event id to start from.
* @param maxEvents the max number of events we want to look at
* @return array of task completion events.
* @throws IOException
*/
TaskCompletionEvent[] getTaskCompletionEvents(JobID jobid, int fromEventId
, int maxEvents) throws IOException;
/**
* Grab the jobtracker system directory path where job-specific files are to be placed.
*
* @return the system directory where job-specific files are to be placed.
*/
public String getSystemDir();
/**
* Returns the buildVersion of the JobTracker
*/
public String getBuildVersion() throws IOException;
}