⚡ Apache Spark Distributed Execution
Watch a Spark job run: a driver splits stages into tasks, ships them to executors that run in parallel, and a shuffle synchronises the cluster between stages. Tune executors, parallelism and shuffle to see throughput and Amdahl's-law speedup respond.
Frequently Asked Questions
What do the driver and executors represent in this simulation?
The glowing node at the top is the driver — the single process that builds the physical plan, splits each stage into tasks, and coordinates the run. The ring of nodes below are executors, each an independent JVM process on a worker machine that runs tasks in parallel and reports back to the driver.
What does the shuffle toggle actually change?
With shuffle on, every stage boundary is followed by a synchronisation phase where data particles fly between every pair of executors before the next stage can start, exactly like a groupBy or join that isn't already co-partitioned. With shuffle off, stages pipeline back-to-back with no cross-executor traffic, showing why narrow transformations are so much cheaper than wide ones.
Why does adding executors eventually stop helping throughput?
Amdahl's law: only the parallel portion of the work (per-partition task execution) speeds up with more executors — the serial portion (driver planning and, when shuffle is on, the synchronisation barrier) does not. As executors increase, the theoretical speedup curve flattens toward 1/(1−p).
What is task parallelism controlling here?
It sets how many tasks (partitions) each executor processes concurrently in a stage, similar to spark.executor.cores. Higher parallelism launches more particles per executor per stage, raising throughput until the visualisation's fixed executor slots become the bottleneck.
Watch a Spark job run: a driver splits stages into tasks, ships them to executors that run in parallel, and a shuffle synchronises the cluster between stages — tune executors, task parallelism and shuffle and watch throughput and Amdahl's-law speedup respond.
3D · Three.js / WebGL renderer · 60 FPS target · runs fully client-side, no install