apache / apache/parquet-java

OutOfMemoryError in job commit / ParquetMetadataConverter

Offen
#1,436 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Component: Java Component: Parquet Priority: Critical Type: bug
Vorherrschende Sprache
Java
Sterne
3.1k
Forks
1.6k
Ø Merge
3 T. 12 Std.
Gemergte PRs (30 T.)
33

Beschreibung

We're trying to write some 14B rows (about 3.6 TB in parquets) to parquet files. When our ETL job finishes, it throws this exception, and the status is "died in job commit".

2015-05-14 09:24:28,158 FATAL [CommitterEvent Processor #4] org.apache.hadoop.yarn.YarnUncaughtExceptionHandler: Thread Thread[CommitterEvent Processor #4,5,main] threw an Error. Shutting down now...
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.nio.ByteBuffer.wrap(ByteBuffer.java:373)
at java.nio.ByteBuffer.wrap(ByteBuffer.java:396)
at parquet.format.Statistics.setMin(Statistics.java:237)
at parquet.format.converter.ParquetMetadataConverter.toParquetStatistics(ParquetMetadataConverter.java:243)
at parquet.format.converter.ParquetMetadataConverter.addRowGroup(ParquetMetadataConverter.java:167)
at parquet.format.converter.ParquetMetadataConverter.toParquetMetadata(ParquetMetadataConverter.java:79)
at parquet.hadoop.ParquetFileWriter.serializeFooter(ParquetFileWriter.java:405)
at parquet.hadoop.ParquetFileWriter.writeMetadataFile(ParquetFileWriter.java:433)
at parquet.hadoop.ParquetFileWriter.writeMetadataFile(ParquetFileWriter.java:423)
at parquet.hadoop.ParquetOutputCommitter.writeMetaDataFile(ParquetOutputCommitter.java:58)
at parquet.hadoop.mapred.MapredParquetOutputCommitter.commitJob(MapredParquetOutputCommitter.java:43)
at org.apache.hadoop.mapred.OutputCommitter.commitJob(OutputCommitter.java:259)
at org.apache.hadoop.mapreduce.v2.app.commit.CommitterEventHandler$EventProcessor.handleJobCommit(CommitterEventHandler.java:253)
at org.apache.hadoop.mapreduce.v2.app.commit.CommitterEventHandler$EventProcessor.run(CommitterEventHandler.java:216)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

This seems to have something to do with the _metadata file creation, as the parquet files are perfectly fine and usable. Also I'm not sure how to alleviate this (i.e. add more heap space) since the crash is outside the Map/Reduce tasks themselves but seems in the job/application controller itself.

**Environment**: CentOS, MapR,. Scalding
**Reporter**: [hy5446](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=hy5446)

**Note**: *This issue was originally created as [PARQUET-282](https://issues.apache.org/jira/browse/PARQUET-282). Please see the [migration documentation](https://issues.apache.org/jira/browse/PARQUET-2502) for further details.*

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginne mit parquet.hadoop.ParquetOutputCommitter.commitJob und ParquetFileWriter.writeMetadataFile, und verfolge dann ParquetMetadataConverter.toParquetMetadata und toParquetStatistics. Reproduziere den Fehler mit einer großen Anzahl von Row Groups und untersuche den generierten _metadata-Pfad; abgeschlossen ist die Aufgabe, wenn der Job-Commit ohne den gemeldeten OutOfMemoryError abgeschlossen wird und die Parquet-Dateien weiterhin verwendbar sind.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
data-engineering
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.