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

  1. Use only: hdfs dfsrouteradmin -nameservice <enable|disable> <nameserviceId>
  2. To see disabled nameservices run 'hdfs dfsrouteradmin -getDisabledNameservices'
  3. 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

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


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