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
- Deploy the jar containing the serializer class to every Presto node (plugin directory) and restart Presto.
- Verify the fully-qualified class name stored in the table/split metadata matches a class actually on the classpath.
- If splits are stale after an upgrade, recreate the table (or rewrite metadata) so splits reference the current serializer class.
- Run a Class.forName test on one worker (e.g., via a small plugin or jshell with the plugin classpath) to confirm loading works.
- 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
- Deploy custom serializer jars to the plugin directory on ALL Presto nodes, not just the coordinator.
- Re-run deployment automation after every Presto upgrade.
- Record and verify the fully-qualified serializer class name in table metadata.
- Add a startup smoke test that Class.forName's the configured serializer.
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.