apache/hadoop · error · IllegalArgumentException
"Invalid argument: " + cmd
Error message
"Invalid argument: " + cmd
What it means
The dfsrouteradmin -safemode subcommand accepts exactly three verbs: enter, leave, get (see the usage string '[-safemode enter | leave | get]'). Any other token reaches the else branch and throws IllegalArgumentException('Invalid argument: ' + cmd). Note there is no 'wait' here, unlike hdfs dfsadmin -safemode.
Source
Thrown at hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java:1215
/**
* Manager the safe mode state.
* @param cmd Input command, enter or leave safe mode.
* @throws IOException
*/
private void manageSafeMode(String cmd) throws IOException {
if (cmd.equals("enter")) {
if (enterSafeMode()) {
System.out.println("Successfully enter safe mode.");
}
} else if (cmd.equals("leave")) {
if (leaveSafeMode()) {
System.out.println("Successfully leave safe mode.");
}
} else if (cmd.equals("get")) {
boolean result = getSafeMode();
System.out.println("Safe Mode: " + result);
} else {
throw new IllegalArgumentException("Invalid argument: " + cmd);
}
}
/**
* Request the Router entering safemode state.
* @return Return true if entering safemode successfully.
* @throws IOException
*/
private boolean enterSafeMode() throws IOException {
RouterStateManager stateManager = client.getRouterStateManager();
EnterSafeModeResponse response = stateManager.enterSafeMode(
EnterSafeModeRequest.newInstance());
return response.getStatus();
}
/**
* Request the Router leaving safemode state.
* @return Return true if leaving safemode successfully.View on GitHub (pinned to 2add963021)
Solutions
- Use one of the three verbs: hdfs dfsrouteradmin -safemode enter | leave | get
- Check the usage: hdfs dfsrouteradmin -help safemode
- Validate the verb in wrappers: case "$verb" in enter|leave|get) ;; *) exit 2;; esac
Example fix
# before hdfs dfsrouteradmin -safemode on # after hdfs dfsrouteradmin -safemode enter
Defensive patterns
Strategy: validation
Validate before calling
case "$VERB" in enter|leave|get) ;; *) echo "-safemode accepts enter|leave|get only" >&2; exit 2;; esac hdfs dfsrouteradmin -safemode "$VERB"
Prevention
- Router safemode has no 'wait' verb (unlike dfsadmin)
- Whitelist the verb in wrapper scripts before executing
When it happens
Trigger: hdfs dfsrouteradmin -safemode on (or off / true / wait / status) carried over from other tools' vocabularies; a script variable expanding to an empty or misspelled verb.
Common situations: Operators used to NameNode safemode vocabulary ('wait', 'get') or generic on/off toggles; automation written against a different Hadoop CLI.
Related errors
- Invalid argument : {}
- "Unknown command: " + cmd
- Cannot parse nsQuota: {}
- Cannot parse ssQuota: {}
- Input quota value should be a positive number.
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/800c5f0c5a64dc7c.
Report an issue: GitHub.