apache/flink · critical · CliArgsException

Missing JobID. Specify a JobID to cancel a job.

Error message

Missing JobID. Specify a JobID to cancel a job.

What it means

Thrown from BooleanColumnReader.readBoolean when reading the next byte of a bit-packed boolean page fails — the underlying dataInputStream is exhausted while more boolean values are still expected per page metadata. It wraps an IOException from the stream read.

Solutions

  1. Verify file integrity (size, CRC) and re-read a clean copy
  2. Check whether the boolean column reads fine in `parquet-tools`/Spark — isolate Flink-vs-file
  3. If the file is fine but Flink fails, capture a minimal reproducer and report to FLINK JIRA (parquet component)
  4. As a stopgap, rewrite the file with a standard writer
Defensive patterns

Strategy: try-catch

Try / catch

try {
    reader.readToVector(n, vector);
} catch (ParquetDecodingException e) {
    if ("Failed to read a byte".equals(e.getMessage())) {
        // boolean page truncated — quarantine and skip file
    } else throw e;
}

Prevention

When it happens

Trigger: A BOOLEAN column's PLAIN page contains fewer bytes than pageValueCount/8 rounded up; definition-level counts disagree with actual data bytes; truncated or corrupted boolean pages.

Common situations: Corrupt boolean columns in files from object stores; files from writers with boolean page-sizing bugs; partial writes of the last row group.

Related errors


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

Appendix: source

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

                                                            .toMillis(),
                                                    TimeUnit.MILLISECONDS);
                        } catch (Exception e) {
                            throw new FlinkException("Could not cancel job " + jobId + '.', e);
                        }
                        logAndSysout(
                                "Cancelled job "
                                        + jobId
                                        + ". Savepoint stored in "
                                        + savepointPath
                                        + '.');
                    });
        } else {
            final JobID jobId;

            if (cleanedArgs.length > 0) {
                jobId = parseJobId(cleanedArgs[0]);
            } else {
                throw new CliArgsException("Missing JobID. Specify a JobID to cancel a job.");
            }

            logAndSysout("Cancelling job " + jobId + '.');

            runClusterAction(
                    activeCommandLine,
                    commandLine,
                    (clusterClient, effectiveConfiguration) -> {
                        try {
                            clusterClient
                                    .cancel(jobId)
                                    .get(
                                            getClientTimeout(effectiveConfiguration).toMillis(),
                                            TimeUnit.MILLISECONDS);
                        } catch (Exception e) {
                            throw new FlinkException("Could not cancel job " + jobId + '.', e);
                        }
                    });

View on GitHub (pinned to 2f3c205e92)