[ 
https://issues.apache.org/jira/browse/SPARK-60998?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dongjoon Hyun resolved SPARK-60998.
-----------------------------------
    Fix Version/s: 4.2.2
                   4.3.1
                   4.4.0
       Resolution: Fixed

Issue resolved by pull request 60167
[https://github.com/apache/spark/pull/60167]

> LongToUnsafeRowMap reserves a full page (up to 64 MiB) of execution memory 
> per map, causing OOM with many shuffled hash joins in one task
> -----------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: SPARK-60998
>                 URL: https://issues.apache.org/jira/browse/SPARK-60998
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 4.2.0
>            Reporter: L. C. Hsieh
>            Assignee: L. C. Hsieh
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 4.2.2, 4.3.1, 4.4.0
>
>
> Since SPARK-54116 (4.2.0), LongToUnsafeRowMap allocates its memory through 
> MemoryConsumer.allocatePage. allocatePage rounds every request up to the 
> consumer's page size, which is spark.buffer.pageSize, or a value derived from 
> the executor memory and cores of up to 64 MiB. Before SPARK-54116 the map 
> started with a 1 MiB page and acquired execution memory for exactly what it 
> allocated.
> So each LongToUnsafeRowMap now reserves at least one full page, typically 64 
> MiB, even when it holds only a few rows. Page growth (2 MiB, 4 MiB, ...) and 
> deserialization are rounded up the same way.
> When one task keeps many of these maps alive at once, for example a stage 
> with a long chain of shuffled hash joins without AQE, the task runs out of 
> execution memory long before the maps hold that much data:
> {code} [UNABLE_TO_ACQUIRE_MEMORY] Unable to acquire 2048 bytes of memory, got 
> 0. Memory used by task ... grouped by consumer: 
> org.apache.spark.sql.execution.joins.LongToUnsafeRowMap@...: 64.0 MiB 
> org.apache.spark.sql.execution.joins.LongToUnsafeRowMap@...: 64.0 MiB ... 
> {code}
> The same query passes with the 1 MiB initial page used before SPARK-54116. 
> This affects both on-heap and off-heap memory modes.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to