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

  1. Use a client jar matching the cluster version
  2. Skip/log events with unknown statuses instead of aborting the whole loop
  3. 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

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


AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22). Data as JSON: /api/errors/439ccbcb28624679. Report an issue: GitHub.