apache/hadoop · error · java.io.IOException
Mount table " + mount + " doesn't exist
Error message
Mount table " + mount + " doesn't exist
What it means
Thrown by the RBF FedBalance procedure when it tries to re-point a mount table entry to the destination cluster (updateMountTableDestination) but the router's admin API has no entry matching the mount name: getMountEntry(mount, mountTable) returned null. The balance job's switch phase cannot proceed without the original entry, so it aborts with IOException.
Source
Thrown at hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/rbfbalance/MountTableProcedure.java:110
* path.
*
* @param mount the mount point.
* @param dstNs the target namespace.
* @param dstPath the target path
* @param conf the configuration of the router.
*/
private static void updateMountTableDestination(String mount, String dstNs,
String dstPath, Configuration conf) throws IOException {
String address = conf.getTrimmed(RBFConfigKeys.DFS_ROUTER_ADMIN_ADDRESS_KEY,
RBFConfigKeys.DFS_ROUTER_ADMIN_ADDRESS_DEFAULT);
InetSocketAddress routerSocket = NetUtils.createSocketAddr(address);
RouterClient rClient = new RouterClient(routerSocket, conf);
try {
MountTableManager mountTable = rClient.getMountTableManager();
MountTable originalEntry = getMountEntry(mount, mountTable);
if (originalEntry == null) {
throw new IOException("Mount table " + mount + " doesn't exist");
} else {
RemoteLocation remoteLocation =
new RemoteLocation(dstNs, dstPath, mount);
originalEntry.setDestinations(Arrays.asList(remoteLocation));
UpdateMountTableEntryRequest updateRequest =
UpdateMountTableEntryRequest.newInstance(originalEntry);
UpdateMountTableEntryResponse response =
mountTable.updateMountTableEntry(updateRequest);
if (!response.getStatus()) {
throw new IOException("Failed update mount table " + mount);
}
rClient.getMountTableManager().refreshMountTableEntries(
RefreshMountTableEntriesRequest.newInstance());
}
} finally {
rClient.close();
}
}View on GitHub (pinned to 2add963021)
Solutions
- List the mount table on the router the procedure talks to: hdfs dfsrouteradmin -list, and confirm the exact mount source path exists
- Re-run the balance job with the exact path shown by -list
- Verify dfs.federation.router.admin.address points to the intended router and its state store is reachable and current
- If the mount was removed concurrently, abort the job, re-add the mount, and restart the balance
Defensive patterns
Strategy: validation
Validate before calling
// Before launching a fedbalance job, verify the mount entry exists on the target router
try (RouterClient client = new RouterClient(routerAdminAddr, conf)) {
MountTableManager mgr = client.getMountTableManager();
MountTable entry = MountTableProcedure.getMountEntry(mountPath, mgr);
if (entry == null) {
throw new IllegalArgumentException(
"Refusing to balance: mount " + mountPath + " not in router mount table");
}
} Prevention
- Always run hdfs dfsrouteradmin -list and match the exact source path before fedbalance
- Pin balance jobs to one router admin address and keep that router's state store healthy
- Freeze admin changes to the mount being migrated while the balance job runs
When it happens
Trigger: A fedbalance job reaches the mount-table switch step and queries the router configured at dfs.federation.router.admin.address; the exact source path is absent from the mount table — never added, removed concurrently, or the address points at a router backed by a different/stale state store.
Common situations: Typo in the -s mount path of `hdfs fedbalance`; the mount was deleted while a long-running balance job was in progress; running the procedure against the wrong router; state store membership/mount records not yet synchronized.
Related errors
- Failed update mount table " + mount
- Failed update mount table " + mount + " with readonly=" + re
- The mount point doesn't exist. path=" + fedPath
- The mount point has more than one destination. path={}
- The destination cluster must be specified.
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/17ca4286c09028bc.
Report an issue: GitHub.