prestodb/presto · critical · PrestoException
NATIVE_EXECUTION_BINARY_NOT_EXIST
NATIVE_EXECUTION_BINARY_NOT_EXIST
Error message
File doesn't exist %s
What it means
NativeExecutionProcess.resolveProcessWorkingPath() resolves a configured process path to an absolute path (relative paths are resolved against the process working directory). If the resolved file does not exist, it logs and throws PrestoException NATIVE_EXECUTION_BINARY_NOT_EXIST so native process startup fails fast with a clear message instead of an obscure exec failure.
Source
Thrown at presto-spark-base/src/main/java/com/facebook/presto/spark/execution/nativeprocess/NativeExecutionProcess.java:114
workerConfigFile(configBasePath),
workerNodeConfigFile(configBasePath),
workerCatalogDir(configBasePath));
}
@Override
protected String resolveProcessWorkingPath(String path)
{
File absolutePath = new File(path);
// In the case of SparkEnv is not initialed (e.g. unit test), we just use current location instead of calling SparkFiles.getRootDirectory() to avoid error.
String rootDirectory = SparkEnv$.MODULE$.get() != null ? SparkFiles.getRootDirectory() : ".";
File workingDir = new File(rootDirectory);
if (!absolutePath.isAbsolute()) {
absolutePath = new File(workingDir, path);
}
if (!absolutePath.exists()) {
log.error(format("File doesn't exist %s", absolutePath.getAbsolutePath()));
throw new PrestoException(NATIVE_EXECUTION_BINARY_NOT_EXIST, format("File doesn't exist %s", absolutePath.getAbsolutePath()));
}
return absolutePath.getAbsolutePath();
}
protected void updateWorkerProperties()
{
// Update memory properties
updateWorkerMemoryProperties();
// The reason we have to pick and assign the port per worker is in our prod environment,
// there is no port isolation among all the containers running on the same host, so we have
// to pick unique port per worker to avoid port collision. This config will be passed down to
// the native execution process eventually for process initialization.
workerProperty.getSystemConfig()
.update(NativeExecutionSystemConfig.HTTP_SERVER_HTTP_PORT, String.valueOf(getPort()));
// Update the temp storage configs for spilling and broadcast join.View on GitHub (pinned to 55bb57d202)
Solutions
- Verify the path printed in the error message exists on the node and fix the configuration value
- Distribute the native binary via spark.files / spark.archives so it lands in SparkFiles.getRootDirectory()
- Make the configured path absolute if you intend it to bypass the working-dir resolution
- Check node-local cleanup policies are not deleting the native binary directory
Example fix
// before --native-binary=presto_native # relative, not present in working dir // after --native-binary=/opt/presto/bin/presto_native # absolute, verified to exist
Defensive patterns
Strategy: validation
Validate before calling
File binary = new File(nativeBinaryPath);
if (!binary.isAbsolute()) binary = new File(workingDir, nativeBinaryPath);
if (!binary.exists()) {
throw new IllegalStateException("Native binary missing: " + binary.getAbsolutePath());
} Try / catch
try {
processFactory.createNativeExecutionProcess(...);
} catch (PrestoException e) {
if (e.getErrorCode().getName().equals("NATIVE_EXECUTION_BINARY_NOT_EXIST")) {
// fix path config or re-distribute binary
}
} Prevention
- Use absolute verified paths in native binary configuration
- Ship binaries with spark.files/spark.archives to every node
- Ensure node cleanup jobs do not remove the native binary install dir
When it happens
Trigger: A native binary/resource path passed to NativeExecutionProcess (e.g., the native worker binary path) resolves via resolveProcessWorkingPath to a File whose exists() is false — thrown at NativeExecutionProcess.java:114.
Common situations: Wrong native.binary-path config value, binary not shipped/spark-added to the working directory on this node, typo in path, binary deleted by cleanup between jobs, or running outside Spark where SparkFiles root differs from expectation.
Related errors
- NATIVE_EXECUTION_PROCESS_LAUNCH_ERROR
- NATIVE_EXECUTION_PROCESS_LAUNCH_ERROR
- File doesn't exist %s
- NATIVE_EXECUTION_BINARY_NOT_EXIST
- NATIVE_EXECUTION_PROCESS_LAUNCH_ERROR
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/74155f9982136758.
Report an issue: GitHub.