You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@drill.apache.org by Alvin Chyan <Al...@turn.com> on 2015/06/22 23:20:29 UTC

OOM during flattening

Hi Drill experts,


While attempting to run the query, "select <nestedTableName>.<record>.<column1>, <nestedTableName>.<record>.<column2> from (select flatten(tbl.<nestedTableName>.`array`) <record> from dfs.`/server/apache-drill-1.0.0/sample-data/myfile` tbl ) as <nestedTableName>;"


I run into an OOM error.  It seems to be running out of memory during the flattening process.


java.lang.RuntimeException: java.sql.SQLException: RESOURCE ERROR: One or more nodes ran out of memory while executing the query.

Fragment 1:4

[Error Id: 69a33085-d059-4e71-a899-e181ed741715 on localhost:31010]

  (org.apache.drill.exec.memory.OutOfMemoryRuntimeException) Failure while reallocating buffer to 16777216 bytes
    org.apache.drill.exec.vector.Float4Vector.reAlloc():192
    org.apache.drill.exec.vector.Float4Vector.copyFromSafe():292
    org.apache.drill.exec.vector.NullableFloat4Vector.copyFromSafe():301
    org.apache.drill.exec.vector.NullableFloat4Vector$TransferImpl.copyValueSafe():266
    org.apache.drill.exec.vector.complex.RepeatedMapVector$RepeatedMapTransferPair.copyValueSafe():355
    org.apache.drill.exec.vector.complex.MapVector$MapTransferPair.copyValueSafe():208
    org.apache.drill.exec.vector.complex.MapVector.copyFromSafe():83
    org.apache.drill.exec.vector.complex.impl.SingleMapReaderImpl.copyAsValue():97
    org.apache.drill.exec.test.generated.FlattenerGen5.doEval():30
    org.apache.drill.exec.test.generated.FlattenerGen5.flattenRecords():93
    org.apache.drill.exec.physical.impl.flatten.FlattenRecordBatch.doWork():153
    org.apache.drill.exec.record.AbstractSingleRecordBatch.innerNext():93
    org.apache.drill.exec.physical.impl.flatten.FlattenRecordBatch.innerNext():119
    org.apache.drill.exec.record.AbstractRecordBatch.next():146
    org.apache.drill.exec.record.AbstractRecordBatch.next():105
    org.apache.drill.exec.record.AbstractRecordBatch.next():95
    org.apache.drill.exec.record.AbstractSingleRecordBatch.innerNext():51
    org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.innerNext():129
    org.apache.drill.exec.record.AbstractRecordBatch.next():146
    org.apache.drill.exec.record.AbstractRecordBatch.next():105
    org.apache.drill.exec.record.AbstractRecordBatch.next():95
    org.apache.drill.exec.record.AbstractSingleRecordBatch.innerNext():51
    org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.innerNext():129
    org.apache.drill.exec.record.AbstractRecordBatch.next():146
    org.apache.drill.exec.physical.impl.BaseRootExec.next():83
    org.apache.drill.exec.physical.impl.SingleSenderCreator$SingleSenderRootExec.innerNext():95
    org.apache.drill.exec.physical.impl.BaseRootExec.next():73
    org.apache.drill.exec.work.fragment.FragmentExecutor$1.run():259
    org.apache.drill.exec.work.fragment.FragmentExecutor$1.run():253
    java.security.AccessController.doPrivileged():-2
    javax.security.auth.Subject.doAs():415
    org.apache.hadoop.security.UserGroupInformation.doAs():1556
    org.apache.drill.exec.work.fragment.FragmentExecutor.run():253
    org.apache.drill.common.SelfCleaningRunnable.run():38
    java.util.concurrent.ThreadPoolExecutor.runWorker():1145
    java.util.concurrent.ThreadPoolExecutor$Worker.run():615
    java.lang.Thread.run():745

    at sqlline.IncrementalRows.hasNext(IncrementalRows.java:73)
    at sqlline.TableOutputFormat$ResizingRowsProvider.next(TableOutputFormat.java:85)
    at sqlline.TableOutputFormat.print(TableOutputFormat.java:116)



I've tried enabling the planner.memory.enable_memory_estimation property, but that didn't help.

I have the following memory settings:

DRILL_MAX_DIRECT_MEMORY="8G"
DRILL_HEAP="4G"

And the file itself is only 1.4 GB.  Is there some other way to trade off performance for reliability?  Also, are there some known limitations with flatten?


Thanks,

Alvin