You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Nikita Singhvi (Jira)" <ji...@apache.org> on 2026/07/28 09:38:00 UTC
[jira] [Created] (FLINK-40245) Wire parquet.page.size.row.check.min/max conf keys in FlinkParquetBuilder
Nikita Singhvi created FLINK-40245:
--------------------------------------
Summary: Wire parquet.page.size.row.check.min/max conf keys in FlinkParquetBuilder
Key: FLINK-40245
URL: https://issues.apache.org/jira/browse/FLINK-40245
Project: Flink
Issue Type: Bug
Components: Formats (JSON, Avro, Parquet, ORC, SequenceFile)
Reporter: Nikita Singhvi
*Problem:*
FlinkParquetBuilder.createWriter() correctly reads parquet.page.size and
parquet.block.size from conf, but never calls
withMinRowCountForPageSizeCheck() / withMaxRowCountForPageSizeCheck().
This means parquet.page.size.row.check.min and parquet.page.size.row.check.max
are silently ignored regardless of what values are set.
Without frequent page size checks, a single row with a large binary field can
accumulate beyond Integer.MAX_VALUE bytes in the Parquet page buffer, causing:
{code:java}
java.lang.OutOfMemoryError: Size of data exceeded Integer.MAX_VALUE at org.apache.parquet.bytes.CapacityByteArrayOutputStream.addSlab at org.apache.flink.formats.parquet.row.ParquetRowDataWriter$BinaryWriter.write {code}
*Fix:*
Add two missing method calls in FlinkParquetBuilder.createWriter():
{code:java}
.withMinRowCountForPageSizeCheck(getMinRowCountForPageSizeCheck(conf)) .withMaxRowCountForPageSizeCheck(getMaxRowCountForPageSizeCheck(conf)) {code}
*Steps to Reproduce:*
1. Configure a Flink job writing large binary fields to Parquet
2. Set parquet.page.size.row.check.min=1 and parquet.page.size.row.check.max=1 in conf
3. Observe that the settings have no effect — Parquet still uses defaults (100, 10000)
4. With large enough binary fields, OOM occurs
{code:java}
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)