apache/hadoop · error · IllegalArgumentException

The mount point has more than one destination. path={}

Error message

The mount point has more than one destination. path={}

What it means

FedBalance requires the source mount to have exactly one destination (one active cluster holding the data). getSrcPath() rejects mounts whose entry lists more than one remote location with IllegalArgumentException('The mount point has more than one destination'), because with multiple destinations (e.g., HASH- or LOCAL-ordered multi-namespace mounts) the true source of the bytes is ambiguous.

Source

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

  }

  /**
   * 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",
        CLI_OPTIONS);
  }

View on GitHub (pinned to 2add963021)

Solutions

  1. Inspect the entry: hdfs dfsrouteradmin -list (destination count for the mount)
  2. Collapse the mount to a single destination: hdfs dfsrouteradmin -update /mount -ns ns0 -dst /mount with exactly one -ns/-dst pair
  3. Re-run the fedbalance job against the single-destination mount

Example fix

# before: mount /apps has two destinations → rejected
hdfs dfsrouteradmin -add /apps -ns ns0 -dst /apps -ns ns1 -dst /apps
hdfs fedbalance -s /apps -d hdfs://ns2/apps

# after: single destination, then balance
hdfs dfsrouteradmin -update /apps -ns ns0 -dst /apps
hdfs fedbalance -s /apps -d hdfs://ns2/apps
Defensive patterns

Strategy: validation

Validate before calling

// Reject multi-destination mounts before running fedbalance
MountTable entry = MountTableProcedure.getMountEntry(srcPath, mountTableManager);
if (entry == null || entry.getDestinations().size() != 1) {
  throw new IllegalArgumentException(
      srcPath + " must be a mount with exactly one destination for fedbalance");
}

Prevention

When it happens

Trigger: `hdfs fedbalance -s <mount>` where dfsrouteradmin -list shows several destinations for that mount — typically entries created with multiple -ns/-dst pairs for load-balanced access.

Common situations: Operators attempt to migrate data off a multi-destination (read load-balancing) mount without first collapsing it to a single destination; federations that later added HASH ordering to existing mounts.

Related errors


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