prestodb/presto · error
NOT_FOUND
NOT_FOUND
Error message
Configured serializer class not found
What it means
AccumuloTable.getSerializerInstance() reflectively loads and instantiates the serializerClassName configured for the table. If the class cannot be found or constructed (ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException), it throws NOT_FOUND. This is the metadata-side twin of the RecordSet factory failure and is hit by the Indexer and AccumuloPageSink.
Source
Thrown at presto-accumulo/src/main/java/com/facebook/presto/accumulo/metadata/AccumuloTable.java:180
public boolean isIndexed()
{
return indexed;
}
@JsonIgnore
public int getRowIdOrdinal()
{
return this.rowIdOrdinal;
}
@JsonIgnore
public AccumuloRowSerializer getSerializerInstance()
{
try {
return (AccumuloRowSerializer) Class.forName(serializerClassName).getConstructor().newInstance();
}
catch (ClassNotFoundException | InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
throw new PrestoException(NOT_FOUND, "Configured serializer class not found", e);
}
}
@JsonIgnore
public static String getFullTableName(String schema, String table)
{
return schema.equals("default") ? table : schema + '.' + table;
}
@JsonIgnore
public static String getFullTableName(SchemaTableName tableName)
{
return getFullTableName(tableName.getSchemaName(), tableName.getTableName());
}
@JsonIgnore
public SchemaTableName getSchemaTableName()
{View on GitHub (pinned to 55bb57d202)
Solutions
- Deploy the JAR containing the serializer class to the presto-accumulo plugin directory on all nodes and restart
- Verify the serializer_class table property/metadata contains the correct fully-qualified class name
- Ensure the class is public, extends AccumuloRowSerializer, and has a public no-arg constructor
- If the class was renamed, recreate the table metadata (or update ZK metadata) with the new class name
Example fix
// before throw new PrestoException(NOT_FOUND, "Configured serializer class not found", e); // serializerClassName = com.acme.OldRowSerializer (renamed) // after // update table metadata serializerClassName = com.acme.NewRowSerializer; // class deployed to plugin dir, public no-arg ctor
Defensive patterns
Strategy: validation
Validate before calling
String cls = table.getSerializerClassName();
try {
Class<?> c = Class.forName(cls);
if (!AccumuloRowSerializer.class.isAssignableFrom(c)) {
throw new IllegalStateException(cls + " is not an AccumuloRowSerializer");
}
c.getConstructor(); // must have public no-arg ctor
} catch (Exception e) {
throw new IllegalStateException("Serializer unusable: " + cls, e);
} Type guard
boolean isValidSerializerName(String name) {
try {
return AccumuloRowSerializer.class.isAssignableFrom(Class.forName(name));
} catch (ClassNotFoundException e) { return false; }
} Try / catch
try {
AccumuloTable t = metadata.getTable(name);
t.getSerializerInstance();
} catch (PrestoException e) {
if (e.getMessage().contains("Configured serializer class not found")) {
// deploy JAR to plugin dir or fix serializer_class metadata, then retry
}
throw e;
} Prevention
- Deploy custom serializer JARs to all Presto nodes' plugin directories
- Pin serializer class names; avoid renaming classes referenced by existing table metadata
- Validate serializer_class at CREATE TABLE time with a trial instantiation
- Extend AccumuloRowSerializer and keep a public no-arg constructor
When it happens
Trigger: Calling getSerializerInstance() on an AccumuloTable whose serializerClassName is missing from the classpath, is not an AccumuloRowSerializer, lacks a public no-arg constructor, or whose constructor throws.
Common situations: Custom serializer JAR not deployed to coordinator and worker plugin directories; table created with a misspelled or renamed serializer class; class relocated/renamed after a version upgrade so stored metadata now points at a nonexistent class.
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/5dd47225b29b17b0.
Report an issue: GitHub.