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
- Upgrade hadoop-mapreduce-client-common (and yarn-client) to the cluster's version or newer
- Catch YarnRuntimeException in status-polling loops and fall back to the raw state name
- 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
- Wrap status polling in a tolerant helper when talking to mixed-version clusters
- Remember FINISHED with a non-SUCCEEDED/KILLED final status maps to FAILED, not to an error
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
- Unrecognized task type: {}
- Unrecognized State: {}
- Unrecognized Phase: {}
- Unrecognized status: {}
- Unrecognized job state: {}
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/2ad02c2abbacb234.
Report an issue: GitHub.