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

  1. Read the wrapped IOException message ('Cannot start native process: %s') for the exact root cause
  2. Verify the native binary path exists and is executable for the user running the Spark executor
  3. Check the host matches the binary's OS/architecture and required shared libraries are installed
  4. 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

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


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