apache/flink · critical · CliArgsException

Missing JobID. Specify a Job ID to trigger a savepoint.

Error message

Missing JobID. Specify a Job ID to trigger a savepoint.

What it means

Thrown from NestedPrimitiveColumnReader.initDictionary when the Parquet dictionary page for a nested column fails to decode — encoding.initDictionary(descriptor, dictionaryPage) threw an IOException. The dictionary page is corrupt, uses an unsupported dictionary encoding, or its declared size does not match its bytes. The descriptor identifies the column.

Source

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

            runClusterAction(
                    activeCommandLine,
                    commandLine,
                    (clusterClient, effectiveConfiguration) ->
                            disposeSavepoint(
                                    clusterClient,
                                    savepointOptions.getSavepointPath(),
                                    getClientTimeout(effectiveConfiguration)));
        } else {
            String[] cleanedArgs = savepointOptions.getArgs();

            final JobID jobId;

            if (cleanedArgs.length >= 1) {
                String jobIdString = cleanedArgs[0];

                jobId = parseJobId(jobIdString);
            } else {
                throw new CliArgsException(
                        "Missing JobID. " + "Specify a Job ID to trigger a savepoint.");
            }

            final String savepointDirectory;
            if (cleanedArgs.length >= 2) {
                savepointDirectory = cleanedArgs[1];
            } else {
                savepointDirectory = null;
            }

            // Print superfluous arguments
            if (cleanedArgs.length >= 3) {
                logAndSysout(
                        "Provided more arguments than required. Ignoring not needed arguments.");
            }

            runClusterAction(
                    activeCommandLine,

View on GitHub (pinned to 2f3c205e92)

Solutions

  1. Check the cause: decompression failures point to a codec/bundling issue; EOF points to truncation
  2. Ensure the Parquet file's compression codec is supported by the Flink parquet format's classpath (snappy/zstd/lz4/gzip natives available)
  3. Verify with `parquet-tools meta` that the dictionary page parses in a reference implementation; regenerate the file if malformed
  4. Re-obtain the file if transfer corruption is possible
Defensive patterns

Strategy: try-catch

Try / catch

try {
    nestedReader.initDictionaryPage(pageReader, ...);
} catch (IOException e) {
    // 'Could not decode the dictionary for %s' — check cause for codec vs truncation
    if (ExceptionUtils.getRootCause(e) instanceof DecompressionException) fixCodecClasspath();
    else quarantine(file);
}

Prevention

When it happens

Trigger: A nested (list/map/struct) column's DICTIONARY_PAGE with truncated bytes or invalid plain-data length; dictionary page encoding not supported by parquet-mr's initDictionary; decompression producing wrong-sized dictionary data.

Common situations: Corrupt files in HDFS/S3; codec/version mismatch where the writer's compression codec differs from what the reader applies; dictionary pages exceeding size limits written malformed.

Related errors


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