Skip to main content
Microsoft Fabric

Fabric Runtime 2.0 GA: What Changes for Spark ETL in Manufacturing

A notebook that reads a SCADA export and MES production orders has run at 02:00 every night for fourteen months. Then it fails — because the Spark runtime under it changed, approved three weeks earlier as a housekeeping ticket. What Runtime 2.0 breaks, and how to test it.

Amit Kumar Singh - Technology Consulting Partner at MyData Insights

Technology Consulting Partner · MyData Insights

14+ years in industrial data · Former Accenture & EY · India, GCC, SEA

17 August 2026 · 13 min read

The bottom line

Fabric Runtime 2.0 is a bigger jump than any previous Fabric runtime change — Spark 3.5→4.1, Delta 3.2→4.2, Python 3.11→3.13, Java 11→21, Scala 2.12→2.13. The risk is not in Spark; it is in your dependency inventory: the Python 3.13 move breaks Environment items carrying wheels, and OT ingestion notebooks lean on OPC-UA, MQTT and historian SDKs that must be rebuilt. Runtime 1.3 hits end of support and new workspaces start defaulting to 2.0 in late September 2026, so the real failure mode is drift. Test in a parallel workspace, run a full nightly cycle, and regression-check the Silver layer numerically before cutover.

The failure looks like a 02:00 notebook that just stops

A notebook that reads a SCADA historian export and a set of MES production orders runs at 02:00, as it has every night for fourteen months. One morning it has failed. Nothing in the business changed overnight. What changed was the Spark runtime underneath the notebook — approved three weeks earlier as a housekeeping ticket by someone who reasonably assumed a runtime is like a Windows patch.

Microsoft Fabric Runtime 2.0 reached general availability on 14-Aug-2026, and it is a larger jump than any previous Fabric runtime change: Apache Spark 3.5 to 4.1, Delta Lake 3.2 to 4.2, Python 3.11 to 3.13, Java 11 to 21, Scala 2.12 to 2.13, and the base OS from Azure Linux 2.0 to 3.0.

The clock matters more than the features. Runtime 1.3 — what most production estates run today — has an end-of-support date of 30-Sep-2026, after which it moves into long-term support through March 2027.

What Fabric Runtime 2.0 actually is

Fabric Runtime 2.0 is the generally available Apache Spark execution environment for Fabric notebooks and Spark job definitions. It carries Apache Spark 4.1, Delta Lake 4.2, Python 3.13, Java 21, Scala 2.13 and R 4.5.2 on Azure Linux 3.0.

Runtime 2.0 was not the default at GA. Microsoft's documentation states it becomes the default for new workspaces and new Environment items in late September 2026 — which is exactly why the real risk is drift, not a switch-off.

The end-of-support clock, and what happens if you ignore it

Fabric gives a runtime roughly 24 months at GA, then 12 months of long-term support, with end of support announced six months before deprecation.

DateWhat it means for your pipelines
Late September 2026New workspaces and Environment items start defaulting to Runtime 2.0 — a project workspace a colleague creates quietly runs a different Spark version to production
30-Sep-2026Runtime 1.3 end of support. Jobs keep running; you stop getting fixes on the same terms
01-Oct-2026Runtime 1.3 enters long-term support, running through March 2027
After LTS endsRuntime removed from workspace settings; environments pinned to it stop being a supported configuration

The failure mode is not a dramatic switch-off. It is drift: half your workspaces on 2.0 because they were created after the default changed, half on 1.3 because nobody touched them, and a notebook copied between them behaving differently for reasons that take a day to find.

What actually changes for ETL, and why

The Python jump is the one that will bite you. The move to Python 3.13 breaks Environment items that carry Python and wheel libraries. In a manufacturing estate, your OT ingestion notebooks almost certainly use libraries outside the base runtime — an OPC-UA client, an MQTT client, a historian SDK, a vendor wheel for a proprietary MES export format, possibly a hand-built internal wheel a contractor produced in 2024 that nobody can rebuild. That is the honest heart of this upgrade: the risk is not in Spark, it is in your dependency inventory.

Scala and Java move too — Scala 2.12 to 2.13, Java 11 to 21. Scala minor versions are not binary compatible, so any custom JAR (a Kafka or OPC-UA connector, a bespoke deserialiser for a line-controller payload) has to be recompiled, not copied across.

The risk in a Fabric runtime upgrade is almost never Spark. It is the OPC-UA client, the historian SDK and the 2024 internal wheel nobody can rebuild.

Delta 4.2 features, and the performance you can actually use

Delta Lake 4.2 brings Z-ordering and liquid clustering for data layout, plus parallel Delta snapshot loading — genuinely useful for a Silver layer holding years of tag-level sensor history. The caveat is the important part: Microsoft states Delta 4.x-specific features are experimental, work only on Spark experiences, and should not be enabled where the same tables are used across multiple Fabric workloads. In a typical estate where Silver and Gold are written by Spark and read by a Power BI Direct Lake model, the SQL analytics endpoint and possibly a Warehouse, turning on a Delta 4.x feature because a blog said it was faster can put those tables into a state other workloads read badly.

What you can use now: the native execution engine runs on both 1.3 and 2.0 and is documented as up to six times faster than open-source Spark on TPC-DS, enabled at the Environment level under Spark compute → Acceleration. And resource profiles — the setting most teams have never looked at: new workspaces default to writeHeavy (V-Order off, for ingestion throughput), while readHeavyForPBI enables V-Order and optimizeWrite, which is what you want on tables a Direct Lake model reads.

How to test the upgrade without betting the morning OEE report

The Environment item is what makes a safe test possible: it holds the runtime version, Spark compute config, libraries and resource files, and attaches to individual notebooks or acts as the workspace default. So you can run Runtime 2.0 on one notebook while everything else stays on 1.3.

  • Inventory dependencies first — export the library list from every Environment
  • Build a parallel workspace — clone the notebooks and job definitions, point them at read-only shortcuts to the same OneLake data, attach a new Environment set to 2.0
  • Rebuild the Environment, do not edit it — given the Python breaking change, create it new
  • Run a full night's cycle, not a sample — shift-boundary timestamps, a line down for maintenance, null sensor readings, a duplicated historian tag, month-end MES postings are the rows that break
  • Regression-check the Silver layer numerically — row counts, distinct keys, null rates, min/max and sum on every measure, and a full-outer-join diff on the business key between 1.3 and 2.0 output
  • Check downstream — refresh the Direct Lake model against the 2.0-written tables and query the SQL analytics endpoint
  • Cut over by Environment, layer by layer — ingestion, then transformation, then anything serving reports

For ten to thirty notebooks and a handful of custom libraries, that is realistically 3–5 weeks elapsed with an engineer part-time — most of it waiting on test cycles and chasing library owners.

The capacity and cost angle

Fabric bills Spark against capacity — two Spark vCores per capacity unit, so an F64 gives 128 Spark vCores, rising to 384 with the 3x burst multiplier. When capacity is exhausted, background jobs queue FIFO and expire after 24 hours, while interactive notebook work is rejected. Two consequences during migration: running parallel 1.3 and 2.0 pipelines over the same window doubles Spark consumption, so if capacity is tight at 02:00, stagger the test rather than discovering the queue.

And if Spark is what pushes your capacity into throttling, autoscale billing for Spark is worth evaluating separately — it moves Spark onto pay-as-you-go serverless compute billed outside the capacity, but it does not burst from or fall back to capacity and does not use smoothing. It changes the cost profile rather than simply removing the constraint.

The pipelines nobody owns any more

Every estate over two years old has them: a notebook a contractor built for a plant that has since changed MES vendors, a job feeding a report three people opened last quarter, an ingestion job for a decommissioned line whose historian tags still exist. A runtime deadline is the best excuse you will get to retire them.

Before migrating anything, pull the last 90 days of run history and downstream usage, and answer three questions per notebook and job definition: what does it write, who read that output last quarter, and who is the named owner. Anything failing all three goes on a disable-and-observe list — switch it off, leave it a fortnight, and migrate only what survives.

Where this breaks, and what it does not fix

A runtime upgrade cannot fix undocumented dependencies — if an internal wheel was built by someone who has left and the source is gone, no Fabric configuration recovers it. Regression-testing OT data is harder than ERP data, which is transactional and reconcilable; sensor history is not. The new Delta features are not a free upgrade — Spark-experience-only, and capable of putting tables into a state other workloads read badly. The native execution engine is still preview and falls back silently, and a TPC-DS benchmark is not a forecast for a pipeline parsing MQTT JSON, a format the engine does not support.

And nothing here fixes a pipeline that was fragile to begin with — a notebook with no schema enforcement, no idempotency and no alerting failed at 02:00 on Runtime 1.3 too; it just failed less often. Capacity headroom is a constraint, not a detail: if your F-SKU already throttles, a parallel test cycle makes it worse before it makes it better.

What to do first

Four questions to answer this week, before any change request is raised:

  • Which runtime is every workspace on, and which will quietly start defaulting to 2.0 for items created after late September 2026?
  • What is the complete library list across your Environments, and which entries are custom wheels or JARs with no identified owner or source?
  • Which Spark notebooks and job definitions wrote data in the last 90 days, and which of those outputs were actually read?
  • If your Silver layer produced numbers that differed by 0.5% after an upgrade, would anyone notice — and what would they be looking at?

The fourth question decides the shape of the exercise. If nothing downstream would catch a small numerical shift, the gap in your platform is verification, not runtime version. We run these upgrades the way we build the platforms — never moving a production layer without a numeric regression check behind it.

The upgrade is not the risk; the dependency inventory and the missing regression check are. If a 0.5% shift in your Silver layer would pass unnoticed, fix the verification before you touch the runtime. Book a diagnostic with Amit — no slides, no pitch deck, no obligation to proceed. A first slice — dependency inventory, a parallel Runtime 2.0 workspace and a regression-checked Silver layer for one plant — is a defined, low-risk piece of work.

Free Assessment

Where does your operation sit on the data maturity curve?

8 questions. 3 minutes. You get a scored breakdown across data infrastructure, analytics readiness, and automation potential — with a specific next step for your industry.

Microsoft FabricData EngineeringSparkManufacturingETL

Your Data · Our Technology · Our Automation

Get practical insights every fortnight

Amit writes about Microsoft Fabric, Power BI, AI in operations, and digital transformation for manufacturing and supply chain leaders. Practitioner perspective - no fluff, no vendor spin.

No spam. Unsubscribe any time. Also on Substack.

FAQ

Common questions

Is Fabric Runtime 2.0 generally available, and what does it include?

Yes — Microsoft announced Fabric Runtime 2.0 as generally available on 14-Aug-2026. It carries Apache Spark 4.1, Delta Lake 4.2, Python 3.13, Java 21, Scala 2.13 and R 4.5.2 on Azure Linux 3.0.

When does Fabric Runtime 1.3 stop being supported?

Runtime 1.3 has an end-of-support date of 30-Sep-2026 and moves into long-term support from 01-Oct-2026 through March 2027. Fabric gives a runtime roughly 24 months at GA and 12 months of long-term support, with end of support announced six months before deprecation.

What is the main breaking change in Fabric Runtime 2.0?

The Python upgrade to 3.13 breaks Environment items containing Python and wheel libraries. Jobs fail with a library-management error asking you to republish the environment, or with module and class not-found errors — so a dependency inventory is the first task.

How do I test a Fabric runtime upgrade without breaking production pipelines?

Create a parallel workspace, attach a new Environment item set to Runtime 2.0, and run cloned notebooks against copies or shortcuts of the same OneLake data. Run a full nightly cycle rather than a sample, then compare the Silver layer numerically — row counts, null rates, distinct keys and measure sums — against the 1.3 output.

Should I enable Delta Lake 4.2 features like liquid clustering straight away?

No. Microsoft documents Delta 4.x-specific features as experimental and limited to Spark experiences, and advises against enabling them where the same tables are used across multiple Fabric workloads — which is the norm when Power BI Direct Lake and the SQL endpoint read the same tables.

Does upgrading the runtime change what I pay for Fabric?

Not directly, but it changes compute behaviour. Spark is billed against capacity at two Spark vCores per capacity unit, with a 3x burst multiplier and FIFO queueing when capacity is exhausted — and a parallel test cycle temporarily doubles Spark consumption.

Is this the challenge you're facing?

Book a 30-minute call. We'll look at your specific operation and tell you what's achievable - plainly and without slides.