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
- Verify the file's level encodings with parquet-tools dump — reference readers decode the same bytes
- Re-obtain the file and retry; corruption in transfer is the most common cause
- If reproducible, regenerate the file with a standard writer
- 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
- Validate nested-column level encodings with parquet-tools for new producers
- Detect bit-rot early with storage-level scrubbing/crc verification
- Log descriptor + maxLevel alongside failures to spot writer bit-width bugs
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
- Could not build the program from JAR file: {}
- Missing JobID. Specify a Job ID to trigger a savepoint.
- Triggering a detached savepoint for the job {} failed.
- Failed to dispose the savepoint '{}'.
- Missing JobID. Specify a Job ID to manipulate a checkpoint.
AI-assisted analysis of apache/flink@2f3c205e92 (2026-08-14).
Data as JSON: /api/errors/4d4e8ca31e680c66.
Report an issue: GitHub.