prestodb/presto · critical · PrestoException
NATIVE_EXECUTION_PROCESS_LAUNCH_ERROR
NATIVE_EXECUTION_PROCESS_LAUNCH_ERROR
Error message
Cannot start native process: %s
What it means
NativeExecutionProcessFactory.createNativeExecutionProcess() constructs the native execution worker process. Any IOException raised during process creation/launch is converted to PrestoException NATIVE_EXECUTION_PROCESS_LAUNCH_ERROR with the IOException's message, e.g. cannot execute binary, missing file, or I/O error setting up the process.
Source
Thrown at presto-spark-base/src/main/java/com/facebook/presto/spark/execution/nativeprocess/NativeExecutionProcessFactory.java:98
public NativeExecutionProcess createNativeExecutionProcess(Session session,
Duration maxErrorDuration, Optional<TempStorageHandle> nativeTempStorageHandle)
{
try {
return new NativeExecutionProcess(
executablePath,
programArguments,
session,
httpClient,
coreExecutor,
errorRetryScheduledExecutor,
serverInfoCodec,
maxErrorDuration,
workerProperty,
nativeTempStorageHandle);
}
catch (IOException e) {
throw new PrestoException(NATIVE_EXECUTION_PROCESS_LAUNCH_ERROR, format("Cannot start native process: %s", e.getMessage()), e);
}
}
@PreDestroy
public void stop()
{
coreExecutor.shutdownNow();
errorRetryScheduledExecutor.shutdownNow();
if (process != null) {
process.close();
}
}
protected String getExecutablePath()
{
return executablePath;
}
View on GitHub (pinned to 55bb57d202)
Solutions
- Read the wrapped IOException message ('Cannot start native process: %s') for the exact root cause
- Verify the native binary path exists and is executable for the user running the Spark executor
- Check the host matches the binary's OS/architecture and required shared libraries are installed
- Ensure configured working directory and native temp storage are writable
Example fix
// before native-execution.binary-path=/shared/bin/presto_native # not present on every executor // after spark.files=/opt/presto/bin/presto_native # distribute binary to every executor native-execution.binary-path=presto_native
Defensive patterns
Strategy: validation
Validate before calling
if (!Files.isExecutable(Paths.get(nativeBinaryPath))) {
throw new IllegalStateException("Native binary not executable on this host: " + nativeBinaryPath);
} Try / catch
try {
process = factory.createNativeExecutionProcess(...);
} catch (PrestoException e) {
// 'Cannot start native process: %s' message carries the IOException cause; log it fully
} Prevention
- Match native binary platform/OS to executor host images
- Install required shared libraries in the executor image
- Preflight-check binary existence and exec permission on every executor node
When it happens
Trigger: createNativeExecutionProcess (called by getNativeExecutionProcess and the factory lifecycle) throws IOException while creating the native process — invalid executable, failed file resolution, or I/O error building the process — caught at NativeExecutionProcessFactory.java:98.
Common situations: Native binary missing or not executable on the node, wrong binary path config, OS/arch mismatch (binary built for different platform), missing shared libraries causing exec failure, or unwritable temp/working directories.
Related errors
- NATIVE_EXECUTION_PROCESS_LAUNCH_ERROR
- NATIVE_EXECUTION_PROCESS_LAUNCH_ERROR
- NATIVE_EXECUTION_BINARY_NOT_EXIST
- Failed to create Credentials from file
- Configured staging path is not a directory:
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/2ce46ebd51b9568a.
Report an issue: GitHub.