Migrieren von Apache Spark-Programmen zu AWS Glue - AWSGlue

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Migrieren von Apache Spark-Programmen zu AWS Glue

Apache Spark ist eine Open-Source-Plattform für verteilte Rechenlasten, die für große Datenmengen ausgeführt werden. AWS Glue nutzt die Fähigkeiten von Spark, um ein optimiertes ETL-Erlebnis zu bieten. Sie können Spark-Programme zu AWS Glue migrieren, um unsere Features nutzen zu können. AWS Glue bietet die gleichen Leistungsverbesserungen, die Sie von Apache Spark auf Amazon EMR erwarten würden.

Spark-Code ausführen

Nativer Spark-Code kann in einer AWS Glue-Umgebung gebrauchsfertig ausgeführt werden. Skripte werden oft entwickelt, indem ein Teil des Codes iterativ geändert wird, ein Workflow, der für eine interaktive Sitzung geeignet ist. Bestehender Code eignet sich jedoch eher für die Ausführung in einem AWS Glue-Auftrag, mit dem Sie Protokolle und Metriken für jeden Skriptlauf planen und konsistent abrufen können. Sie können ein vorhandenes Skript über die Konsole hochladen und bearbeiten.

  1. Eignen Sie sich die Quelle Ihres Skripts an. In diesem Beispiel verwenden Sie ein Beispielskript aus dem Apache Spark-Repository. Binarizer-Beispiel

  2. Klappen Sie in der AWS Glue-Konsole den linken Navigationsbereich aus und wählen Sie ETL > Jobs (Aufträge)

    Wählen Sie im Feld Erstellen von Aufträgen Spark-Script-Editor aus. Es wird ein Optionen-Abschnitt erscheinen. Wählen Sie unter Optionen Upload und Bearbeiten eines vorhandenes Skripts aus.

    Es wird ein Datei-Upload-Abschnitt erscheinen. Klicken Sie unter Datei-Upload auf Datei auswählen. Ihre Systemdateiauswahl wird erscheinen. Navigieren Sie zu dem Speicherort, an dem Sie binarizer_example.py gespeichert haben, wählen Sie es aus und bestätigen Sie Ihre Auswahl.

    Eine Schaltfläche für Erstellen wird in der Kopfzeile des Fensters Erstellen von Aufträgen erscheinen. Klicken Sie darauf.

    Die AWS Glue-Studio-Auftragsseite wird angezeigt und der Spark-Skript-Editor-Ausschnitt wird ausgewählt.
  3. Ihr Browser navigiert zum Skript-Editor. Klicken Sie in der Kopfzeile auf die Registerkarte Auftragsdetails. Legen Sie den Namen und die IAM-Rolle fest. Hinweise zu AWS Glue IAM-Rollen finden Sie unter Einrichten von IAM-Berechtigungen für AWS Glue.

    Optional – setzen Sie Angeforderte Anzahl der Worker auf 2 und die Anzahl der Wiederholungen auf 1. Diese Optionen sind nützlich, wenn Sie Produktionsaufträge ausführen, aber wenn Sie sie ablehnen, optimieren Sie Ihre Erfahrung beim Testen eines Features.

    Klicken Sie in der Titelleiste auf Save (Speichern) und dann auf Run (Ausführen)

    Die Auftragsdetailseite mit den Optionen, die wie angewiesen festgelegt wurden.
  4. Navigieren Sie zur Registerkarte Ausführungen. Sie sehen ein Panel, das Ihrer Auftragsausführung entspricht. Warten Sie ein paar Minuten und die Seite sollte automatisch aktualisiert werden um Erfolgreich im Run status (Ausführungsstatus) anzuzeigen.

    Die Auftragsausführungsseite mit einer erfolgreichen Auftragsausführung.
  5. Sie sollten Ihre Ausgabe überprüfen, um sicherzustellen, dass das Spark-Skript wie beabsichtigt ausgeführt wurde. Dieses Apache Spark-Beispielskript sollte einen String in den Ausgabestream schreiben. Sie finden das, indem Sie zu Output logs (Ausgabeprotokolle) unter Cloudwatch-Protokolle im Panel für die erfolgreiche Auftragsausführung navigieren. Notieren Sie sich die Auftragsausführungs-ID, eine generierte ID unter dem ID-Label, das mit jr_ beginnt.

    Dadurch wird die CloudWatch-Konsole geöffnet, die den Inhalt der standardmäßigen AWS Glue-Protokollgruppe /aws-glue/jobs/output visualisiert, gefiltert nach dem Inhalt der Protokollstreams für die Auftragsausführungs-ID. Jeder Worker hat einen Protokollstream generiert, der als Zeilen unter Protokollstreams dargestellt wird. Ein Worker hätte den angeforderten Code ausführen sollen. Sie müssen alle Protokollstream öffnen, um den richtigen Worker zu identifizieren. Sobald Sie den richtigen Worker gefunden haben, sollten Sie die Ausgabe des Skripts sehen, wie in der folgenden Abbildung zu sehen ist:

    Die CloudWatch-Konsolenseite mit der Ausgabe des Spark-Programms.

Gängige Verfahren für die Migration von Spark-Programmen

Bewerten Sie den Support der Spark-Version

Die AWS Glue-Freigabeversion bestimmt die Version von Apache Spark und Python, die für den AWS Glue-Auftrag verfügbar sind. Sie finden unsere AWS Glue-Versionen und was sie unterstützen unter AWS Glue Versionen. Möglicherweise müssen Sie Ihr Spark-Programm aktualisieren, um mit einer neueren Version von Spark kompatibel zu sein, um auf bestimmte AWS Glue-Features zuzugreifen.

Bibliotheken von Drittanbietern einschließen

Viele bestehende Spark-Programme werden Abhängigkeiten haben, sowohl von privaten als auch von öffentlichen Artefakten. AWS Glue unterstützt Abhängigkeiten im JAR-Stil für Scala-Aufträge sowie Wheel- und Quell-Pure-Python-Abhängigkeiten für Python-Aufträge.

Python – Hinweise zu Python-Abhängigkeiten finden Sie unter Python-Bibliotheken mit AWS Glue verwenden

Gängige Python-Abhängigkeiten sind in der AWS Glue-Umgebung bereitgestellt, einschließlich der häufig angeforderten Pandas-Bibliothek. Diese Abhängigkeiten sind in der AWS Glue-Version 2.0+ enthalten. Weitere Informationen zu bereitgestellten Modulen finden Sie unter Python-Module, die bereits in AWS Glue enthalten sind. Wenn Sie einen Auftrag mit einer anderen Version einer standardmäßig enthaltenen Abhängigkeit bereitstellen müssen, können Sie --additional-python-modules verwenden. Informationen über Auftragsargumente finden Sie in Verwenden von Auftragsparametern in AWS Glue-Jobs.

Sie können zusätzliche Python-Abhängigkeiten mit dem --extra-py-files-Auftragsargument liefern. Wenn Sie einen Auftrag aus einem Spark-Programm migrieren, ist dieser Parameter eine gute Option, da er funktionell dem --py-files-Flag in PySpark entspricht und denselben Einschränkungen unterliegt. Weitere Informationen zum Parameter --extra-py-files erhalten Sie unter Einschließlich Python-Dateien mit PySpark nativen Funktionen.

Für neue Jobs können Sie Python-Abhängigkeiten mit dem --additional-python-modules-Auftragsargument verwalten. Die Verwendung dieses Arguments ermöglicht ein gründlicheres Abhängigkeitsmanagement. Dieser Parameter unterstützt Abhängigkeiten im Wheel-Stil, einschließlich solcher mit nativen Codebindungen, die mit Amazon Linux 2 kompatibel sind.

Scala

Sie können zusätzliche Scala-Abhängigkeiten mit dem --extra-jars-Auftragsargument liefern. Abhängigkeiten müssen in Amazon S3 gehostet werden und der Argumentwert sollte eine kommagetrennte Liste von Amazon S3-Pfaden ohne Leerzeichen sein. Möglicherweise fällt es Ihnen leichter, Ihre Konfiguration zu verwalten, indem Sie Ihre Abhängigkeiten neu bündeln, bevor Sie sie hosten und konfigurieren. AWS Glue JAR-Abhängigkeiten enthalten Java-Bytecode, der aus jeder JVM-Sprache generiert werden kann. Sie können andere JVM-Sprachen wie Java verwenden, um benutzerdefinierte Abhängigkeiten zu schreiben.

Anmeldeinformationen für Datenquellen verwalten

Bestehende Spark-Programme können mit einer komplexen oder benutzerdefinierten Konfiguration ausgestattet sein, um Daten aus ihren Datenquellen abzurufen. Gängige Datenquellen-Authentifizierungsflüsse werden von AWS Glue-Verbindungen unterstützt. Weitere Informationen zu AWS Glue-Verbindungen finden Sie unter Herstellen einer Verbindung zu Daten.

AWS Glue-Verbindungen ermöglichen es Ihnen, Ihren Auftrag zu verschiedenen Arten von Datenspeichern auf zwei Arten zu verbinden: durch Methodenaufrufe an unsere Bibliotheken und das Festlegen der Zusätzliche Netzwerkverbindung in der AWS-Konsole. Sie können auch den AWS-SDK aus Ihrem Auftrag aufrufen, um Informationen aus einer Verbindung abzurufen.

Methodenaufrufe – AWS Glue-Anschlüsse sind eng mit dem AWS Glue-Data Catalog integriert, ein Dienst, mit dem Sie Informationen über Ihre Datensätze kuratieren können und die für die Interaktion mit AWS Glue verfügbaren Methoden spiegeln das wider. Wenn Sie über eine vorhandene Authentifizierungskonfiguration verfügen, die Sie für JDBC-Verbindungen wiederverwenden möchten, können Sie auf Ihre AWS Glue-Verbindungskonfiguration über die extract_jdbc_conf-Methode auf der GlueContext zugreifen. Weitere Informationen finden Sie unter extract_jdbc_conf

Konsolenkonfiguration – AWS Glue-Aufträge verwenden assoziierte AWS Glue-Verbindungen, um Verbindungen zu Amazon VPC-Subnetzen zu konfigurieren. Wenn Sie Ihre Sicherheitsmaterialien direkt verwalten, müssen Sie möglicherweise eine NETWORK-Art der Zusätzlichen Netzwerkverbindung in der AWS-Konsole zur Konfiguration des Routings zur Verfügung stellen. Weitere Informationen über die AWS Glue-Verbindungs-API finden Sie unter Verbindungs-API

Wenn Ihre Spark-Programme über einen benutzerdefinierten oder ungewöhnlichen Authentifizierungsablauf verfügen, müssen Sie Ihre Sicherheitsmaterialien möglicherweise praxisnah verwalten. Wenn AWS Glue-Verbindungen nicht gut zu passen scheinen, können Sie Sicherheitsmaterialien sicher im Secrets Manager hosten und über den boto3 oder AWS-SDK, die im Job bereitgestellt werden, auf sie zugreifen.

Konfigurieren von Apache Spark

Komplexe Migrationen ändern häufig die Spark-Konfiguration, um ihre Workloads zu berücksichtigen. Moderne Versionen von Apache Spark ermöglichen die Einstellung der Laufzeitkonfiguration mit dem SparkSession. AWS Glue 3.0+ Jobs werden ein SparkSession bereitgestellt, das geändert werden kann, um die Laufzeitkonfiguration festzulegen. Apache Sparkkonfiguration. Tuning Spark ist komplex und AWS Glue garantiert keine Unterstützung für die Einstellung der gesamten Spark-Konfiguration. Wenn Ihre Migration eine umfangreiche Konfiguration auf Spark-Ebene erfordert, wenden Sie sich an den Support.

Erstellen einer benutzerdefinierten Konfiguration

Migrierte Spark-Programme können so konzipiert sein, dass sie benutzerdefinierte Konfigurationen annehmen. AWS Glue ermöglicht das Festlegen der Konfiguration auf Auftrags- und Auftragsausführungsebene über die Auftragsargumente. Informationen über Auftragsargumente finden Sie in Verwenden von Auftragsparametern in AWS Glue-Jobs. Sie können über unsere Bibliotheken auf Auftragsargumente im Kontext eines Auftrags zugreifen. AWS Glue stellt eine Hilfsfunktion bereit, um eine konsistente Ansicht zwischen Argumenten, die im Auftrag festgelegt wurden, und Argumenten, die bei der Auftragsausführung festgelegt wurden. Siehe Zugriff auf Parameter mit getResolvedOptions in Python und AWS Glue Scala GlueArgParser-APIs in Scala.

Migration von Java-Code

Wie in Bibliotheken von Drittanbietern einschließen erklärt, können Ihre Abhängigkeiten Klassen enthalten, die von JVM-Sprachen wie Java oder Scala generiert wurden. Ihre Abhängigkeiten können eine main-Methode einschließen. Sie können eine main-Methode in einer Abhängigkeit als Einstiegspunkt für einen AWS Glue-Scala-Auftrag verwenden. Auf diese Weise können Sie Ihre main-Methode in Java schreiben oder eine main-Methode auf Ihre eigenen Bibliotheksstandards gepackt wiederverwenden.

Um eine main-Methode aus einer Abhängigkeit zu verwenden, führen Sie Folgendes aus: Löschen Sie den Inhalt des Bearbeitungsbereichs, indem Sie das standardmäßige GlueApp-Objekt angeben. Geben Sie den vollqualifizierten Namen einer Klasse in einer Abhängigkeit als Auftragsargument mit dem Schlüssel --class an. Sie sollten nun einen Auftragsausführung auslösen können.

Sie können die Reihenfolge oder Struktur der Argumente, die AWS Glue auf die main-Methode weitergibt, nicht konfigurieren. Wenn Ihr vorhandener Code die Konfiguration lesen muss, die in AWS Glue festgelegt ist, wird dies wahrscheinlich zu Inkompatibilität mit vorhergehendem Code führen. Wenn Sie getResolvedOptions verwenden, haben Sie ebenso keinen guten Ort, um diese Methode aufzurufen. Erwägen Sie, Ihre Abhängigkeit direkt von einer Hauptmethode aufzurufen, die von AWS Glue generiert wird. Der folgende AWS Glue-ETL-Skript bietet ein Beispiel dafür.

import com.amazonaws.services.glue.util.GlueArgParser object GlueApp { def main(sysArgs: Array[String]) { val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray) // Invoke static method from JAR. Pass some sample arguments as a String[], one defined inline and one taken from the job arguments, using getResolvedOptions com.mycompany.myproject.MyClass.myStaticPublicMethod(Array("string parameter1", args("JOB_NAME"))) // Alternatively, invoke a non-static public method. (new com.mycompany.myproject.MyClass).someMethod() } }