The default spill directory (/tmp) did not have enough space. We fixed
that. (thanks John)

I altered session to set
planner.memory.max_query_memory_per_node = 17179869184 (16GB)
planner.enable_hashjoin=false;
planner.enable_hashadd=false;

We ran our aggregation.

After 7h44m.

We got

Error: RESOURCE ERROR: External Sort encountered an error while spilling to
disk

Fragment 7:35

Caused by org.apache.drill.exec.exception.OutOfMemory: Unable to allocate
buffer of size 65536 (rounded from 37444) due to memory limit. Current
allocation: 681080448.

org.apache.drill.exec.memory.BaseAllocator.buffer(BaseAllocator.java:216)

org.apache.drill.exec.memory.BaseAllocator.buffer(BaseAllocator.java:191)

org.apache.drill.exec.cache.VectorAccessibleSerializable.readFromStream(VectorAccessibleSerializable.java:112)

org.apache.drill.exec.physical.impl.xsort.BatchGroup.getBatch(BatchGroup.java:110)

org.apache.drill.exec.physical.impl.xsort.BatchGroup.getNextIndex(BatchGroup.java:136)

org.apache.drill.exec.test.generated.PriorityQueuedCopierGen975.next(PriorityQueueCopierTemplate.java:76)

org.apache.drill.exec.physical.impl.xsort.ExternalSortBatch.mergeAndSpill(ExternalSortBatch.java:557)


I think we were close to have the query completed, In the Fragment Profiles
Web UI, the 2 bottom major fragment (out of 5) were showing that they were
done.
I had the same query working on a (20x) smaller set of data.
Should I add more mem to planner.memory.max_query_memory_per_node ?



Abdel:
We did get the memory leak below while doing streaming aggregation, when
our /tmp directory was too small.
After fixing that, our streaming  aggregation got us the error above.

Error: SYSTEM ERROR: IllegalStateException: Memory was leaked by query.
Memory leaked: (389120)
Allocator(op:6:51:2:ExternalSort) 2000000/389120/680576640/715827882
(res/actual/peal/limit)

Fragment 6:51

[Error Id: ..... on node014.prod:31010]


  (java.lan.IllegalStateException) Memory was leaked by query. Memory
leaked (389120)
Allocator(op:6:51:2:ExternalSort) 2000000/389120/680576640/715827882
(res/actual/peal/limit)
    org.apache.drill.exec.memory.BaseAllocator.close():492
    org.apache.drill.exec.ops.OperatorContextImpl.close():124
    org.apache.drill.exec.ops.FragmentContext.supressingClose():416
    org.apache.drill.exec.ops.FragmentContext.close():405

org.apache.drill.exec.work.fragment.FragmentExecutor.closeOutResources():343
    org.apache.drill.exec.work.fragment.FragmentExecutor.cleanup():180
    org.apache.drill.exec.work.fragment.FragmentExecutor.run():287
    org.apache.drill.common.SelfCleaningRunnable.run():38
    java.util.concurrentThreadPoolExecutor.runWorker():1142


Thanks guys for your feedback.



On Sat, Mar 12, 2016 at 1:18 AM, Abdel Hakim Deneche <adene...@maprtech.com>
wrote:

> Disabling hash aggregation will default to streaming aggregation + sort.
> This will allow you to handle larger data and spill to disk if necessary.
>
> Like stated in the documentation, starting from Drill 1.5 the default
> memory limit of sort may not be enough to process large data, but you can
> bump it up by increasing planner.memory.max_query_memory_per_node (defaults
> to 2GB), and if necessary reducing planner.width.max_per_node (defaults to
> 75% of number of cores).
>
> You said disabling hash aggregate and hash join causes a memory leak. Can
> you give more details about the error ? the query may fail with an out of
> memory but it shouldn't leak.
>
> On Fri, Mar 11, 2016 at 10:53 PM, John Omernik <j...@omernik.com> wrote:
>
> > I've had some luck disabling multi-phase aggregations on some queries
> where
> > memory was an issue.
> >
> > https://drill.apache.org/docs/guidelines-for-optimizing-aggregation/
> >
> > After I try that, than I typically look at the hash aggregation as you
> have
> > done:
> >
> >
> >
> https://drill.apache.org/docs/sort-based-and-hash-based-memory-constrained-operators/
> >
> > I've had limited success with changing the max_query_memory_per_node and
> > max_width, sometimes it's a weird combination of things that work in
> there.
> >
> > https://drill.apache.org/docs/troubleshooting/#memory-issues
> >
> > Back to your spill stuff if you disable hash aggregation, do you know if
> > your spill directories are setup? That may be part of the issue, I am not
> > sure what the default spill behavior of Drill is for spill directory
> setup.
> >
> >
> >
> > On Fri, Mar 11, 2016 at 2:17 PM, François Méthot <fmetho...@gmail.com>
> > wrote:
> >
> > > Hi,
> > >
> > >    Using version 1.5, DirectMemory is currently set at 32GB, heap is at
> > > 8GB. We have been trying to perform multiple aggregation in one query
> > (see
> > > below) on 40 Billions+ rows stored on 13 nodes. We are using parquet
> > > format.
> > >
> > > We keep getting OutOfMemoryException: Failure allocating buffer..
> > >
> > > on a query that looks like this:
> > >
> > > create table hdfs.`test1234` as
> > > (
> > > select string_field1,
> > >           string_field2,
> > >           min ( int_field3 ),
> > >           max ( int_field4 ),
> > >           count(1),
> > >           count ( distinct int_field5 ),
> > >           count ( distinct int_field6 ),
> > >           count ( distinct string_field7 )
> > >     from hdfs.`/data/`
> > >     group by string_field1, string_field2;
> > > )
> > >
> > > The documentation state:
> > > "Currently, hash-based operations do not spill to disk as needed."
> > >
> > > and
> > >
> > > "If the hash-based operators run out of memory during execution, the
> > query
> > > fails. If large hash operations do not fit in memory on your system,
> you
> > > can disable these operations. When disabled, Drill creates alternative
> > > plans that allow spilling to disk."
> > >
> > > My understanding is that it will fall back to Streaming aggregation,
> > which
> > > required sorting..
> > >
> > > but
> > >
> > > "As of Drill 1.5, ... the sort operator (in queries that ran
> successfully
> > > in previous releases) may not have enough memory, resulting in a failed
> > > query"
> > >
> > > And Indeed, disabling hash agg and hash join resulted in memory leak
> > error.
> > >
> > > So it looks like increasing direct memory our only option.
> > >
> > > Is there a plan to have Hash Aggregation to spill on disk in the next
> > > release?
> > >
> > >
> > > Thanks for your feedback
> > >
> >
>
>
>
> --
>
> Abdelhakim Deneche
>
> Software Engineer
>
>   <http://www.mapr.com/>
>
>
> Now Available - Free Hadoop On-Demand Training
> <
> http://www.mapr.com/training?utm_source=Email&utm_medium=Signature&utm_campaign=Free%20available
> >
>

Reply via email to