apache/seatunnel · critical · HudiConnectorException

CONFIG_VALIDATION_FAILED

CONFIG_VALIDATION_FAILED

Error message

PluginName: %s, PluginType: %s, Message: Cannot find Hudi catalog factory

What it means

HudiSink.getSaveModeHandler() uses SeaTunnel's SPI discovery to locate the factory registered with identifier "Hudi". If discovery returns null — the Hudi catalog factory is not on the classpath or not registered as a service — a HudiConnectorException with CONFIG_VALIDATION_FAILED is thrown. SaveMode handling depends on creating the Hudi catalog through this factory.

Source

Thrown at seatunnel-connectors-v2/connector-hudi/src/main/java/org/apache/seatunnel/connectors/seatunnel/hudi/sink/HudiSink.java:113

    @Override
    public Optional<Serializer<HudiCommitInfo>> getCommitInfoSerializer() {
        return Optional.of(new DefaultSerializer<>());
    }

    @Override
    public Optional<SaveModeHandler> getSaveModeHandler() {
        TablePath tablePath =
                TablePath.of(
                        catalogTable.getTableId().getDatabaseName(),
                        catalogTable.getTableId().getTableName());
        CatalogFactory catalogFactory =
                discoverFactory(
                        Thread.currentThread().getContextClassLoader(),
                        CatalogFactory.class,
                        "Hudi");
        if (catalogFactory == null) {
            throw new HudiConnectorException(
                    SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
                    String.format(
                            "PluginName: %s, PluginType: %s, Message: %s",
                            getPluginName(), PluginType.SINK, "Cannot find Hudi catalog factory"));
        }
        Catalog catalog = catalogFactory.createCatalog(catalogFactory.factoryIdentifier(), config);
        return Optional.of(
                new DefaultSaveModeHandler(
                        hudiSinkConfig.getSchemaSaveMode(),
                        hudiSinkConfig.getDataSaveMode(),
                        catalog,
                        tablePath,
                        catalogTable,
                        null));
    }

    @Override
    public Optional<CatalogTable> getWriteCatalogTable() {

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Install the full connector-hudi plugin via sh bin/install-plugin.sh or copy the connector-hudi jar into the plugins directory.
  2. Verify META-INF/services/org.apache.seatunnel.api.configuration.util.CatalogFactory (FactoryIdentifier SPI) entry for HudiCatalogFactory exists in the jar.
  3. Check the plugin discovery directory configuration so the SeaTunnel runtime can see the connector jar.
  4. Ensure the thread context classloader at job submission includes connector-hudi classes.
Defensive patterns

Strategy: validation

Validate before calling

Class<?> f = Thread.currentThread().getContextClassLoader()
    .loadClass("org.apache.seatunnel.connectors.seatunnel.hudi.catalog.HudiCatalogFactory");
// if loadClass throws, the connector jar is not on the runtime classpath

Try / catch

try {
    sink.doWrite(...);
} catch (HudiConnectorException e) {
    if (e.getCode() == SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED) {
        // verify plugin installation / SPI registration and resubmit
    } else throw e;
}

Prevention

When it happens

Trigger: Running a job with save_mode requiring catalog handling while the connector-hudi plugin jar is absent from the runtime plugin directory, the SPI file is missing/broken, or the factory identifier lookup for "Hudi" fails on the current thread context classloader.

Common situations: Deploying only the sink jar without the full connector package; plugin.dir misconfigured so connector-hudi isn't loaded; custom classloader setups losing Thread.currentThread().getContextClassLoader(); manually assembled fat jars missing META-INF/services entries.

Understand the failure class

Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/688e250fa1ab203d. Report an issue: GitHub.