home
diamond Go Premium
Data Engineering Path  ·  PySpark

The Executors Tab: Diagnosing Resource Bottlenecks

If the Jobs and Stages tabs tell you which piece of work is slow, the Executors Tab tells you why — it's the hardware-level view of the Driver and every active Executor, and it's your first stop for anything that smells like a memory or network problem.

Spark Executors Screen Figure 1 — Executors Tab: the Driver plus 3 real Executors, with per-executor task counts, GC time, and shuffle read/write.


Reading the Executors Table

  • Storage Memory (used / total): How much of the executor's memory pool is currently holding cached RDDs/DataFrames. Spark splits executor memory into a Storage region and an Execution region that can borrow from each other — if this number is near its total and you're also seeing task failures, cached data may be getting evicted mid-job, forcing expensive recomputation.
  • Task Time (GC Time): Shown as a fraction of total task time, e.g. 4.2 min (45 s). The single most important ratio on this page — if GC Time is more than roughly 10% of Task Time, the JVM is spending too much of its time reclaiming memory instead of doing work. That's a sign the executor is under memory pressure: too many objects being created (often from inefficient UDFs), or --executor-memory set too low for the partition size.
  • Shuffle Read / Shuffle Write: Bytes transferred across the network per executor. If one executor's shuffle read is dramatically larger than the others, that executor is on the receiving end of a skewed key — cross-reference with the Stages tab's task duration outliers.
  • Active / Failed / Complete Tasks: A steadily climbing Failed Tasks count on one specific executor (rather than spread evenly) usually points at bad hardware or a disk running out of space on that specific node, not a code problem.
  • Blacklisted / Dead executors: An executor that disappears from the "Active" list mid-run was most likely killed by YARN/Kubernetes for exceeding its memory limit (see Scenario: Memory Intensive Join for the container-overhead math), or lost its heartbeat due to a long GC pause.

A Worked Diagnostic Example

Say a job is running 3x slower than last week with no code changes. On the Executors tab you see:

  1. GC Time is 22% of Task Time on 4 out of 12 executors, but near 0% on the rest.
  2. Those same 4 executors show much higher Shuffle Read than the others.

Together, these two signals point at data skew feeding a small number of executors more data than they can comfortably hold — the extra data forces more garbage collection while those executors churn through a disproportionate share of the work. The fix lives on the data side (salting the skewed key, or letting Adaptive Query Execution's skew join optimization handle it), not on the hardware side — throwing more --executor-memory at 4 overloaded executors while the other 8 sit idle just delays the same failure.

Caution

Resist the urge to fix every slow job by increasing --executor-memory. If the Executors tab shows the imbalance concentrated on a handful of executors rather than spread evenly across all of them, you have a skew problem, and more memory only buys you a temporary reprieve before the next larger run OOMs again.


Environment & Storage: Verifying What Actually Ran

Two tabs live right next to Executors and are easy to overlook:

  • Environment Tab: A full dump of every active Spark config, JVM system property, and environment variable as the Driver actually resolved them. When a --conf flag you passed to spark-submit doesn't seem to be taking effect, this is the tab that tells you whether it was ever applied, silently overridden by a cluster default, or simply misspelled.
  • Storage Tab: Every RDD/DataFrame you called .cache() or .persist() on, its Storage Level (e.g. Memory Deserialized 1x Replicated), the fraction currently cached, and its size in memory vs. on disk. If a downstream stage is re-reading from source instead of using your cache, this tab will show the cached fraction dropped below 100% — meaning some partitions were evicted under memory pressure.
Find this content helpful? ☕ Buy me a coffee

Entity Details

Create New Item

celebration
Enjoying the free content?

Create a free account to track your progress and save your place.

Create Free Account
help

Submit Technical Query

Have a question or run into an issue? Describe it below, upload an optional screenshot, and our engineering team will answer it!

image Attach image (optional)

Submit Feedback

build Free Developer Utility Free Tool
gavel

Privacy & Legal Disclaimer

1. Client-Side Browser Processing

All utility tools on DeepEngineerHub (including Image to PDF, Text Formatters, JSON Converters, and Encryptors) execute 100% locally within your client browser using WebAssembly and JavaScript. No uploaded images, text, or documents are transmitted, collected, or stored on remote servers.

2. Limitation of Liability ("As-Is" Provision)

Tools and services are provided free of charge for convenience and educational purposes "as-is" without warranties of any kind. DeepEngineerHub shall not be held liable for any data loss, formatting inconsistencies, or indirect damages resulting from tool usage.

3. Open Source & Third-Party Software

Certain utilities utilize open-source client libraries (such as jsPDF, Mermaid.js, Pyodide) licensed under MIT, Apache, or BSD open licenses. All intellectual property remains with their respective copyright holders.