apache/hadoop · error · YarnRuntimeException
Unrecognized status: {}
Error message
Unrecognized status: {} What it means
TypeConverter.fromYarn(TaskCompletionEventStatus) translates MRv2 completion-event statuses (FAILED, KILLED, OBSOLETE, SUCCEEDED, TIPFAILED) into the classic TaskCompletionEvent.Status; an unmapped constant falls through to YarnRuntimeException. TIPFAILED exists precisely because MRv2 can report whole-tip failure, so older statuses map cleanly — only genuinely new constants miss.
Source
Thrown at hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/TypeConverter.java:228
fromYarn(newEvent.getStatus()),
newEvent.getMapOutputServerAddress());
}
public static TaskCompletionEvent.Status fromYarn(
TaskAttemptCompletionEventStatus newStatus) {
switch (newStatus) {
case FAILED:
return TaskCompletionEvent.Status.FAILED;
case KILLED:
return TaskCompletionEvent.Status.KILLED;
case OBSOLETE:
return TaskCompletionEvent.Status.OBSOLETE;
case SUCCEEDED:
return TaskCompletionEvent.Status.SUCCEEDED;
case TIPFAILED:
return TaskCompletionEvent.Status.TIPFAILED;
}
throw new YarnRuntimeException("Unrecognized status: " + newStatus);
}
public static org.apache.hadoop.mapred.TaskAttemptID fromYarn(
TaskAttemptId id) {
return new org.apache.hadoop.mapred.TaskAttemptID(fromYarn(id.getTaskId()),
id.getId());
}
public static TaskAttemptId toYarn(
org.apache.hadoop.mapred.TaskAttemptID id) {
TaskAttemptId taskAttemptId = recordFactory.newRecordInstance(TaskAttemptId.class);
taskAttemptId.setTaskId(toYarn(id.getTaskID()));
taskAttemptId.setId(id.getId());
return taskAttemptId;
}
public static TaskAttemptId toYarn(
org.apache.hadoop.mapreduce.TaskAttemptID id) {View on GitHub (pinned to 2add963021)
Solutions
- Use a client jar matching the cluster version
- Skip/log events with unknown statuses instead of aborting the whole loop
- Catch YarnRuntimeException per-event when aggregating completion events
Example fix
// before
for (TaskAttemptCompletionEvent e : events) {
old[i++] = TypeConverter.fromYarn(e.getStatus()); // one bad status kills the loop
}
// after
for (TaskAttemptCompletionEvent e : events) {
try { old[i++] = TypeConverter.fromYarn(e.getStatus()); }
catch (YarnRuntimeException ex) { LOG.warn("Skipping event with status {}", e.getStatus()); }
} Defensive patterns
Strategy: try-catch
Validate before calling
private static final Set<TaskCompletionEventStatus> KNOWN = EnumSet.of(
TaskCompletionEventStatus.FAILED, TaskCompletionEventStatus.KILLED,
TaskCompletionEventStatus.OBSOLETE, TaskCompletionEventStatus.SUCCEEDED,
TaskCompletionEventStatus.TIPFAILED);
if (KNOWN.contains(newStatus)) { converted = TypeConverter.fromYarn(newStatus); } Type guard
static boolean isMappableCompletionStatus(TaskAttemptCompletionEventStatus s) {
return s == TaskAttemptCompletionEventStatus.FAILED
|| s == TaskAttemptCompletionEventStatus.KILLED
|| s == TaskAttemptCompletionEventStatus.OBSOLETE
|| s == TaskAttemptCompletionEventStatus.SUCCEEDED
|| s == TaskAttemptCompletionEventStatus.TIPFAILED;
} Try / catch
for (TaskAttemptCompletionEvent e : events) {
try {
out.add(TypeConverter.fromYarn(e.getStatus()));
} catch (YarnRuntimeException ex) {
LOG.warn("Skipping completion event with unknown status {}", e.getStatus());
}
} Prevention
- Process completion events one-by-one so a single unknown status can't kill the batch
- Match client version to the JobHistory/AM producer version
When it happens
Trigger: A JobHistory/AM completion event whose status is not one of the five handled constants, typically from a cluster newer than the client jar parsing its output.
Common situations: Reading job history files or REST/RPC responses produced by a newer Hadoop with an older client; mixed-jar installs; tools replaying recorded protocol traces against a different build.
Related errors
- Unrecognized task type: {}
- Unrecognized State: {}
- Unrecognized Phase: {}
- Unrecognized job state: {}
- Unrecognized task state: {}
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/439ccbcb28624679.
Report an issue: GitHub.