spark-optimization
von wshobsonspark-optimization ist ein praxisnaher Leitfaden, um langsame Apache-Spark-Jobs zu analysieren – mit Fokus auf Partitionierung, Shuffle, Skew, Caching und Speicher-Tuning. Nutzen Sie ihn, um die Skill aus wshobson/agents zu installieren, `SKILL.md` zu lesen und auf Basis von Symptomen in der Spark UI, Cluster-Einstellungen und Query-Mustern fundierte Optimierungen abzuleiten.
Diese Skill erreicht 78/100 und ist damit ein überzeugender Verzeichnis-Eintrag für Nutzer, die eine Anleitung zum Spark-Performance-Tuning suchen, die ein Agent mit solider Zuverlässigkeit einsetzen kann. Die Repository-Hinweise zeigen praxisnahe operative Inhalte zu Partitionierung, Caching, Shuffle-Reduktion, Speicher-Tuning und dem Debugging langsamer Jobs, sodass Agenten voraussichtlich deutlich zielgerichteter arbeiten als mit einem allgemeinen Prompt. Die wichtigste Einschränkung: Die Skill besteht nur aus Dokumentation und bringt keine begleitenden Skripte, Referenzen oder Installations-/Ausführungs-Scaffolds mit. Nutzer sollten daher eher mit umsetzbaren Handlungsmustern als mit einem direkt ausführbaren Optimierungs-Toolkit rechnen.
- Hohe Auslösbarkeit: Beschreibung und Abschnitt "When to Use" decken langsame Jobs, Speicher-Tuning, Partitionierung, Skew und Skalierungsszenarien klar ab.
- Substanzieller Workflow-Inhalt: Das umfangreiche `SKILL.md` enthält Quick-Start-Codeblöcke sowie konkrete Optimierungsthemen wie Shuffle, Serialisierung, Speicher und Partitionsstrategie.
- Guter Hebel für Agenten: Produktionsnahe Spark-Optimierungsmuster sind an einer Stelle gebündelt und reduzieren das Rätselraten gegenüber einem allgemeinen Performance-Prompt.
- Skill nur als Dokumentation: Es gibt keine Skripte, Referenzen, Assets oder Installationsbefehle; die Umsetzung hängt also davon ab, dass der Agent die Hinweise in die Umgebung des Nutzers überträgt.
- Praktische Validierungssignale sind begrenzt: Die strukturellen Hinweise zeigen nur wenige explizite Einschränkungen bzw. Praxissignale, wodurch Tuning-Entscheidungen in Randfällen weniger belastbar sein können.
Überblick über die spark-optimization-Skill
Wofür spark-optimization gedacht ist
Die spark-optimization-Skill ist ein fokussierter Leitfaden, um die Performance von Apache-Spark-Jobs zu analysieren und gezielt zu verbessern. Am besten eignet sie sich, wenn eine Pipeline funktional bereits korrekt läuft, aber zu langsam ist, stark auf Disk spillt, zu viel shuffled, unter Skew leidet oder bei wachsendem Volumen zu teuer wird. Statt allgemeiner Tipps wie „mach Spark schneller“ strukturiert sie die Optimierung entlang des Ausführungsmodells: Jobs, Stages, Tasks, Partitionen, Speicher und Shuffle-Verhalten.
Für wen sich diese spark-optimization-Skill eignet
Diese Skill passt zu Data Engineers, Analytics Engineers, Plattformteams und Agent-Nutzern, die praktische Unterstützung beim Performance-Tuning von Spark SQL oder PySpark brauchen. Besonders hilfreich ist sie, wenn du Kontext zur Workload mitgeben kannst, etwa Join-Muster, Datenvolumen, Partitionsanzahl, Executor-Einstellungen oder Auffälligkeiten aus dem Spark UI. Für Einsteiger kann sie ebenfalls nützlich sein, funktioniert aber deutlich besser mit konkreten Job-Details statt mit einer komplett offenen Anfrage.
Der eigentliche Anwendungsfall
Die meisten Nutzer wollen nicht abstrakt „Spark optimieren“. Sie versuchen eher, Fragen wie diese zu beantworten:
- Warum ist diese Join-Stage deutlich langsamer als der Rest?
- Warum spillen Executor oder sterben mit OOM?
- Warum wurde diese Pipeline langsamer, nachdem das Datenvolumen gestiegen ist?
- Sollte ich
repartition, cachen, broadcasten oder die Executor-Einstellungen ändern? - Wie senke ich die Shuffle-Kosten, ohne die Business-Logik zu verändern?
Die spark-optimization-Skill ist deshalb wertvoll, weil sie solche Fragen als diagnostizierbare Performance-Probleme behandelt und nicht nur als Stilfragen im Code.
Was diese Skill von einem generischen Prompt unterscheidet
Ein generischer Modell-Prompt listet oft alle üblichen Spark-Tuning-Tipps auf einmal auf. Die spark-optimization skill ist besser für einen engeren Workflow geeignet: erst das Ausführungsverhalten verstehen, dann den richtigen Hebel wählen. Ihre stärksten Unterscheidungsmerkmale sind der Fokus auf Partitionsstrategie, Shuffle-Reduktion, Memory-Tuning und das Spark-Ausführungsmodell, das erklärt, warum eine bestimmte Änderung helfen sollte.
So verwendest du die spark-optimization-Skill
Installationskontext für spark-optimization
Diese Skill liegt im Repository wshobson/agents unter:
plugins/data-engineering/skills/spark-optimization
Wenn dein Skill-Runner direkte GitHub-Installationen unterstützt, ist dieses Muster üblich:
npx skills add https://github.com/wshobson/agents --skill spark-optimization
Falls deine Umgebung einen anderen Installer nutzt, füge die Skill aus diesem Repository hinzu und wähle den Slug spark-optimization. In den sichtbaren Repository-Inhalten ist nur SKILL.md belegt, daher solltest du davon ausgehen, dass die Guidance dokumentgetrieben ist und nicht durch Helper-Skripte oder Referenzdateien ergänzt wird.
Lies zuerst diese Datei
Starte mit:
plugins/data-engineering/skills/spark-optimization/SKILL.md
Da diese Skill keine sichtbaren unterstützenden Skripte, Regeln oder Referenzen mitbringt, steckt der Großteil des Nutzens darin, das zentrale Optimierungs-Framework sorgfältig zu lesen. Erwarte keine Automatisierung, die dein Spark UI oder deinen Cluster für dich untersucht; die Runtime-Fakten musst du selbst liefern.
Welche Eingaben die Skill braucht, um gut zu funktionieren
Die Qualität bei der spark-optimization-Nutzung hängt stark von den Details ab, die du mitgibst. Nützliche Inputs sind unter anderem:
- verwendete Spark-API: PySpark DataFrame, Spark SQL, Scala Spark, Streaming, Batch
- Datengröße: Zeilenanzahl, Dateianzahl, Partitionsgrößen, Wachstumsmuster
- Cluster-Zuschnitt: Executor-Speicher, Cores, Anzahl der Executor, Autoscaling-Verhalten
- Symptome: ungleich verteilte Tasks, lange Shuffle-Reads, Spills, OOMs, Stragglers, GC-Pausen
- Query-Muster: Joins, Aggregationen, UDFs, Window Functions, Repartitioning
- Speicherformat: Parquet, Delta, Iceberg, CSV, JSON
- Beobachtungen aus dem Spark UI: langsame Stage-IDs, Shuffle-Größe, Task-Verteilung, Input-Größe
- aktuelle Konfiguration:
spark.sql.shuffle.partitions, Broadcast-Schwellenwerte, Serializer
Ohne diese Informationen fällt das Modell auf generische Vorschläge zurück.
Aus einem groben Ziel einen starken Prompt machen
Schwacher Prompt:
Optimize my Spark job.
Besserer Prompt:
Use the spark-optimization skill to diagnose a slow PySpark batch job. It reads 1.2 TB of Parquet, joins a 1.2 TB fact table with a 20 MB dimension table and a 40 GB history table, then aggregates by customer and day. The slowest stage shows high shuffle read and a few tasks run 10x longer than others. Cluster: 20 executors, 8 cores each, 32 GB memory each. Current
spark.sql.shuffle.partitions=200. Suggest likely bottlenecks, code-level fixes, and config changes in priority order, with tradeoffs.
Dieser Prompt gibt der Skill genug belastbare Hinweise, um über Broadcast Joins, Skew, Partitionsgrößen und Shuffle-Druck sinnvoll nachzudenken.
Ein praxisnaher Workflow mit spark-optimization
Ein guter Workflow sieht so aus:
- Beschreibe die Workload und das Symptom.
- Teile die Merkmale der langsamen Stage aus dem Spark UI.
- Bitte um ein Ranking der Bottlenecks, nicht nur um beliebige Tuning-Tipps.
- Fordere Änderungen in Ebenen an:
- Query-/Code-Änderungen
- Partitionsänderungen
- Änderungen der Join-Strategie
- Speicher-/Konfigurationsänderungen
- Setze zuerst die kleinste Änderung mit hoher Erfolgswahrscheinlichkeit um.
- Führe den Job erneut aus und vergleiche das Verhalten auf Stage-Ebene.
So bleibt der spark-optimization guide an messbaren Ergebnissen ausgerichtet statt in Cargo-Cult-Tuning abzurutschen.
Worin die Skill am stärksten ist
Der Repository-Text stellt diese Bereiche klar in den Mittelpunkt:
- Partitionsstrategie
- Caching-Entscheidungen
- Shuffle-Optimierung
- Memory-Tuning
- Skalierung von Spark-Pipelines
- Reduktion von Data Skew
Praktisch bedeutet das: Die Skill ist vor allem bei Batch-Performance-Arbeit stark, bei der Stage-Struktur und Datenbewegung die wichtigsten Kostentreiber sind.
Was du explizit anfordern solltest
Bitte die Skill um Ergebnisse, mit denen du direkt weiterarbeiten kannst, zum Beispiel:
- eine Tabelle mit Bottleneck-Hypothesen
- empfohlene Konfigurationsänderungen mit erwarteter Wirkung
- wahrscheinliche Skew-Stellen und passende Validierungschecks
- ob ein Broadcast Join sinnvoll ist
- ob
repartitionodercoalescebesser passt - Cache- oder Persist-Empfehlungen mit Begründung
- Anti-Patterns in deinen Transformationen
Das ist deutlich hilfreicher als eine generische „Best Practices“-Liste.
Repository-gestützte Themen, auf die du dich konzentrieren solltest
Auf Basis der sichtbaren Quelle sind diese Themen die besten Anker für deine Prompts:
- Spark-Ausführungsmodell
- zentrale Performance-Faktoren
- Minimierung von Shuffle
- Umgang mit Data Skew
- Wahl des Serializers
- Reduzierung von Memory Pressure
- sinnvolle Dimensionierung von Partitionen
Um diese Konzepte herum ist die Skill ausdrücklich aufgebaut. Wenn du sie im Prompt benennst, bekommst du mit höherer Wahrscheinlichkeit passende und anschlussfähige Antworten.
Praktische Prompt-Vorlage für spark-optimization zur Performance-Optimierung
Verwende einen Prompt wie diesen:
Use the spark-optimization skill for Performance Optimization. Analyze this Spark job for shuffle, skew, memory, and partition issues. Here is the job summary: [pipeline description]. Here are the slow stages and Spark UI symptoms: [details]. Here is current cluster config: [details]. Here is a simplified code excerpt: [code]. Recommend the top 3 changes by expected impact, explain why each helps in Spark’s execution model, and note any tradeoffs or validation steps.
Diese Formulierung führt in der Regel zu deutlich entscheidungsreiferen Ergebnissen als ein simples „improve performance“.
FAQ zur spark-optimization-Skill
Ist spark-optimization auch ohne Spark-UI-Daten nützlich
Ja, aber die Ergebnisse sind weniger belastbar. Die Skill kann weiterhin anhand von Code-Struktur, Join-Größen, Dateilayout und Cluster-Einstellungen argumentieren. Wenn du jedoch verlässliche Empfehlungen zu Skew, Shuffle-Hotspots oder Memory Pressure möchtest, verbessert Evidenz aus dem Spark UI die Antwort spürbar.
Ist diese spark-optimization-Skill für Einsteiger geeignet
Ja, sofern du die grundlegenden Spark-Konzepte bereits kennst. Die Skill erklärt Optimierung über Jobs, Stages, Tasks, Partitionen und Shuffle-Verhalten, was besonders Nutzern mit ersten Vorkenntnissen hilft, schnell dazuzulernen. Absolute Anfänger brauchen unter Umständen zuerst eine grundlegende Spark-Einführung, bevor die Empfehlungen wirklich umsetzbar wirken.
Wann solltest du spark-optimization nicht verwenden
Verwende spark-optimization nicht als Hauptwerkzeug, wenn das eigentliche Problem in Wahrheit Folgendes ist:
- fehlerhafte Business-Logik
- schlechte Qualität der Quelldaten
- Orchestrierungsfehler
- Ausfälle auf der Storage-Ebene
- Nicht-Spark-Bottlenecks außerhalb der Engine
Auch dann passt die Skill schlecht, wenn du keinerlei Runtime-Fakten teilen kannst und nur eine generische Tuning-Checkliste möchtest.
Worin unterscheidet sich das von normaler Spark-Beratung
Normale Prompts erzeugen oft breit gestreute Tipps wie „mehr cachen“, „mehr Partitionen verwenden“ oder „Broadcast Joins nutzen“. Die spark-optimization install-Entscheidung lohnt sich, wenn du einen Workflow willst, der darauf ausgerichtet ist, zuerst zu diagnostizieren, welcher dieser Hebel tatsächlich relevant ist und warum — auf Basis von Spark-Ausführungskonzepten statt unverbundener Einzeltipps.
Ersetzt die Skill Benchmarking
Nein. Sie verbessert die Qualität deiner Hypothesen und der empfohlenen Änderungen, aber testen musst du weiterhin vorher und nachher. Spark-Optimierung hängt stark von der jeweiligen Workload ab, und manche Änderungen, die einer Stage helfen, können einer anderen schaden.
So verbesserst du die Nutzung der spark-optimization-Skill
Nenne Symptome, nicht nur Ziele
Der schnellste Weg, die spark-optimization-Nutzung zu verbessern, ist der Wechsel von abstrakten Zielen zu konkreten Symptomen:
- „stage 14 has 2 tasks running 12 minutes while others finish in 40 seconds“
- „shuffle read is 600 GB after a groupBy“
- „executors spill to disk during sortMergeJoin“
- „job got slower after increasing daily input from 200 GB to 900 GB“
Solche Hinweise erlauben es der Skill, direkt auf Skew-, Partitions-, Speicher- oder Shuffle-Ursachen zu schließen.
Zeige die Code-Struktur, die den Bottleneck erzeugt
Du musst nicht dein komplettes Projekt einfügen. Ein kleiner Ausschnitt, der Folgendes zeigt, reicht meist aus:
- Joins
- Aggregationen
repartition-Aufrufe- Einsatz von Cache oder Persist
- Python-UDFs
- Datei-Reads und -Writes
Performance-Probleme in Spark erkennt man oft schon an der Form der Transformationen und nicht nur an der Konfiguration.
Bitte um nach Priorität sortierte Empfehlungen
Ein häufiger Fehler ist, zehn Vorschläge ohne Reihenfolge zu bekommen. Bitte die Skill, Maßnahmen zu sortieren nach:
- erwarteter Performance-Wirkung
- Implementierungsaufwand
- betrieblichem Risiko
Das erzwingt präzisere Antworten und erleichtert die Umsetzung.
Bitte nach jeder Empfehlung um Validierungsschritte
Eine starke Nutzung des spark-optimization guide schließt Verifikation ein. Frage die Skill, woran du erkennst, dass eine Maßnahme funktioniert hat, zum Beispiel an:
- reduziertem Shuffle Read/Write
- gleichmäßigeren Task-Laufzeiten
- weniger Spills
- geringerer GC-Zeit
- weniger Stages
- besser ausbalancierten Input-Partitionen
So vermeidest du „Tuning nach Hörensagen“.
Gib Randbedingungen an, damit die Empfehlungen realistisch bleiben
Nenne Einschränkungen wie:
- Cluster-Größe darf nicht erhöht werden
- kein Rewrite in Scala möglich
- aktuelles Tabellenformat muss beibehalten werden
- Latenzziel ist fix
- Speicher für Broadcast Joins ist begrenzt
- in diesem Sprint sind nur Konfigurationsänderungen erlaubt
Die Skill liefert deutlich brauchbarere Empfehlungen, wenn klar ist, was nicht zur Verfügung steht.
Iteriere nach dem ersten spark-optimization-Ergebnis
Komm nach dem ersten Durchlauf mit folgenden Informationen zurück:
- was sich geändert hat
- was besser wurde
- was schlechter wurde
- aktualisierte Beobachtungen aus dem Spark UI
Ab hier wird die Skill wirklich wertvoll. Spark-Optimierung ist iterativ; der beste nächste Schritt hängt oft von den Nebenwirkungen der vorherigen Änderung ab.
Achte auf typische Fehlgriffe
Die häufigsten schwachen Ergebnisse entstehen, wenn Nutzer:
- nach Optimierung fragen, ohne Details zur Workload zu liefern
- Skew ignorieren und sich nur auf Executor-Speicher konzentrieren
- große Datensätze ohne Nachweis von Wiederverwendung übermäßig cachen
- Partitionszahlen blind ändern
- jeden Join als Kandidaten für Broadcast behandeln
- zuerst an Konfigurationen drehen, bevor teure Transformationen korrigiert werden
Wenn du bessere Ergebnisse willst, sollte die Skill aus belastbaren Hinweisen argumentieren — nicht aus generischen Vorlieben.
