apache/hadoop · error · BadFencingConfigurationException
Could not find configured fencing method {}
Error message
Could not find configured fencing method {} What it means
NodeFencer.createFenceMethod() wraps ClassNotFoundException (or any Exception from Class.forName) in BadFencingConfigurationException('Could not find configured fencing method <name>') when the configured fencing class cannot be resolved — it is neither a built-in short name in STANDARD_METHODS (sshfence, shell) nor a loadable class on the classpath.
Source
Thrown at hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/NodeFencer.java:180
throw new BadFencingConfigurationException(
"Unable to parse line: '" + line + "'");
}
}
private static FenceMethodWithArg createFenceMethod(
Configuration conf, String clazzName, String arg)
throws BadFencingConfigurationException {
Class<?> clazz;
try {
// See if it's a short name for one of the built-in methods
clazz = STANDARD_METHODS.get(clazzName);
if (clazz == null) {
// Try to instantiate the user's custom method
clazz = Class.forName(clazzName);
}
} catch (Exception e) {
throw new BadFencingConfigurationException(
"Could not find configured fencing method " + clazzName,
e);
}
// Check that it implements the right interface
if (!FenceMethod.class.isAssignableFrom(clazz)) {
throw new BadFencingConfigurationException("Class " + clazzName +
" does not implement FenceMethod");
}
FenceMethod method = (FenceMethod)ReflectionUtils.newInstance(
clazz, conf);
method.checkArgs(arg);
return new FenceMethodWithArg(method, arg);
}
private static class FenceMethodWithArg {
private final FenceMethod method;View on GitHub (pinned to 2add963021)
Solutions
- Use the built-in short names 'sshfence' or 'shell' when they suffice.
- For a custom method, write the fully-qualified class name and deploy its jar to all HA nodes (same path on each), then verify with 'hadoop classpath' and a Class.forName load test.
- Check spelling and case of the class name against the jar contents.
Example fix
<!-- before: short name that does not exist / typo --> <value>myfencer</value> <!-- after: fully-qualified class shipped on all nodes --> <value>com.example.ha.MyFenceMethod</value>
Defensive patterns
Strategy: validation
Validate before calling
// Verify the fencing class resolves on THIS node before enabling HA
String name = "com.example.ha.MyFenceMethod";
Class<?> clazz = Class.forName(name); // ClassNotFoundException if missing
if (!org.apache.hadoop.ha.FenceMethod.class.isAssignableFrom(clazz)) {
throw new IllegalStateException(name + " is not a FenceMethod");
} Type guard
boolean isLoadableFenceMethod(String n) throws ClassNotFoundException {
return org.apache.hadoop.ha.FenceMethod.class.isAssignableFrom(Class.forName(n));
} Try / catch
try {
new NodeFencer(conf, fencingConfig);
} catch (BadFencingConfigurationException e) {
if (e.getCause() instanceof ClassNotFoundException) {
// jar missing on this node: deploy it before failover is ever needed
}
} Prevention
- Deploy custom fencer jars to every node that may run fencing, via the same package path, and assert presence in provisioning.
- Use fully-qualified class names in config; short names only for the built-ins sshfence/shell.
- Run a Class.forName smoke test per node during deployment.
When it happens
Trigger: An entry in dfs.ha.fencing.methods names a class that cannot be loaded: typo in the name, jar missing from the classpath, or a short name that does not exist (only 'sshfence' and 'shell' are built in).
Common situations: Custom FenceMethod jar not deployed to every node that may run fencing; typo or wrong case in the class name; Hadoop upgrade that moved/renamed the class; using a short name introduced in a newer version on an older cluster.
Related errors
- Class {} does not implement FenceMethod
- f + " is a directory"
- No KeyProviderFactory for ${uri} in ${KEY_PROVIDER_PATH}
- Unable to parse line: '{}'
- No argument passed to 'shell' fencing method
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/18735dc51a424027.
Report an issue: GitHub.