Skip to content

fix: ignore reader-side parquet.hadoop.vectored.io.enabled in Iceberg native-write detection - #5410

Merged
kazuyukitanimura merged 2 commits into
apache:mainfrom
snmvaughan:fix/ignore-vectored-io-hadoop-conf
Aug 21, 2026
Merged

fix: ignore reader-side parquet.hadoop.vectored.io.enabled in Iceberg native-write detection#5410
kazuyukitanimura merged 2 commits into
apache:mainfrom
snmvaughan:fix/ignore-vectored-io-hadoop-conf

Conversation

@snmvaughan

Copy link
Copy Markdown
Contributor

CometIcebergNativeWrite's requireNoParquetHadoopConfOverrides (added in #5298) walks the entire session Hadoop Configuration and returns an Unsupported fall-back reason for any key starting with parquet.. The intent is sound (a parquet.* key in the Hadoop conf reaches iceberg-java's writer but not Comet's native writer), but the predicate is too broad: it checks reader-side parquet.* keys the same as writer-side ones.

parquet.hadoop.vectored.io.enabled is a reader-side vectored-IO knob:

  • Declared in parquet-hadoop as org.apache.parquet.hadoop.ParquetInputFormat.HADOOP_VECTORED_IO_ENABLED with default true in parquet-hadoop 1.16+.
  • Only consulted by parquet-mr's Hadoop reader path (via HadoopReadOptions.useHadoopVectoredIo); iceberg-java's writer never reads it.

Any environment that seeds it into the session Hadoop configuration trips this rule, and every otherwise-Compatible Iceberg V2 write is silently mis-classified as Unsupported — the native writer is disabled without the user having changed any writer-relevant setting.

Which issue does this PR close?

Closes #.

Rationale for this change

Avoid mis-classifying Compatible Iceberg V2 writes as Unsupported due to well-known parquet reader settings.

What changes are included in this PR?

Add an IgnoredHadoopParquetConfKeys set containing parquet.hadoop.vectored.io.enabled and consult it inside the parquet.* walk before emitting the fall-back reason. The broad startsWith("parquet.") gate remains in place for every writer-relevant knob.

How are these changes tested?

Add a regression test that pins
parquet.hadoop.vectored.io.enabled=true in the session Hadoop configuration via withSQLConf and asserts Compatible. The existing negative test ("fall-back: parquet.* key in the session Hadoop configuration", keyed on parquet.block.size) continues to exercise the rejection path for real writer-relevant parquet.* keys.

Steve Vaughan Jr and others added 2 commits August 21, 2026 14:02
… native-write detection

Avoid mis-classifying Compatible Iceberg V2 writes as Unsupported due to
well-known parquet reader settings.

CometIcebergNativeWrite's `requireNoParquetHadoopConfOverrides` (added
in apache#5298) walks the entire session Hadoop Configuration and returns an
`Unsupported` fall-back reason for any key starting with `parquet.`.
The intent is sound (a `parquet.*` key in the Hadoop conf reaches
iceberg-java's writer but not Comet's native writer), but the
predicate is too broad: it checks reader-side `parquet.*` keys the
same as writer-side ones.

`parquet.hadoop.vectored.io.enabled` is a reader-side vectored-IO
knob:

- Declared in parquet-hadoop as
  `org.apache.parquet.hadoop.ParquetInputFormat.HADOOP_VECTORED_IO_ENABLED`
  with default `true` in parquet-hadoop 1.16+.
- Only consulted by parquet-mr's Hadoop reader path (via
  `HadoopReadOptions.useHadoopVectoredIo`); iceberg-java's writer
  never reads it.

Any environment that seeds it into the session Hadoop configuration
trips this rule, and every otherwise-Compatible Iceberg V2 write is
silently mis-classified as Unsupported — the native writer is
disabled without the user having changed any writer-relevant setting.

Add an `IgnoredHadoopParquetConfKeys` set containing
`parquet.hadoop.vectored.io.enabled` and consult it inside the
`parquet.*` walk before emitting the fall-back reason. The broad
`startsWith("parquet.")` gate remains in place for every
writer-relevant knob.

Add a regression test that pins
`parquet.hadoop.vectored.io.enabled=true` in the session Hadoop
configuration via `withSQLConf` and asserts Compatible. The existing
negative test ("fall-back: parquet.* key in the session Hadoop
configuration", keyed on `parquet.block.size`) continues to exercise
the rejection path for real writer-relevant `parquet.*` keys.

@kazuyukitanimura kazuyukitanimura left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks
pending ci

@kazuyukitanimura
kazuyukitanimura merged commit 367ca64 into apache:main Aug 21, 2026
71 checks passed
@kazuyukitanimura

Copy link
Copy Markdown
Contributor

Thanks merged @snmvaughan

@snmvaughan
snmvaughan deleted the fix/ignore-vectored-io-hadoop-conf branch August 21, 2026 21:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants