apache/seatunnel · critical · HbaseConnectorException
CONNECTION_FAILED_FOR_ADMIN
CONNECTION_FAILED_FOR_ADMIN
Error message
CONNECTION_FAILED_FOR_ADMIN
What it means
HbaseClient's constructor builds a BufferedMutator (used for batched writes/admin path) from the HBase connection. If ConnectionFactory/BufferedMutator creation throws an IOException (e.g. cannot reach the cluster, ZooKeeper unavailable, auth failure), the client wraps it as HbaseConnectorException with error code CONNECTION_FAILED_FOR_ADMIN.
Solutions
- Verify hbase.zookeeper.quorum/zookeeper.zookeeper.quorum and ports in the SeaTunnel HBase config point to a reachable cluster
- Test connectivity to ZooKeeper (2181) and HBase RegionServer/Master ports from the SeaTunnel node
- Ensure the configured namespace/table exists or enable auto-creation options before the client builds the mutator
- Check Kerberos/credentials (principal, keytab) and that hbase-site.xml is on the classpath
- Read the wrapped cause (e) in the exception for the exact connection failure
Defensive patterns
Strategy: try-catch
Validate before calling
// reachability precheck before creating the client
try (java.net.Socket s = new java.net.Socket(quorumHost, 2181)) { /* ok */ }
// plus: ensure namespace/table exists or auto-create is enabled Try / catch
try {
client = new HbaseClient(hbaseParameters, hbaseConfiguration);
} catch (HbaseConnectorException e) {
if (e.getErrorCode() == CONNECTION_FAILED_FOR_ADMIN) {
log.error("Cannot build HBase buffered mutator: {}", e.getCause(), e);
throw new RuntimeException("Check hbase.zookeeper.quorum / credentials / table existence", e);
}
throw e;
} Prevention
- Validate quorum host/port connectivity from SeaTunnel worker nodes before submitting jobs
- Ensure hbase-site.xml/kerberos config is on the classpath and credentials are fresh
- Create the namespace/table (or enable auto-create) before the sink starts
- Keep hbase-client dependency version aligned with the cluster
When it happens
Trigger: Constructing HbaseClient when the HBase cluster is unreachable, ZooKeeper quorum is misconfigured (hbase.zookeeper.quorum), the buffered mutator parameters reference a non-existent namespace/table, or Kerberos/credentials fail — resulting in an IOException while creating the BufferedMutator.
Common situations: Wrong hbase.zookeeper.quorum or port in the connector config; HBase master down; firewall or DNS blocking port 2181/16020; namespace or table in the sink config does not exist yet; missing hbase-site.xml on the classpath; Kerberos keytab misconfigured.
Understand the failure class
Background: ECONNREFUSED and "connection refused" / "could not connect to server" errors: what they mean and how to fix them — this error's family across 44 libraries.
Related errors
- CONNECTION_FAILED
- Client not connected
- CONNECTION_FAILED
- CONNECTION_FAILED
- CREATE_ACTIVEMQ_CLIENT_FAILED
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/e470394a4e0fe07a.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-hbase/src/main/java/org/apache/seatunnel/connectors/seatunnel/hbase/client/HbaseClient.java:85
*
* @param connection Hbase connection
* @param hbaseParameters Hbase parameters
*/
private HbaseClient(Connection connection, HbaseParameters hbaseParameters) {
this.connection = connection;
try {
this.admin = connection.getAdmin();
BufferedMutatorParams bufferedMutatorParams =
new BufferedMutatorParams(
TableName.valueOf(
hbaseParameters.getNamespace(),
hbaseParameters.getTable()))
.pool(HTable.getDefaultExecutor(hbaseConfiguration))
.writeBufferSize(hbaseParameters.getWriteBufferSize());
hbaseMutator = connection.getBufferedMutator(bufferedMutatorParams);
} catch (IOException e) {
throw new HbaseConnectorException(
CONNECTION_FAILED_FOR_ADMIN, CONNECTION_FAILED_FOR_ADMIN.getDescription(), e);
}
}
/**
* Create a new instance of HbaseClient.
*
* @param hbaseParameters Hbase parameters
* @return HbaseClient
*/
public static HbaseClient createInstance(HbaseParameters hbaseParameters) {
return new HbaseClient(getHbaseConnection(hbaseParameters), hbaseParameters);
}
/**
* Get Hbase connection.
*
* @param hbaseParameters Hbase parametersView on GitHub (pinned to cf67b549a7)