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.
-
Eignen Sie sich die Quelle Ihres Skripts an. In diesem Beispiel verwenden Sie ein Beispielskript aus dem Apache Spark-Repository. Binarizer-Beispiel
-
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.pygespeichert 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.
-
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
2und die Anzahl der Wiederholungen auf1. 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)
-
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.
-
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/outputvisualisiert, 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:
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--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
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() } }