prestodb/presto · error · PrestoException

NOT_FOUND

NOT_FOUND

Error message

Configured serializer class not found

What it means

AccumuloSplit.getSerializerClass loads the row serializer class recorded in the split via Class.forName and casts it to AccumuloRowSerializer. If the class named by serializerClassName is not on the Presto classpath, a ClassNotFoundException is rethrown as a PrestoException with code NOT_FOUND. The split cannot be read without a working serializer.

Source

Thrown at presto-accumulo/src/main/java/com/facebook/presto/accumulo/model/AccumuloSplit.java:150

    {
        return ranges.stream().map(WrappedRange::getRange).collect(Collectors.toList());
    }

    @JsonProperty
    public List<AccumuloColumnConstraint> getConstraints()
    {
        return constraints;
    }

    @SuppressWarnings("unchecked")
    @JsonIgnore
    public Class<? extends AccumuloRowSerializer> getSerializerClass()
    {
        try {
            return (Class<? extends AccumuloRowSerializer>) Class.forName(serializerClassName);
        }
        catch (ClassNotFoundException e) {
            throw new PrestoException(NOT_FOUND, "Configured serializer class not found", e);
        }
    }

    @JsonProperty
    public Optional<String> getScanAuthorizations()
    {
        return scanAuthorizations;
    }

    @Override
    public NodeSelectionStrategy getNodeSelectionStrategy()
    {
        return NO_PREFERENCE;
    }

    public List<HostAddress> getAddresses()
    {
        return addresses;

View on GitHub (pinned to 55bb57d202)

Solutions

  1. Deploy the jar containing the serializer class to every Presto node (plugin directory) and restart Presto.
  2. Verify the fully-qualified class name stored in the table/split metadata matches a class actually on the classpath.
  3. If splits are stale after an upgrade, recreate the table (or rewrite metadata) so splits reference the current serializer class.
  4. Run a Class.forName test on one worker (e.g., via a small plugin or jshell with the plugin classpath) to confirm loading works.
  5. Ensure no classloader/shading conflicts: the class must be loadable from Presto's plugin classloader, not shaded away.

Example fix

// before: table metadata references a class missing on workers
"serializerClass": "com.example.MyRowSerializer"  // jar only on coordinator
// after: deploy the jar to presto/plugin/accumulo/ on ALL nodes, or point at a built-in class
"serializerClass": "com.facebook.presto.accumulo.index.AccumuloRowSerializerFactory"
Defensive patterns

Strategy: validation

Validate before calling

// verify the serializer class is loadable before using splits
String cls = split.getSerializerClassName();
try {
    Class.forName(cls);
} catch (ClassNotFoundException e) {
    throw new IllegalStateException("Serializer jar missing from classpath: " + cls);
}

Type guard

boolean isValidSerializer(Object o) {
    return o instanceof AccumuloRowSerializer;
}

Try / catch

try {
    Class<? extends AccumuloRowSerializer> c = split.getSerializerClass();
} catch (PrestoException e) {
    // NOT_FOUND: log serializerClassName, deploy jar to all nodes, rethrow
    throw e;
}

Prevention

When it happens

Trigger: Reading a split (AccumuloRecordSet creation or assertSplit validation) whose serializerClassName refers to a class that is missing from the classpath — typically a custom AccumuloRowSerializer plugin jar not deployed to all Presto nodes, or a class that was renamed/moved in a connector upgrade.

Common situations: Custom serializer jar installed only on the coordinator or only on some workers; jar removed during a Presto upgrade while old splits still reference the old class; typo in the serializer class name stored in table metadata; package refactor (e.g., com.facebook... to com.yahoo... style renames) leaving old splits stale.

Understand the failure class

Background: NOT_FOUND error code: why tRPC, Harbor, Nacos and other libraries return 404 "not found" errors for resources that may still exist — this error's family across 11 libraries.

Related errors


AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04). Data as JSON: /api/errors/f856e9a8c19d8300. Report an issue: GitHub.