The Open-Source Spark Monitoring Tool That Fixes Performance Bottlenecks and Reduces EMR & Databricks Costs
A job that should run in minutes has been running for almost a day. You have no idea what's going on. You've refreshed the Spark Web UI seventeen times. The DataFrame tab shows a sprawling execution plan with cryptic operators like HashAggregate and Exchange. Your job spilled 200GB to disk, but you can't tell which stage caused it or why.
Sound familiar? This is the daily reality for data engineers working with Apache Spark at scale.
The Spark Web UI Problem No One Talks About
Apache Spark's native Web UI was built for distributed systems researchers, not production data engineers. It provides raw performance data but leaves root cause analysis entirely to you. When a job running on EMR or Databricks fails after burning through $500 of compute, the UI gives you fragments: stage metrics here, executor logs there, a physical plan that requires a PhD to decode.
Trust me on this (Daniel here): I'm a PhD dropout, so I know what academic complexity looks like. The native Spark UI is on that level. It hasn't fundamentally changed since Spark was introduced back in 2010. It's 2025 now. Things have to change.
The feedback loop is broken. You make a change, resubmit the job, wait for it to fail again, then repeat. On complex ETL pipelines processing terabytes on S3, this cycle can take hours per iteration.

Traditional Spark Web UI - complex and hard to navigate for production debugging
Even worse, when jobs run for extended periods without clear progress indicators, you're left wondering if the job is actually working or if it's stuck. Here's what a typical production scenario looks like:

A job running for a day with no clear indication of progress or issues - typical production nightmare
What Data Engineers Actually Need
We founded DataFlint after years of building data platforms at scale. The insight was simple: Spark debugging shouldn't require deep internals knowledge or constant UI refreshing. Engineers need three things instantly:
- Where the performance bottleneck is (which stage, which operation)
- Why it's happening (small files, skew, memory pressure, idle cores)
- How to fix it (concrete code changes, not vague suggestions)
That's why we built DataFlint's open-source plugin, which powers our Job Debugger & Optimizer. It's Apache 2.0 licensed, adds a modern tab to the Spark Web UI with visual plans and heat maps, and transforms Spark job monitoring from archaeology into engineering.
How DataFlint's Job Debugger & Optimizer Works
Our Job Debugger & Optimizer is built on our open-source foundation. Installation is simple: visit our GitHub repository for the latest installation instructions and add our plugin to your Spark configuration. No agents to deploy, no data export, no infrastructure changes. The plugin runs inside your Spark driver and surfaces insights directly in the Web UI.
Installation is as simple as adding two configuration lines to your Spark session:
builder = pyspark.sql.SparkSession.builder
...
.config("spark.jars.packages", "io.dataflint:spark_2.12:0.5.0") \
.config("spark.plugins", "io.dataflint.spark.SparkDataflintPlugin") \
...That's it! No complex setup, no infrastructure changes, no data leaving your cluster. The plugin integrates seamlessly with your existing Spark jobs and immediately starts providing insights.

Simply click the "DataFlint" tab in your Spark Web UI to access the enhanced interface
Once you access the DataFlint tab, you're presented with a comprehensive overview that transforms how you understand your Spark jobs:

DataFlint summary view with comprehensive metrics, pinpointed alerts, and actionable recommendations
The DataFlint interface organizes all job insights into intuitive tabs in the left sidebar:
- Status: Provides real-time query visualization with live updates on your job's execution progress. See your query plan as it runs, with each stage updating dynamically to show current status and performance metrics.
- Summary: Displays comprehensive run metrics including execution time, resource utilization, data processed, and cost analysis. This tab gives you the high-level overview of your job's performance and efficiency.
- Resources: Shows detailed resource consumption patterns including CPU usage, memory allocation, disk I/O, and network activity across all executors. Identify resource bottlenecks and optimization opportunities at a glance.
- Configuration: Presents your Spark configuration settings in an organized, searchable format. Quickly verify settings and identify configuration issues that might be impacting performance.
- Alerts: Centralizes all performance warnings and optimization recommendations in one place. Each alert includes the specific issue detected, why it matters, and exactly how to fix it with code examples.
Real-Time Query Visualization
Instead of manually refreshing the native UI and parsing verbose operator trees, you get a live, human-readable query plan. Let's walk through an actual example.

Real-time query visualization with live updates and clear operation flow
Consider a straightforward ETL job:
- Read sales data from S3 Parquet files
- Filter by quantity threshold
- Sort results
- Write back to S3, partitioned by quantity
In the native Spark UI, you'd see a DataFrame tab with nodes like "Scan parquet", "Filter", "Sort", and "Execute InsertIntoHadoopFsRelationCommand." Hover tooltips overflow with metadata. Where's the problem? You're not sure yet.
In the DataFlint tab, you see the same operations laid out cleanly: Read → Filter → Sort → Write. Each node shows:
- Row counts and data volume changes
- Partition counts and average file sizes
- Storage locations and formats
- Filter conditions and their selectivity
Notice the heat map in the bottom-left corner of the interface. It provides instant visual feedback on performance bottlenecks. Problematic sections glow red, allowing you to immediately identify slow operations without scanning through complex execution graphs.
Immediately, you spot the issue: 5,000 small files written in the final stage. The plugin flags it with a red alert: "Writing small files" with a recommendation to add coalesce before the write operation.
Performance Alerts That Matter
Our open-source plugin detects core Spark performance bottlenecks in real time and provides actionable fixes:
Small file detection: Reading or writing thousands of small Parquet files causes excessive S3 operations and poor parallelism. The plugin detects when average file sizes fall below optimal thresholds and recommends consolidation strategies.
Partition skew identification: When some partitions are orders of magnitude larger than others, a few executors do all the work while the rest sit idle. Our plugin identifies skewed partitions and suggests balancing approaches.
Memory issues: Stages spilling gigabytes to disk because executors don't have enough heap space, or conversely, executors with 64GB of memory only using 8GB. The plugin flags memory misconfigurations and recommends right-sizing.
Failure pinpointing: When jobs fail, our plugin extracts the actual error from complex JVM stack traces and shows exactly which stage in your query plan failed. No more hunting through logs.
These aren't generic warnings. Each alert ties to a specific part of your visual query plan and includes the configuration change or code modification needed to fix it.

DataFlint Alerts tab centralizing all performance warnings with actionable recommendations and code examples
From Debugging to Optimization
Most Spark tools treat debugging and optimization as separate workflows. You debug failures with logs, then optimize performance with profiling tools, then reduce costs with separate dashboards.
Our approach collapses this into a single interface. Every query execution surfaces:
- Resource usage (CPU, memory, spill, idle time)
- Cost impact analysis
- Input/output volumes and partition counts
- Bottleneck alerts with fix recommendations
You move from "my job failed" to "here's why and here's how to fix it" in minutes instead of hours. That's the 10x debugging speed improvement we see with teams using our platform.
Beyond Open Source: Production-Scale Observability
The open-source Job Debugger & Optimizer transforms individual job debugging, but production teams managing fleets of Spark jobs need more: company-wide visibility, cost tracking across hundreds of jobs, and AI-powered optimization at scale.
That's where our Dashboard comes in. It processes compressed production logs from your entire Spark estate (EMR, Databricks, GKE, Dataproc) and provides:
Fleet-Wide Observability
Unified dashboard for monitoring all Spark jobs across clusters, with instant root cause analysis alerts powered by compressed production logs. See cost attribution and optimization opportunities ranked by dollar impact.
Production-Aware IDE Copilot
Our IDE Extension provides AI suggestions directly in VS Code, Cursor, and IntelliJ based on your actual production performance data. It highlights lines that cause skew, spill, or retries, with one-click fixes showing expected impact (e.g., "-32% runtime, -$41/run").
Continuous Optimization Loop
Our platform stays connected after deployment, learning from runtime performance and automatically surfacing new optimizations as data grows and patterns shift. Every suggestion is informed by your live execution plans, performance logs, and cost metrics.
The open-source Job Debugger & Optimizer, our Dashboard, and IDE Extension work together seamlessly. Use the open-source plugin for local development and quick debugging. Upgrade to the full platform when you need centralized observability and AI-assisted optimization at team scale.
Why This Matters for Spark Engineering
As data workloads scale and AI-driven pipelines multiply, fewer engineers will understand Spark internals deeply. Platforms like Databricks abstract complexity, but abstraction doesn't guarantee efficiency.
The industry needs better tooling: interfaces that translate compressed production logs into actionable insights, and AI systems that suggest optimizations grounded in production behavior, not generic best practices.
Our approach bridges the gap between raw Spark telemetry and engineering decisions. We operate at the query plan level, which is the right abstraction for data engineers. You don't need to correlate stage IDs with executor logs or decode physical plan operators. Our system does that translation for you.
And because the core is open source, there's zero vendor lock-in. Your data never leaves your cluster with the OSS plugin. It works with Spark 3.2+ and integrates with the Spark History Server for post-mortem analysis, whether you're on EMR, Databricks, GKE with Spark Operator, or a laptop with PySpark.
The Future: Agentic Spark Engineering
In 2025, data engineers shouldn't spend hours decoding execution plans. They should spend those hours building data products that matter. Agents are the future of data engineering, and we built DataFlint as the first agentic platform for Apache Spark.
We don't believe that agents will replace engineers. Instead, they will empower them. Our agentic platform doesn't just handle complexity; it simplifies the complexity of Spark's distributed compute. Our intelligent agents automatically detect performance bottlenecks, translate raw telemetry into actionable decisions, and provide context-aware recommendations based on production behavior, making distributed systems accessible to every data engineer while keeping them in control of the decisions.
Our open-source Job Debugger & Optimizer democratizes Spark performance analysis and makes root cause detection accessible to any data engineer, whether you're a Spark expert or just getting started with cluster optimization. For teams ready to scale beyond individual job debugging, our Dashboard and IDE Extension provide the production-aware AI and fleet-wide observability needed to optimize entire data platforms.
This is the paradigm shift data engineering needs: from manual debugging and optimization to AI-assisted development where agents handle the complexity, allowing engineers to focus on building data products that drive business value.
Get Started Today
Ready to transform your Spark debugging experience?
Start with open source: Visit our GitHub repository, give us a star, and add the plugin to your Spark configuration. See your jobs the way they should be seen: clearly, completely, and with a path to making them faster and cheaper.
Open Source Plugin Walkthrough
Complete walkthrough of DataFlint's open-source plugin installation and features
Scale with SaaS: For production teams managing multiple Spark jobs, our production-aware AI and compressed log analysis accelerates your entire data team's impact with centralized observability and AI-assisted optimization at team scale.
DataFlint: the first AI copilot built for Apache Spark. Discover how production-aware observability accelerates your data team's impact.
👉 Ready to see DataFlint in action? Experience the difference for yourself.
