Passen Sie Ihren bestehenden Apache Spark-Code für Azure Databricks an

In diesem Artikel werden die erforderlichen Änderungen beschrieben, um vorhandene Apache Spark-Workloads an die Ausführung auf Azure Databricks anzupassen. Ganz gleich, ob Sie zu Azure Databricks von einem lokalen Cluster, einer benutzerdefinierten cloudbasierten Infrastruktur oder einem anderen Apache Spark-Angebot für Unternehmen wechseln, die meisten Workloads erfordern nur einige Änderungen, um in die Produktion zu gelangen. Azure Databricks erweitert, vereinfacht und verbessert die Leistung von Apache Spark, indem benutzerdefinierte Optimierungen eingeführt, Infrastruktur konfiguriert und bereitgestellt und Abhängigkeiten in Databricks Runtime verwaltet werden.

Wichtig

Beim Upgrade auf neue Versionen von Apache Spark kann es möglicherweise zu Breaking Changes in der Syntax kommen. Weitere Informationen finden Sie unter Versionshinweise, Versionen und Kompatibilität von Databricks Runtime und im Leitfaden zur Spark-Migration.

Ändern von parquet in delta

Databricks empfiehlt zum Schreiben von Daten die Verwendung von Delta Lake anstelle von Parquet oder ORC. Azure Databricks hat viele Funktionen für eine effizientere Interaktion mit Tabellen optimiert, die von Delta Lake unterstützt werden. Das Upgrade von Daten und Code von Parquet zu Delta Lake erfordert nur wenige Schritte. Siehe Migrieren eines Parquet-Datensees nach Delta Lake.

Da Delta Lake ACID-Transaktionsgarantien bietet, können Sie Ihre Workloads möglicherweise vereinfachen, sodass Behelfslösungen zur Schaffung von Pseudo-Transaktionalität in Apache Spark-Vorgängen nicht mehr benötigt werden. Beispiele:

  • Entwicklung einer Verzeichnisstruktur oder Partitionierungsstrategie, durch die alle an einem bestimmten Vorgang beteiligten Dateien simultan als Teil einer Partition ermittelt werden können.
  • Konfiguration oder Nutzung des Metastores, um die Transaktionsfähigkeit bei der Suche nach neuen Daten zu erhöhen.
  • Verwendung von MSCK repair, um die in eine Tabelle geschriebenen Dateien im Metastore zu registrieren.
  • Verwendung von alter table add partition zum manuellen Hinzufügen von Partitionen zu einer Tabelle.

Siehe Wann Tabellen auf Azure Databricks partitioniert werden sollten.

Hinweis

Sie können Workloads ausführen, ohne die verwendeten Datenformate zu aktualisieren, aber viele der größten Leistungsgewinne auf Azure Databricks sind direkt an Delta Lake gebunden.

Neukompilieren von Apache Spark-Code mit Databricks Runtime-kompatiblen Bibliotheken

Jede Version von Databricks Runtime wird mit vielen der Bibliotheken vorkonfiguriert, die in Apache Spark-Anwendungen benötigt werden. Sie können bei Bedarf zusätzliche Bibliotheken auf Ihrem Computer installieren. Soweit dies jedoch möglich ist, empfiehlt Databricks die Verwendung von Bibliotheksversionen, die in Databricks Runtime enthalten sind und auf Kompatibilität getestet wurden. Jede Databricks Runtime-Version enthält eine Liste aller installierten Bibliotheken. Weitere Informationen finden Sie unter Versionshinweise, Versionen und Kompatibilität von Databricks Runtime.

Entfernen von SparkSession-Erstellungsbefehlen

Viele Apache Spark-Legacyworkloads deklarieren für jeden Auftrag explizit eine neue SparkSession. Azure Databricks erstellt automatisch einen SparkContext für jeden Computecluster und erstellt eine isolierte SparkSession für jedes Notizbuch oder jeden Auftrag, der für den Cluster ausgeführt wird. Sie können den Code lokal kompilieren und testen und dann für Azure Databricks bereitstellen, indem Sie diese Befehle aktualisieren, um SparkSession.builder().getOrCreate() zu verwenden.

Entfernen von Terminalskriptbefehlen

In Apache Spark müssen Programme den Abschluss ihrer Ausführung durch Befehle wie sys.exit() oder sc.stop() explizit deklarieren. Azure Databricks beendet und bereinigt Aufträge automatisch, sobald sie abgeschlossen sind. Daher sind diese Befehle nicht notwendig und sollten entfernt werden.

Azure Databricks beendet und bereinigt auch strukturierte Streaming-Workloads beim Beenden der Ausführung, sodass Sie awaitTermination() und ähnliche Befehle aus strukturierten Streaming-Anwendungen entfernen können. Siehe Wann awaitTermination() zu verwenden ist.

Vertrauen Sie darauf, dass Azure Databricks Ihren Cluster konfiguriert.

Azure Databricks konfiguriert alle Einstellungen für den Treiber und die Executoren in Ihrem Computecluster automatisch, um die Resilienz und die Ressourcennutzung zu maximieren. Die Angabe von benutzerdefinierten Konfigurationen für Executors oder JVM kann zu Leistungseinbußen führen. Databricks empfiehlt, nur Spark-Konfigurationen festzulegen, die für die Steuerung der Typverarbeitung oder für Funktionen notwendig sind, damit die Logik konsistent bleibt.

Ausführen Sie Ihre Workloads

Nachdem Sie nun Muster, Befehle und Einstellungen entfernt haben, die die Ausführung Azure Databricks beeinträchtigen könnten, können Sie Ihre Workloads in einer Testumgebung ausführen und die Leistung und Ergebnisse mit Ihrer älteren Infrastruktur vergleichen. Während viele der Fähigkeiten, die Ihr Team möglicherweise entwickelt hat, um Probleme zu beheben und die Leistung für Apache Spark-Workloads zu verbessern, können sie weiterhin auf Azure Databricks genutzt werden, häufiger können Sie größere Vorteile durch Upgradeschritte sehen, um neue Features in Apache Spark, Delta Lake oder benutzerdefinierten Azure Databricks Produkten zu verwenden.