apache/hadoop · error · YarnRuntimeException

Unrecognized application state: {}

Error message

Unrecognized application state: {}

What it means

TypeConverter.fromYarn(YarnApplicationState, FinalApplicationStatus) maps every current YarnApplicationState: NEW/NEW_SAVING/SUBMITTED/ACCEPTED→PREP, RUNNING→RUNNING, KILLED→KILLED, FAILED→FAILED, and FINISHED→SUCCEEDED/KILLED with a deliberate fall-through of FINISHED-with-other-final-status (e.g. FAILED/UNDEFINED) into State.FAILED. The trailing throw is therefore unreachable for this build's enum and fires only for a state constant the jar doesn't know (or a mocked state in tests).

Source

Thrown at hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-common/src/main/java/org/apache/hadoop/mapreduce/TypeConverter.java:483

    case NEW:
    case NEW_SAVING:
    case SUBMITTED:
    case ACCEPTED:
      return State.PREP;
    case RUNNING:
      return State.RUNNING;
    case FINISHED:
      if (finalApplicationStatus == FinalApplicationStatus.SUCCEEDED) {
        return State.SUCCEEDED;
      } else if (finalApplicationStatus == FinalApplicationStatus.KILLED) {
        return State.KILLED;
      }
    case FAILED:
      return State.FAILED;
    case KILLED:
      return State.KILLED;
    }
    throw new YarnRuntimeException("Unrecognized application state: " + yarnApplicationState);
  }

  private static final String TT_NAME_PREFIX = "tracker_";
  public static TaskTrackerInfo fromYarn(NodeReport node) {
    TaskTrackerInfo taskTracker =
      new TaskTrackerInfo(TT_NAME_PREFIX + node.getNodeId().toString());
    return taskTracker;
  }

  public static TaskTrackerInfo[] fromYarnNodes(List<NodeReport> nodes) {
    List<TaskTrackerInfo> taskTrackers = new ArrayList<TaskTrackerInfo>();
    for (NodeReport node : nodes) {
      taskTrackers.add(fromYarn(node));
    }
    return taskTrackers.toArray(new TaskTrackerInfo[nodes.size()]);
  }

  public static JobStatus fromYarn(ApplicationReport application,

View on GitHub (pinned to 2add963021)

Solutions

  1. Upgrade hadoop-mapreduce-client-common (and yarn-client) to the cluster's version or newer
  2. Catch YarnRuntimeException in status-polling loops and fall back to the raw state name
  3. Guard with EnumSet-based checks when consuming reports from mixed-version clusters

Example fix

// before
State s = TypeConverter.fromYarn(report.getYarnApplicationState(), report.getFinalApplicationStatus());

// after
try {
  State s = TypeConverter.fromYarn(report.getYarnApplicationState(), report.getFinalApplicationStatus());
} catch (YarnRuntimeException e) {
  LOG.warn("Unknown app state {} from cluster; treating as RUNNING", report.getYarnApplicationState());
}
Defensive patterns

Strategy: try-catch

Validate before calling

private static final Set<YarnApplicationState> KNOWN = EnumSet.of(
    YarnApplicationState.NEW, YarnApplicationState.NEW_SAVING,
    YarnApplicationState.SUBMITTED, YarnApplicationState.ACCEPTED,
    YarnApplicationState.RUNNING, YarnApplicationState.FINISHED,
    YarnApplicationState.FAILED, YarnApplicationState.KILLED);
if (!KNOWN.contains(appReport.getYarnApplicationState())) { /* degrade */ }

Type guard

static boolean isMappableAppState(YarnApplicationState s) {
  return EnumSet.of(YarnApplicationState.NEW, YarnApplicationState.NEW_SAVING,
      YarnApplicationState.SUBMITTED, YarnApplicationState.ACCEPTED,
      YarnApplicationState.RUNNING, YarnApplicationState.FINISHED,
      YarnApplicationState.FAILED, YarnApplicationState.KILLED).contains(s);
}

Try / catch

try {
  jobState = TypeConverter.fromYarn(appReport.getYarnApplicationState(),
      appReport.getFinalApplicationStatus());
} catch (YarnRuntimeException e) {
  LOG.warn("Unknown app state {}; assuming still running",
      appReport.getYarnApplicationState());
  jobState = JobStatus.RUNNING;
}

Prevention

When it happens

Trigger: An application report from a newer ResourceManager carrying a YarnApplicationState constant absent from this client build; test doubles returning custom YarnApplicationState values.

Common situations: Old client jars polling a newer YARN cluster (rolling upgrades); tools that deserialize reports across Hadoop versions; unit tests using mockito to fabricate reports.

Related errors


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