apache/hadoop · error · java.lang.IllegalArgumentException

The mount point doesn't exist. path=" + fedPath

Error message

The mount point doesn't exist. path=" + fedPath

What it means

RouterFedBalance.getSrcPath() resolves the fedbalance source path through the router's admin API: it fetches the mount table entry for the federated path and builds hdfs://<ns><path> as the actual source cluster URI. If MountTableProcedure.getMountEntry(fedPath, mountTable) returns null it throws IllegalArgumentException('The mount point doesn't exist') — the source argument is not a mount point this router knows.

Source

Thrown at hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/rbfbalance/RouterFedBalance.java:329

      scheduler.shutDown();
    }
    return 0;
  }

  /**
   * Get src uri from Router.
   */
  private Path getSrcPath(String fedPath) throws IOException {
    String address = getConf().getTrimmed(
        RBFConfigKeys.DFS_ROUTER_ADMIN_ADDRESS_KEY,
        RBFConfigKeys.DFS_ROUTER_ADMIN_ADDRESS_DEFAULT);
    InetSocketAddress routerSocket = NetUtils.createSocketAddr(address);
    RouterClient rClient = new RouterClient(routerSocket, getConf());
    try {
      MountTableManager mountTable = rClient.getMountTableManager();
      MountTable entry = MountTableProcedure.getMountEntry(fedPath, mountTable);
      if (entry == null) {
        throw new IllegalArgumentException(
            "The mount point doesn't exist. path=" + fedPath);
      } else if (entry.getDestinations().size() > 1) {
        throw new IllegalArgumentException(
            "The mount point has more than one destination. path=" + fedPath);
      } else {
        String ns = entry.getDestinations().get(0).getNameserviceId();
        String path = entry.getDestinations().get(0).getDest();
        return new Path("hdfs://" + ns + path);
      }
    } finally {
      rClient.close();
    }
  }

  private void printUsage() {
    HelpFormatter formatter = new HelpFormatter();
    formatter.printHelp(
        "rbfbalance OPTIONS [submit|continue] <src> <target>\n\nOPTIONS",

View on GitHub (pinned to 2add963021)

Solutions

  1. List the mounts: hdfs dfsrouteradmin -list, and pass the exact mount source path as -s
  2. Use the mount point itself, not a sub-path beneath it
  3. Verify the router admin address/namespace the client resolves
  4. Create the missing mount first with hdfs dfsrouteradmin -add if it should exist

Example fix

# before: /apps/data/2024 is not a mount point → IllegalArgumentException
hdfs fedbalance -s /apps/data/2024 -d hdfs://ns1/archive/2024

# after: use the mount point itself
hdfs fedbalance -s /apps/data -d hdfs://ns1/archive
Defensive patterns

Strategy: validation

Validate before calling

// Resolve/validate the source mount before submitting the job
try (RouterClient client = new RouterClient(routerAdminAddr, conf)) {
  MountTable entry = MountTableProcedure.getMountEntry(srcPath,
      client.getMountTableManager());
  if (entry == null) {
    throw new IllegalArgumentException(
        srcPath + " is not a mount point; see hdfs dfsrouteradmin -list");
  }
}

Prevention

When it happens

Trigger: `hdfs fedbalance -s <path>` where <path> is not present in the router mount table: a subdirectory under a mount instead of the mount point itself, a mount never added, or dfs.federation.router.admin.address pointing at the wrong router.

Common situations: Passing /apps/data/2024 when the mount is /apps/data; pointing the client at the wrong router or federation; running fedbalance before creating the mount; typos in the -s path.

Related errors


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