This is an automated email from the ASF dual-hosted git repository.

github-actions[bot] pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/datafusion-comet.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 1542a476ff Publish built docs triggered by 
d62d3382ac5db67f185dc9f77544a5cefd2002ab
1542a476ff is described below

commit 1542a476ffffb943e7649f09b8406087ab7c60c0
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Sun Sep 20 16:18:29 2026 +0000

    Publish built docs triggered by d62d3382ac5db67f185dc9f77544a5cefd2002ab
---
 _sources/index.md.txt                          |  3 +-
 _sources/user-guide/latest/iceberg.md.txt      |  6 ++-
 _sources/user-guide/latest/installation.md.txt |  6 ++-
 _sources/user-guide/latest/pyarrow-udfs.md.txt |  1 +
 _sources/user-guide/latest/tuning.md.txt       | 52 ++++++++++++++++++++++++++
 index.html                                     |  3 +-
 searchindex.js                                 |  2 +-
 user-guide/latest/iceberg.html                 |  6 ++-
 user-guide/latest/installation.html            |  6 ++-
 user-guide/latest/pyarrow-udfs.html            |  1 +
 user-guide/latest/tuning.html                  | 41 ++++++++++++++++++++
 11 files changed, 116 insertions(+), 11 deletions(-)

diff --git a/_sources/index.md.txt b/_sources/index.md.txt
index 166fb6884d..facd9b8f0b 100644
--- a/_sources/index.md.txt
+++ b/_sources/index.md.txt
@@ -38,7 +38,8 @@ Runs your existing Spark queries on the Apache DataFusion 
native engine, no code
 <span class="term-line term-indent">--conf 
spark.plugins=org.apache.spark.CometPlugin \</span>
 <span class="term-line term-indent">--conf 
spark.shuffle.manager=org.apache.spark.sql.comet.execution.shuffle.CometShuffleManager
 \</span>
 <span class="term-line term-indent">--conf spark.memory.offHeap.enabled=true 
\</span>
-<span class="term-line term-indent">--conf spark.memory.offHeap.size=4g</span>
+<span class="term-line term-indent">--conf spark.memory.offHeap.size=4g 
\</span>
+<span class="term-line term-indent">--conf 
spark.executor.memoryOverhead=2g</span>
 <span class="term-line term-spacer"></span>
 <span class="term-line term-comment">// Your existing queries now run on the 
DataFusion native engine</span>
 <span class="term-line"><span class="term-prompt">scala&gt;</span> 
spark.sql(<span class="term-str">"SELECT category, COUNT(*) FROM events GROUP 
BY category"</span>).show()</span>
diff --git a/_sources/user-guide/latest/iceberg.md.txt 
b/_sources/user-guide/latest/iceberg.md.txt
index ed23bfb918..19f0f80f77 100644
--- a/_sources/user-guide/latest/iceberg.md.txt
+++ b/_sources/user-guide/latest/iceberg.md.txt
@@ -45,7 +45,8 @@ $SPARK_HOME/bin/spark-shell \
     --conf 
spark.shuffle.manager=org.apache.spark.sql.comet.execution.shuffle.CometShuffleManager
 \
     --conf spark.comet.explain.fallback.enabled=true \
     --conf spark.memory.offHeap.enabled=true \
-    --conf spark.memory.offHeap.size=2g
+    --conf spark.memory.offHeap.size=2g \
+    --conf spark.executor.memoryOverhead=2g
 ```
 
 Catalog configuration is standard Iceberg-on-Spark and independent of Comet. 
The native reader has been tested with Hadoop, Hive, and REST catalogs. The 
example above uses a Hadoop catalog. For the full catalog configuration 
reference, see Iceberg's [Spark catalog 
configuration](https://iceberg.apache.org/docs/latest/spark-configuration/#catalogs).
@@ -138,7 +139,8 @@ $SPARK_HOME/bin/spark-shell \
     --conf 
spark.shuffle.manager=org.apache.spark.sql.comet.execution.shuffle.CometShuffleManager
 \
     --conf spark.comet.explain.fallback.enabled=true \
     --conf spark.memory.offHeap.enabled=true \
-    --conf spark.memory.offHeap.size=2g
+    --conf spark.memory.offHeap.size=2g \
+    --conf spark.executor.memoryOverhead=2g
 ```
 
 Note that REST catalogs require explicit namespace creation before creating 
tables:
diff --git a/_sources/user-guide/latest/installation.md.txt 
b/_sources/user-guide/latest/installation.md.txt
index f7ee94edd8..978a6532bc 100644
--- a/_sources/user-guide/latest/installation.md.txt
+++ b/_sources/user-guide/latest/installation.md.txt
@@ -116,7 +116,8 @@ $SPARK_HOME/bin/spark-shell \
     --conf 
spark.shuffle.manager=org.apache.spark.sql.comet.execution.shuffle.CometShuffleManager
 \
     --conf spark.comet.explain.fallback.enabled=true \
     --conf spark.memory.offHeap.enabled=true \
-    --conf spark.memory.offHeap.size=4g
+    --conf spark.memory.offHeap.size=4g \
+    --conf spark.executor.memoryOverhead=2g
 ```
 
 
@@ -147,7 +148,8 @@ $SPARK_HOME/bin/spark-shell \
     --conf 
spark.shuffle.manager=org.apache.spark.sql.comet.execution.shuffle.CometShuffleManager
 \
     --conf spark.comet.explain.fallback.enabled=true \
     --conf spark.memory.offHeap.enabled=true \
-    --conf spark.memory.offHeap.size=4g
+    --conf spark.memory.offHeap.size=4g \
+    --conf spark.executor.memoryOverhead=2g
 ```
 
 ### Verify Comet enabled for Spark SQL query
diff --git a/_sources/user-guide/latest/pyarrow-udfs.md.txt 
b/_sources/user-guide/latest/pyarrow-udfs.md.txt
index a39235314d..5aab9a61b4 100644
--- a/_sources/user-guide/latest/pyarrow-udfs.md.txt
+++ b/_sources/user-guide/latest/pyarrow-udfs.md.txt
@@ -113,6 +113,7 @@ spark = SparkSession.builder \
     .config("spark.comet.exec.pyarrowUDF.enabled", "true") \
     .config("spark.memory.offHeap.enabled", "true") \
     .config("spark.memory.offHeap.size", "2g") \
+    .config("spark.executor.memoryOverhead", "2g") \
     .getOrCreate()
 
 df = spark.read.parquet("data.parquet")
diff --git a/_sources/user-guide/latest/tuning.md.txt 
b/_sources/user-guide/latest/tuning.md.txt
index 98056ec860..84a3a16ede 100644
--- a/_sources/user-guide/latest/tuning.md.txt
+++ b/_sources/user-guide/latest/tuning.md.txt
@@ -78,7 +78,13 @@ cases, it may be possible to reduce the amount of memory 
allocated to Spark so t
 the same or lower than the original configuration. In other cases, enabling 
Comet may require allocating more memory
 than before. See the [Determining How Much Memory to Allocate] section for 
more details.
 
+Comet needs two things configured: an off-heap pool for it to draw its 
reservations from, and enough executor memory
+overhead to cover the part of its footprint that no pool tracks. See 
[Configuring Comet Memory] and
+[Configuring Executor Memory Overhead].
+
 [Determining How Much Memory to Allocate]: 
#determining-how-much-memory-to-allocate
+[Configuring Comet Memory]: #configuring-comet-memory
+[Configuring Executor Memory Overhead]: #configuring-executor-memory-overhead
 
 ### Configuring Comet Memory
 
@@ -132,6 +138,52 @@ need to spill or have a single spillable operator.
 [shuffle]: #shuffle
 [Advanced Memory Tuning]: #advanced-memory-tuning
 
+### Configuring Executor Memory Overhead
+
+Enabling off-heap memory is not sufficient on its own. Comet also needs room in
+`spark.executor.memoryOverhead`.
+
+`spark.memory.offHeap.size` is a budget, and the cluster manager already sizes 
the executor
+container to include it, so the memory that Comet's operators explicitly 
reserve has room. What does
+not have room is everything Comet allocates without reserving it — the 
untracked categories listed
+under [Configuring Comet Memory]. Those allocations are made by the Rust 
global allocator and live
+in the native heap, outside the JVM heap and outside Spark's off-heap 
allocations, and nothing in
+the container sizing accounts for them. The same applies to Comet's JVM-side 
Arrow buffers.
+
+`spark.executor.memoryOverhead` is the only slack the container has for this, 
and the JVM's own
+non-heap usage — metaspace, code cache, thread stacks, GC structures — is 
already drawing on it.
+
+Work out what the executor already gets before choosing a value. When
+`spark.executor.memoryOverhead` is unset, Spark derives the overhead as
+`max(spark.executor.memoryOverheadFactor * spark.executor.memory, 384 MiB)`. 
The factor defaults to
+`0.1`, except for PySpark and SparkR applications submitted to Kubernetes in 
cluster mode, where it
+defaults to `0.4`. On Spark 4.0 and later the floor is configurable through
+`spark.executor.minMemoryOverhead`. Setting `spark.executor.memoryOverhead` 
**replaces** the derived
+value rather than adding to it, so a value below what is derived today shrinks 
the container instead
+of growing it.
+
+For a small executor, `2g` is a reasonable starting point. A 4 GiB executor 
derives only 409 MiB, so
+this is a real increase:
+
+```
+spark.executor.memoryOverhead=2g
+```
+
+A 32 GiB executor, on the other hand, already derives 3276 MiB, and the same 
setting would take away
+1228 MiB. For executors that large, either pick an absolute value above what 
is derived today, or
+raise `spark.executor.memoryOverheadFactor` instead so that the overhead keeps 
scaling with executor
+size:
+
+```
+spark.executor.memoryOverheadFactor=0.2
+```
+
+Raise the value further if executors are killed by the cluster manager (on 
Kubernetes,
+`ExecutorLostFailure` with exit code 137) rather than failing with a 
task-level out-of-memory error.
+
+Note that on Kubernetes and YARN the overhead is added to the container size, 
so raising it reduces
+how many executors fit on a node.
+
 ### Determining How Much Memory to Allocate
 
 Generally, increasing the amount of memory allocated to Comet will improve 
query performance by reducing the
diff --git a/index.html b/index.html
index 80db24bc21..6c19c2c4be 100644
--- a/index.html
+++ b/index.html
@@ -408,7 +408,8 @@ Runs your existing Spark queries on the Apache DataFusion 
native engine, no code
 <span class="term-line term-indent">--conf 
spark.plugins=org.apache.spark.CometPlugin \</span>
 <span class="term-line term-indent">--conf 
spark.shuffle.manager=org.apache.spark.sql.comet.execution.shuffle.CometShuffleManager
 \</span>
 <span class="term-line term-indent">--conf spark.memory.offHeap.enabled=true 
\</span>
-<span class="term-line term-indent">--conf spark.memory.offHeap.size=4g</span>
+<span class="term-line term-indent">--conf spark.memory.offHeap.size=4g 
\</span>
+<span class="term-line term-indent">--conf 
spark.executor.memoryOverhead=2g</span>
 <span class="term-line term-spacer"></span>
 <span class="term-line term-comment">// Your existing queries now run on the 
DataFusion native engine</span>
 <span class="term-line"><span class="term-prompt">scala&gt;</span> 
spark.sql(<span class="term-str">"SELECT category, COUNT(*) FROM events GROUP 
BY category"</span>).show()</span>
diff --git a/searchindex.js b/searchindex.js
index 5cae72553b..55f2d6fb31 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles": {"!": [[56, "id1"]], "%": [[54, "id1"]], "&": 
[[44, "id1"]], "*": [[54, "id2"]], "+": [[54, "id3"]], "-": [[54, "id4"]], "/": 
[[54, "id5"]], "1. Format Your Code": [[41, "format-your-code"]], "1. Install 
Comet": [[62, "install-comet"], [73, "install-comet"]], "1. Native Operators 
(nativeExecs map)": [[28, "native-operators-nativeexecs-map"]], "2. Build and 
Verify": [[41, "build-and-verify"]], "2. Clone Iceberg and Apply Diff": [[62, 
"clone-iceberg-and-apply- [...]
\ No newline at end of file
+Search.setIndex({"alltitles": {"!": [[56, "id1"]], "%": [[54, "id1"]], "&": 
[[44, "id1"]], "*": [[54, "id2"]], "+": [[54, "id3"]], "-": [[54, "id4"]], "/": 
[[54, "id5"]], "1. Format Your Code": [[41, "format-your-code"]], "1. Install 
Comet": [[62, "install-comet"], [73, "install-comet"]], "1. Native Operators 
(nativeExecs map)": [[28, "native-operators-nativeexecs-map"]], "2. Build and 
Verify": [[41, "build-and-verify"]], "2. Clone Iceberg and Apply Diff": [[62, 
"clone-iceberg-and-apply- [...]
\ No newline at end of file
diff --git a/user-guide/latest/iceberg.html b/user-guide/latest/iceberg.html
index 56dcef4917..916b2fc357 100644
--- a/user-guide/latest/iceberg.html
+++ b/user-guide/latest/iceberg.html
@@ -798,7 +798,8 @@ matching your Spark and Scala versions (Comet also ships 
Spark 3.5 / Scala 2.13
 <span class="w">    </span>--conf<span class="w"> 
</span>spark.shuffle.manager<span 
class="o">=</span>org.apache.spark.sql.comet.execution.shuffle.CometShuffleManager<span
 class="w"> </span><span class="se">\</span>
 <span class="w">    </span>--conf<span class="w"> 
</span>spark.comet.explain.fallback.enabled<span class="o">=</span><span 
class="nb">true</span><span class="w"> </span><span class="se">\</span>
 <span class="w">    </span>--conf<span class="w"> 
</span>spark.memory.offHeap.enabled<span class="o">=</span><span 
class="nb">true</span><span class="w"> </span><span class="se">\</span>
-<span class="w">    </span>--conf<span class="w"> 
</span>spark.memory.offHeap.size<span class="o">=</span>2g
+<span class="w">    </span>--conf<span class="w"> 
</span>spark.memory.offHeap.size<span class="o">=</span>2g<span class="w"> 
</span><span class="se">\</span>
+<span class="w">    </span>--conf<span class="w"> 
</span>spark.executor.memoryOverhead<span class="o">=</span>2g
 </pre></div>
 </div>
 <p>Catalog configuration is standard Iceberg-on-Spark and independent of 
Comet. The native reader has been tested with Hadoop, Hive, and REST catalogs. 
The example above uses a Hadoop catalog. For the full catalog configuration 
reference, see Iceberg’s <a class="reference external" 
href="https://iceberg.apache.org/docs/latest/spark-configuration/#catalogs";>Spark
 catalog configuration</a>.</p>
@@ -886,7 +887,8 @@ configure Spark to use a REST catalog with Comet’s native 
Iceberg scan:</p>
 <span class="w">    </span>--conf<span class="w"> 
</span>spark.shuffle.manager<span 
class="o">=</span>org.apache.spark.sql.comet.execution.shuffle.CometShuffleManager<span
 class="w"> </span><span class="se">\</span>
 <span class="w">    </span>--conf<span class="w"> 
</span>spark.comet.explain.fallback.enabled<span class="o">=</span><span 
class="nb">true</span><span class="w"> </span><span class="se">\</span>
 <span class="w">    </span>--conf<span class="w"> 
</span>spark.memory.offHeap.enabled<span class="o">=</span><span 
class="nb">true</span><span class="w"> </span><span class="se">\</span>
-<span class="w">    </span>--conf<span class="w"> 
</span>spark.memory.offHeap.size<span class="o">=</span>2g
+<span class="w">    </span>--conf<span class="w"> 
</span>spark.memory.offHeap.size<span class="o">=</span>2g<span class="w"> 
</span><span class="se">\</span>
+<span class="w">    </span>--conf<span class="w"> 
</span>spark.executor.memoryOverhead<span class="o">=</span>2g
 </pre></div>
 </div>
 <p>Note that REST catalogs require explicit namespace creation before creating 
tables:</p>
diff --git a/user-guide/latest/installation.html 
b/user-guide/latest/installation.html
index f36d55f8ad..57fca0f0d5 100644
--- a/user-guide/latest/installation.html
+++ b/user-guide/latest/installation.html
@@ -919,7 +919,8 @@ and pick the jar with the newest timestamp. Then use it as 
described in
 <span class="w">    </span>--conf<span class="w"> 
</span>spark.shuffle.manager<span 
class="o">=</span>org.apache.spark.sql.comet.execution.shuffle.CometShuffleManager<span
 class="w"> </span><span class="se">\</span>
 <span class="w">    </span>--conf<span class="w"> 
</span>spark.comet.explain.fallback.enabled<span class="o">=</span><span 
class="nb">true</span><span class="w"> </span><span class="se">\</span>
 <span class="w">    </span>--conf<span class="w"> 
</span>spark.memory.offHeap.enabled<span class="o">=</span><span 
class="nb">true</span><span class="w"> </span><span class="se">\</span>
-<span class="w">    </span>--conf<span class="w"> 
</span>spark.memory.offHeap.size<span class="o">=</span>4g
+<span class="w">    </span>--conf<span class="w"> 
</span>spark.memory.offHeap.size<span class="o">=</span>4g<span class="w"> 
</span><span class="se">\</span>
+<span class="w">    </span>--conf<span class="w"> 
</span>spark.executor.memoryOverhead<span class="o">=</span>2g
 </pre></div>
 </div>
 </section>
@@ -945,7 +946,8 @@ source releases, or from the latest code in the GitHub 
repository.</p>
 <span class="w">    </span>--conf<span class="w"> 
</span>spark.shuffle.manager<span 
class="o">=</span>org.apache.spark.sql.comet.execution.shuffle.CometShuffleManager<span
 class="w"> </span><span class="se">\</span>
 <span class="w">    </span>--conf<span class="w"> 
</span>spark.comet.explain.fallback.enabled<span class="o">=</span><span 
class="nb">true</span><span class="w"> </span><span class="se">\</span>
 <span class="w">    </span>--conf<span class="w"> 
</span>spark.memory.offHeap.enabled<span class="o">=</span><span 
class="nb">true</span><span class="w"> </span><span class="se">\</span>
-<span class="w">    </span>--conf<span class="w"> 
</span>spark.memory.offHeap.size<span class="o">=</span>4g
+<span class="w">    </span>--conf<span class="w"> 
</span>spark.memory.offHeap.size<span class="o">=</span>4g<span class="w"> 
</span><span class="se">\</span>
+<span class="w">    </span>--conf<span class="w"> 
</span>spark.executor.memoryOverhead<span class="o">=</span>2g
 </pre></div>
 </div>
 <section id="verify-comet-enabled-for-spark-sql-query">
diff --git a/user-guide/latest/pyarrow-udfs.html 
b/user-guide/latest/pyarrow-udfs.html
index f995c7487d..a650f2a195 100644
--- a/user-guide/latest/pyarrow-udfs.html
+++ b/user-guide/latest/pyarrow-udfs.html
@@ -883,6 +883,7 @@ worker. Both confs can be set independently.</p>
     <span class="o">.</span><span class="n">config</span><span 
class="p">(</span><span 
class="s2">"spark.comet.exec.pyarrowUDF.enabled"</span><span class="p">,</span> 
<span class="s2">"true"</span><span class="p">)</span> \
     <span class="o">.</span><span class="n">config</span><span 
class="p">(</span><span class="s2">"spark.memory.offHeap.enabled"</span><span 
class="p">,</span> <span class="s2">"true"</span><span class="p">)</span> \
     <span class="o">.</span><span class="n">config</span><span 
class="p">(</span><span class="s2">"spark.memory.offHeap.size"</span><span 
class="p">,</span> <span class="s2">"2g"</span><span class="p">)</span> \
+    <span class="o">.</span><span class="n">config</span><span 
class="p">(</span><span class="s2">"spark.executor.memoryOverhead"</span><span 
class="p">,</span> <span class="s2">"2g"</span><span class="p">)</span> \
     <span class="o">.</span><span class="n">getOrCreate</span><span 
class="p">()</span>
 
 <span class="n">df</span> <span class="o">=</span> <span 
class="n">spark</span><span class="o">.</span><span class="n">read</span><span 
class="o">.</span><span class="n">parquet</span><span class="p">(</span><span 
class="s2">"data.parquet"</span><span class="p">)</span>
diff --git a/user-guide/latest/tuning.html b/user-guide/latest/tuning.html
index fc3dc849fa..cfbaf18085 100644
--- a/user-guide/latest/tuning.html
+++ b/user-guide/latest/tuning.html
@@ -825,6 +825,9 @@ disabled even when configuration overrides are enabled.</p>
 cases, it may be possible to reduce the amount of memory allocated to Spark so 
that overall memory allocation is
 the same or lower than the original configuration. In other cases, enabling 
Comet may require allocating more memory
 than before. See the <a class="reference internal" 
href="#determining-how-much-memory-to-allocate">Determining How Much Memory to 
Allocate</a> section for more details.</p>
+<p>Comet needs two things configured: an off-heap pool for it to draw its 
reservations from, and enough executor memory
+overhead to cover the part of its footprint that no pool tracks. See <a 
class="reference internal" href="#configuring-comet-memory">Configuring Comet 
Memory</a> and
+<a class="reference internal" 
href="#configuring-executor-memory-overhead">Configuring Executor Memory 
Overhead</a>.</p>
 <section id="configuring-comet-memory">
 <h3>Configuring Comet Memory<a class="headerlink" 
href="#configuring-comet-memory" title="Link to this heading">#</a></h3>
 <p>Comet shares an off-heap memory pool with Spark. The size of the pool is
@@ -866,6 +869,43 @@ when there is sufficient memory in order to leave enough 
memory for other operat
 <p>The <code class="docutils literal notranslate"><span 
class="pre">greedy_unified</span></code> pool type implements a greedy 
first-come first-serve limit. This pool works well for queries that do not
 need to spill or have a single spillable operator.</p>
 </section>
+<section id="configuring-executor-memory-overhead">
+<h3>Configuring Executor Memory Overhead<a class="headerlink" 
href="#configuring-executor-memory-overhead" title="Link to this 
heading">#</a></h3>
+<p>Enabling off-heap memory is not sufficient on its own. Comet also needs 
room in
+<code class="docutils literal notranslate"><span 
class="pre">spark.executor.memoryOverhead</span></code>.</p>
+<p><code class="docutils literal notranslate"><span 
class="pre">spark.memory.offHeap.size</span></code> is a budget, and the 
cluster manager already sizes the executor
+container to include it, so the memory that Comet’s operators explicitly 
reserve has room. What does
+not have room is everything Comet allocates without reserving it — the 
untracked categories listed
+under <a class="reference internal" 
href="#configuring-comet-memory">Configuring Comet Memory</a>. Those 
allocations are made by the Rust global allocator and live
+in the native heap, outside the JVM heap and outside Spark’s off-heap 
allocations, and nothing in
+the container sizing accounts for them. The same applies to Comet’s JVM-side 
Arrow buffers.</p>
+<p><code class="docutils literal notranslate"><span 
class="pre">spark.executor.memoryOverhead</span></code> is the only slack the 
container has for this, and the JVM’s own
+non-heap usage — metaspace, code cache, thread stacks, GC structures — is 
already drawing on it.</p>
+<p>Work out what the executor already gets before choosing a value. When
+<code class="docutils literal notranslate"><span 
class="pre">spark.executor.memoryOverhead</span></code> is unset, Spark derives 
the overhead as
+<code class="docutils literal notranslate"><span 
class="pre">max(spark.executor.memoryOverheadFactor</span> <span 
class="pre">*</span> <span class="pre">spark.executor.memory,</span> <span 
class="pre">384</span> <span class="pre">MiB)</span></code>. The factor 
defaults to
+<code class="docutils literal notranslate"><span 
class="pre">0.1</span></code>, except for PySpark and SparkR applications 
submitted to Kubernetes in cluster mode, where it
+defaults to <code class="docutils literal notranslate"><span 
class="pre">0.4</span></code>. On Spark 4.0 and later the floor is configurable 
through
+<code class="docutils literal notranslate"><span 
class="pre">spark.executor.minMemoryOverhead</span></code>. Setting <code 
class="docutils literal notranslate"><span 
class="pre">spark.executor.memoryOverhead</span></code> 
<strong>replaces</strong> the derived
+value rather than adding to it, so a value below what is derived today shrinks 
the container instead
+of growing it.</p>
+<p>For a small executor, <code class="docutils literal notranslate"><span 
class="pre">2g</span></code> is a reasonable starting point. A 4 GiB executor 
derives only 409 MiB, so
+this is a real increase:</p>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">spark</span><span 
class="o">.</span><span class="n">executor</span><span class="o">.</span><span 
class="n">memoryOverhead</span><span class="o">=</span><span 
class="mi">2</span><span class="n">g</span>
+</pre></div>
+</div>
+<p>A 32 GiB executor, on the other hand, already derives 3276 MiB, and the 
same setting would take away
+1228 MiB. For executors that large, either pick an absolute value above what 
is derived today, or
+raise <code class="docutils literal notranslate"><span 
class="pre">spark.executor.memoryOverheadFactor</span></code> instead so that 
the overhead keeps scaling with executor
+size:</p>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">spark</span><span 
class="o">.</span><span class="n">executor</span><span class="o">.</span><span 
class="n">memoryOverheadFactor</span><span class="o">=</span><span 
class="mf">0.2</span>
+</pre></div>
+</div>
+<p>Raise the value further if executors are killed by the cluster manager (on 
Kubernetes,
+<code class="docutils literal notranslate"><span 
class="pre">ExecutorLostFailure</span></code> with exit code 137) rather than 
failing with a task-level out-of-memory error.</p>
+<p>Note that on Kubernetes and YARN the overhead is added to the container 
size, so raising it reduces
+how many executors fit on a node.</p>
+</section>
 <section id="determining-how-much-memory-to-allocate">
 <h3>Determining How Much Memory to Allocate<a class="headerlink" 
href="#determining-how-much-memory-to-allocate" title="Link to this 
heading">#</a></h3>
 <p>Generally, increasing the amount of memory allocated to Comet will improve 
query performance by reducing the
@@ -1220,6 +1260,7 @@ fallback to Spark works, see <a class="reference 
internal" href="understanding-c
 <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" 
href="#adaptive-partial-aggregation">Adaptive Partial Aggregation</a></li>
 <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" 
href="#memory-tuning">Memory Tuning</a><ul class="nav section-nav flex-column">
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#configuring-comet-memory">Configuring Comet Memory</a></li>
+<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#configuring-executor-memory-overhead">Configuring Executor Memory 
Overhead</a></li>
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#determining-how-much-memory-to-allocate">Determining How Much Memory to 
Allocate</a></li>
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#batch-size">Batch Size</a></li>
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#limiting-spill-disk-usage">Limiting Spill Disk Usage</a></li>


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

Reply via email to