English version

← Learning Hub Lektion 10 Dauer: ca. 14 Min. Thema: Produktionsbetrieb

Kosten, Performance & Betrieb

Diese abschließende Lektion behandelt die betriebliche Realität: Cloud-Ausgaben im Griff behalten, die Performance von Delta-Tabellen optimieren, Cluster effizient dimensionieren und Runbooks für deine produktive Wetter-zu-Strom-Plattform etablieren. Als Tech Lead trägst du die Verantwortung für Kostentransparenz und operative Gesundheit.

Kostenmodell — wohin das Geld fließt

Databricks-Kosten bestehen aus zwei Bestandteilen: Compute (DBUs) und Cloud-Infrastruktur (VMs + Storage).[1]

BestandteilKostentreiberDeine Pipeline
Job-Cluster (DBUs) VM-Größe × Stunden × DBU-Rate ca. 0,5–2 h Compute pro Tag über 4 Läufe. Die wichtigste Kostenstelle.
SQL Warehouse Warehouse-Größe × aktive Stunden Analysten-Abfragen + nachgelagerte Lesezugriffe. Serverless skaliert auf null.
Storage Gespeicherte GB (Cloud-Blob-Preise) Delta-Tabellen + Checkpoints. Wächst mit der Aufbewahrungsrichtlinie.
Netzwerk Egress (Daten, die die Region verlassen) Gering, außer du bedienst Konsumenten in anderen Regionen.

Geschätzte Monatskosten (illustrativ)

WorkloadKonfigurationLaufzeit pro TagKosten/Monat ca.
Ingestion (4× täglich) Single-Node E4s (0,5 DBU/h) 4 × 10 Min. = 40 Min. ca. 50–80 $
Silver-Transformationen (4×) 2 Worker D4s (1,5 DBU/h) 4 × 8 Min. = 32 Min. ca. 60–100 $
Features + ML-Inferenz (4×) 1 Worker E8s (2 DBU/h) 4 × 5 Min. = 20 Min. ca. 40–70 $
SQL Warehouse (Analysten) Serverless, Small ca. 2 h aktive Abfragen/Tag ca. 100–200 $
Storage (Delta-Tabellen) ca. 500 GB, wachsend — ca. 10–25 $
Gesamtschätzung ca. 260–475 $/Monat

Das sind grobe Schätzungen für eine Flotte mittlerer Größe (ca. 50 Turbinen, 10 Parks, Region Europa). Die tatsächlichen Kosten hängen vom Cloud-Anbieter, der DBU-Stufe (Premium vs. Standard) und den Datenmengen ab.

Kostenhebel (größte Wirkung zuerst)
  1. Cluster-Dimensionierung: Nicht überdimensionieren. Single-Node für I/O-Aufgaben, minimale Worker-Zahl für Transformationen.
  2. Job-Cluster statt All-Purpose: Job-Cluster beenden sich nach dem Job. All-Purpose-Cluster kosten rund um die Uhr.
  3. Spot-Instanzen: Für fehlertolerante Worker-Nodes (Transformationen, Features). 60–80 % Ersparnis.
  4. Serverless SQL: Skaliert auf null, wenn nicht abgefragt wird. Keine Leerlaufkosten für Analysten-Workloads.
  5. Datenaufbewahrung: Alte Bronze-Daten per VACUUM räumen. Partitionen jenseits des Aufbewahrungsfensters löschen.

Optimierung von Delta-Tabellen

Delta-Tabellen sammeln mit der Zeit viele kleine Dateien an (durch häufige Appends). Unbeachtet verschlechtert das die Lese-Performance.

OPTIMIZE — kleine Dateien zusammenfassen

-- Wöchentlich ausführen (oder Auto-Optimize übernehmen lassen)
OPTIMIZE prod.silver.weather_ts;
OPTIMIZE prod.silver.power_ts;
OPTIMIZE prod.gold.forecast_ts;

-- Mit Z-ORDER für Performance bei Zeitraum-Abfragen
OPTIMIZE prod.silver.weather_ts ZORDER BY (timestamp);
OPTIMIZE prod.silver.power_ts ZORDER BY (timestamp);

VACUUM — alte Dateiversionen löschen

-- Dateien älter als der Aufbewahrungszeitraum entfernen (Standard: 7 Tage)
-- Nach VACUUM ist Time Travel zu diesen Versionen nicht mehr möglich
VACUUM prod.bronze.weather_raw RETAIN 30 DAYS;
VACUUM prod.silver.weather_ts RETAIN 14 DAYS;
VACUUM prod.gold.forecast_ts RETAIN 7 DAYS;

Auto-Optimize (in Produktion zu bevorzugen)

-- Beim Anlegen der Tabelle aktivieren (in unseren Schemas bereits enthalten):
TBLPROPERTIES (
  'delta.autoOptimize.optimizeWrite' = 'true',  -- größere Dateien schreiben
  'delta.autoOptimize.autoCompact'   = 'true'   -- kleine Dateien kompaktieren
);

-- Das reduziert den Bedarf an manuellem OPTIMIZE, aber Z-ORDER braucht
-- weiterhin regelmäßige explizite OPTIMIZE-Läufe (Auto-Compact macht kein Z-ORDER).
WartungsaufgabeFrequenzVorgehen
OPTIMIZE + ZORDERWöchentlichGeplanter Wartungs-Job
VACUUMWöchentlichDerselbe Wartungs-Job
ANALYZE TABLE (Statistiken)Nach großen LadevorgängenVerbessert die Query-Planung
Alte Bronze-Partitionen löschenMonatlichDurchsetzung der Aufbewahrungsrichtlinie

Leitfaden zur Cluster-Dimensionierung

AufgabeEngpassPassende Größe
GRIB-Download + Parsing Netzwerk-I/O, Single-Thread-Python (cfgrib) Single-Node, speicheroptimiert (16 GB+ RAM)
Bronze → Silver (Geo-Join) Spark-Shuffle für den Join (Broadcast eliminiert ihn) 2–4 Worker, General Purpose. dim_assets broadcasten.
Feature-Berechnung Window-Funktionen (partitioniert nach Anlage) 2–4 Worker. Daten sind nach asset_id partitioniert = natürliche Parallelität.
ML-Inferenz Modell-Vorhersage (CPU-gebunden, pandas UDF) 1–2 Worker, ML Runtime. Oder Single-Node bei leichtem Modell (LightGBM).
Gold-Write + Aggregation Kaum vorhanden — geringes Ausgabevolumen Teilt sich das Transform-Cluster (Wiederverwendung).
Prinzip der richtigen Dimensionierung

Klein anfangen, messen, und erst hochskalieren, wenn Tasks zu langsam sind. Ein Single-Node-Cluster für die Ingestion und ein Cluster mit 2 Workern für die Transformationen reichen für eine Flotte von 50–200 Turbinen sehr wahrscheinlich aus. Das Cluster beendet sich nach dem Job automatisch — Überdimensionierung kostet dich pro Minute, nicht pro Monat.

Aufbewahrungsrichtlinie für Daten

-- Bronze: Rohwetterdaten für Reprocessing aufbewahren (30–90 Tage)
-- Danach ist Silver die maßgebliche Wahrheit
ALTER TABLE prod.bronze.weather_raw
SET TBLPROPERTIES ('delta.deletedFileRetentionDuration' = '30 days');

-- Silver: unbegrenzt aufbewahren (zentrales analytisches Asset)
-- VACUUM entfernt nur Dateiversionen, keine logischen Daten

-- Gold: Prognosehistorie für Genauigkeits-Tracking behalten (1–2 Jahre)
-- Ältere Prognosen können bei Bedarf in Cold Storage archiviert werden
SchichtAufbewahrungBegründung
Bronze30–90 TageReprocessing-Fenster. Danach ist Silver die Wahrheit.
SilverUnbegrenzt (2+ Jahre)Zentrales analytisches Asset. ML-Training braucht Historie.
Gold1–2 JahreTracking der Prognosegüte. Regulatorisch, falls einschlägig.
FeaturesWie SilverTraining braucht Feature-Historie passend zu den Labels.

Operatives Runbook

Störung: Pipeline-Fehler (Ingestion)

  1. Prüfen: Welche Quelle ist ausgefallen? (Workflow-Run-UI → fehlgeschlagener Task)
  2. Diagnostizieren: API-Timeout? Auth-Fehler? Quelle offline? (Logs prüfen)
  3. Handeln: Bei transientem Fehler → manueller Retry. Bei Quellenausfall → warten, Freshness-SLA prüfen.
  4. Kommunizieren: Bei SLA-Verletzung → nachgelagerte Nutzer informieren (der Handelstisch arbeitet sonst mit veralteter Prognose).

Störung: Nachlassende Modellgenauigkeit

  1. Erkennen: Die Tabelle forecast_accuracy zeigt über 7 Tage steigenden MAE.
  2. Diagnostizieren: Saisonaler Wechsel? Anlagenänderung (neue Turbine)? Update des Wettermodells stromaufwärts?
  3. Handeln: Modell auf aktuellen Daten neu trainieren. Challenger validieren. Bei Verbesserung promoten.
  4. Vorbeugen: Automatisiertes Retraining einplanen (monatlich oder bei erkanntem Drift).

Störung: Langsame Pipeline (Laufzeit-Alarm)

  1. Prüfen: Welcher Task ist langsam? (Zeitleisten-Ansicht des Workflows)
  2. Diagnostizieren: Datenmengen-Spitze? Cluster zu klein? Kleine Dateien (OPTIMIZE nötig)?
  3. Handeln: OPTIMIZE ausführen bei Small-File-Problem. Cluster skalieren, wenn die Datenmenge gewachsen ist. Fehlendes Partition Pruning ergänzen.

Monitoring-Dashboard

Kennzahlen, die auf ein operatives Dashboard gehören (Databricks SQL Dashboard oder extern):

KennzahlQuelleAlarmschwelle
Erfolgsquote der PipelineWorkflow-Run-Historie< 95 % über 7 Tage
Pipeline-LaufzeitWorkflow-Run-Historie> 2× Median
Aktualität von GoldMAX(produced_at) in forecast_ts> 2 Stunden alt
Prognose-MAE (7-Tage-Rolling)Tabelle forecast_accuracy> 20 % über Baseline
Park-AbdeckungDISTINCT Parks im letzten Gold-Batch< 100 % der erwarteten Parks
Täglicher DBU-VerbrauchDatabricks Billing API / Account Console> 2× Tagesbudget
Wachstumsrate des StorageDESCRIBE DETAIL auf den Tabellen> 10 % Woche-über-Woche unerwartetes Wachstum

Verständnis prüfen

Die Abfrage-Performance deiner Silver-Tabelle weather_ts hat sich im letzten Monat verschlechtert. Die Tabelle erhält täglich 4 Appends. Wahrscheinlichste Ursache?

Richtig. Jeder Append erzeugt neue kleine Dateien. Über einen Monat sammeln sich Hunderte davon an. Spark muss jeden Datei-Header öffnen und lesen, was die Scan-Performance verschlechtert. OPTIMIZE fasst sie zu wenigen großen Dateien zusammen. Auto-Compact hilft, aber periodisches explizites OPTIMIZE + ZORDER bleibt nötig.
Die Ansammlung kleiner Dateien ist das klassische Symptom. 4 Appends/Tag × 30 Tage = über 120 kleine Dateien pro Partition. Der Overhead durch das Auflisten der Dateien wird spürbar. OPTIMIZE (Kompaktierung) + ZORDER (Data Skipping) stellen die Performance wieder her.

Du willst die Compute-Kosten der Ingestion-Tasks senken. Welche Änderung hat die größte Wirkung?

Genau. cfgrib/xarray parsen im Python-Prozess des Drivers — die Worker-Nodes stehen während der Ingestion komplett still. Sie zu entfernen (Single-Node-Modus) beseitigt verschwendetes Compute. Ein dauerhaft laufendes Cluster wäre erheblich teurer (Abrechnung rund um die Uhr statt Minuten pro Lauf).
Single-Node ist die Antwort. cfgrib läuft im Python-Prozess des Drivers und lässt sich nicht auf Worker verteilen. Für leerlaufende Worker zu bezahlen ist reine Verschwendung. Und für Batch-Jobs niemals dauerhaft laufende Cluster nutzen — Job-Cluster beenden sich nach dem Lauf.

Bronze-Wetterdaten werden 30 Tage aufbewahrt. Was passiert nach 30 Tagen, wenn du ältere Daten neu verarbeiten musst?

Richtig. Nachdem VACUUM alte Bronze-Dateien entfernt hat, sind diese Rohdaten aus Databricks verschwunden. Silver (unbegrenzt aufbewahrt) wird zur maßgeblichen Wahrheit. Wenn du wirklich von Grund auf neu verarbeiten musst, lade erneut von der ursprünglichen Wetter-API (ECMWF archiviert Daten über Jahre). Genau deshalb ist die Silver-Aufbewahrung länger.
Nach VACUUM sind Bronze-Daten jenseits der Aufbewahrungsfrist weg. Silver ist deine dauerhafte Wahrheit (unbegrenzt aufbewahrt). Brauchst du die Originalrohdaten erneut, lädst du sie über die Archiv-API des Wetteranbieters nach. VACUUM archiviert nicht — es löscht endgültig.

Primärquelle

📖 Empfohlene Lektüre

Best Practices zur Optimierung von Delta-Lake-Tabellen — behandelt OPTIMIZE, VACUUM, Z-ORDER, Auto-Optimize und Dateiverwaltung. Siehe außerdem Best Practices zur Cluster-Konfiguration für Hinweise zur richtigen Dimensionierung.

Kurszusammenfassung

Du hast jetzt die komplette Databricks-Architektur von Wetter zu Strom durchlaufen:

  1. Lakehouse-Architektur — das mentale Modell
  2. Asset-Hierarchie & Zeitreihen — Tabellendesign
  3. Wetterdaten-Ingestion — GRIB2, APIs, Bronze
  4. Bronze → Silver — Geo-Join, Ableitung, Versionierung
  5. Unity Catalog — Governance und Zugriffssteuerung
  6. Feature Engineering — Feature Store, Point-in-Time
  7. ML-Pipeline — MLflow, Model Registry, Inferenz
  8. Gold-Layer — Bereitstellung nach unten, Konfidenzintervalle
  9. Workflows — Orchestrierung, Zeitpläne, Alarmierung
  10. Kosten & Betrieb — diese Lektion
Wie es weitergeht

Du hast den Grundlagenkurs abgeschlossen. Bitte deinen Lehrer, ein Thema zu vertiefen, praktische Übungen zu erstellen oder fortgeschrittene Themen zu erkunden (Streaming, Echtzeit-Inferenz, Ensembles aus mehreren Modellen).

Rechtliches: Impressum