apache/flink · critical · FileNotFoundException

JAR file does not exist: {}

Error message

JAR file does not exist: {}

What it means

Thrown as ParquetDecodingException from NestedPrimitiveColumnReader.newRLEIterator when constructing the RunLengthBitPackingHybridDecoder over a column's level bytes fails with IOException — the repetition/definition level stream is unreadable (malformed RLE header, truncated bytes, or toByteArray failing). Column descriptor is included.

Source

Thrown at flink-clients/src/main/java/org/apache/flink/client/cli/CliFrontend.java:1070

                .setEntryPointClassName(entryPointClass)
                .setConfiguration(configuration)
                .setSavepointRestoreSettings(runOptions.getSavepointRestoreSettings())
                .setArguments(programArgs)
                .build();
    }

    /**
     * Gets the JAR file from the path.
     *
     * @param jarFilePath The path of JAR file
     * @return The JAR file
     * @throws FileNotFoundException The JAR file does not exist.
     */
    private File getJarFile(String jarFilePath) throws FileNotFoundException {
        File jarFile = new File(jarFilePath);
        // Check if JAR file exists
        if (!jarFile.exists()) {
            throw new FileNotFoundException("JAR file does not exist: " + jarFile);
        } else if (!jarFile.isFile()) {
            throw new FileNotFoundException("JAR file is not a file: " + jarFile);
        }
        return jarFile;
    }

    // --------------------------------------------------------------------------------------------
    //  Logging and Exception Handling
    // --------------------------------------------------------------------------------------------

    /**
     * Displays an exception message for incorrect command line arguments.
     *
     * @param e The exception to display.
     * @return The return code for the process.
     */
    private static int handleArgException(CliArgsException e) {
        LOG.error("Invalid command line arguments.", e);

View on GitHub (pinned to 2f3c205e92)

Solutions

  1. Verify the file's level encodings with parquet-tools dump — reference readers decode the same bytes
  2. Re-obtain the file and retry; corruption in transfer is the most common cause
  3. If reproducible, regenerate the file with a standard writer
  4. Report persistent cases with a reproducer to the writer project or Flink
Defensive patterns

Strategy: try-catch

Try / catch

try {
    nestedReader.readAndNewVector(...);
} catch (ParquetDecodingException e) {
    if (String.valueOf(e.getMessage()).contains("Could not read levels")) {
        quarantine(file); // level stream corrupt — deterministic
    } else throw e;
}

Prevention

When it happens

Trigger: Level byte arrays shorter than the bit-width run headers require; corrupt RLE/bit-packed blocks in repetition or definition levels of a nested column; inconsistent maxLevel vs. actual encoded width.

Common situations: Corrupt nested-column files; writers emitting level streams with wrong bit widths; partial uploads affecting level sections.

Related errors


AI-assisted analysis of apache/flink@2f3c205e92 (2026-08-14). Data as JSON: /api/errors/4d4e8ca31e680c66. Report an issue: GitHub.