apache/hadoop · error · IllegalArgumentException
"Unknown command: " + cmd
Error message
"Unknown command: " + cmd
What it means
The dfsrouteradmin -nameservice subcommand accepts exactly two verbs: enable and disable (usage: '-nameservice enable | disable <nameservice>'). Anything else reaches the final else and throws IllegalArgumentException('Unknown command: ' + cmd) before any RPC is attempted.
Source
Thrown at hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java:1274
* Manage the name service: enabling/disabling.
* @param cmd Input command, disable or enable.
* @throws IOException
*/
private void manageNameservice(String cmd, String nsId) throws IOException {
if (cmd.equals("enable")) {
if (enableNameservice(nsId)) {
System.out.println("Successfully enabled nameservice " + nsId);
} else {
System.err.println("Cannot enable " + nsId);
}
} else if (cmd.equals("disable")) {
if (disableNameservice(nsId)) {
System.out.println("Successfully disabled nameservice " + nsId);
} else {
System.err.println("Cannot disable " + nsId);
}
} else {
throw new IllegalArgumentException("Unknown command: " + cmd);
}
}
private boolean disableNameservice(String nsId) throws IOException {
NameserviceManager nameserviceManager = client.getNameserviceManager();
DisableNameserviceResponse response =
nameserviceManager.disableNameservice(
DisableNameserviceRequest.newInstance(nsId));
return response.getStatus();
}
private boolean enableNameservice(String nsId) throws IOException {
NameserviceManager nameserviceManager = client.getNameserviceManager();
EnableNameserviceResponse response =
nameserviceManager.enableNameservice(
EnableNameserviceRequest.newInstance(nsId));
return response.getStatus();
}View on GitHub (pinned to 2add963021)
Solutions
- Use only: hdfs dfsrouteradmin -nameservice <enable|disable> <nameserviceId>
- To see disabled nameservices run 'hdfs dfsrouteradmin -getDisabledNameservices'
- Check usage: hdfs dfsrouteradmin -help nameservice
Example fix
# before hdfs dfsrouteradmin -nameservice status ns1 # after hdfs dfsrouteradmin -getDisabledNameservices # inspect, then enable/disable as needed
Defensive patterns
Strategy: validation
Validate before calling
case "$VERB" in enable|disable) ;; *) echo "-nameservice accepts enable|disable only; use -getDisabledNameservices to inspect" >&2; exit 2;; esac hdfs dfsrouteradmin -nameservice "$VERB" "$NSID"
Prevention
- Inspection goes through -getDisabledNameservices, not -nameservice subverbs
- Validate verb and nameservice id separately in automation
When it happens
Trigger: hdfs dfsrouteradmin -nameservice status ns1; -nameservice list; -nameservice restart ns1; misspelled verb like 'disable ' with trailing characters or wrong case.
Common situations: Admin scripts written for other tooling guessing subcommands; attempts to check nameservice state -- the supported introspection is 'hdfs dfsrouteradmin -getDisabledNameservices'.
Related errors
- Invalid argument : {}
- "Invalid argument: " + 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/e75a99c3ae4dfde1.
Report an issue: GitHub.