

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 Sie Apache Spark-Programme zu AWS Glue
<a name="glue-author-migrate-apache-spark"></a>

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 migrieren AWS Glue , um unsere Funktionen zu nutzen. AWS Glue bietet dieselben Leistungsverbesserungen, die Sie von Apache Spark auf Amazon EMR erwarten würden.

## Spark-Code ausführen
<a name="glue-author-migrate-apache-spark-run"></a>

Nativer Spark-Code kann standardmäßig in einer AWS Glue Umgebung 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 besser für die Ausführung in einem AWS Glue Job, sodass 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](https://github.com/apache/spark/blob/master/examples/src/main/python/ml/binarizer_example.py) 

1. **Erweitern Sie in der AWS Glue Konsole den linken Navigationsbereich und wählen Sie **ETL** > Jobs** 

   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-Jobs-Seite mit ausgewähltem Spark-Skripteditor-Bereich.\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/migrate-apache-spark-01-upload-job.png)

1. Ihr Browser navigiert zum Skript-Editor. Klicken Sie in der Kopfzeile auf die Registerkarte **Auftragsdetails**. Legen Sie den **Namen** und die **IAM-Rolle** fest. Anleitungen zu AWS Glue IAM-Rollen finden [Einrichten von IAM-Berechtigungen für AWS Glue](set-up-iam.md) Sie unter.

   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.\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/migrate-apache-spark-02-job-details.png)

1. 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.\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/migrate-apache-spark-03-job-runs.png)

1. 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 so eingestellt ist, dass sie den Inhalt der AWS Glue Standard-Protokollgruppe visualisiert`/aws-glue/jobs/output`, gefiltert nach dem Inhalt der Protokollstreams für die Job-Ausfü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 Spark-Programmausgabe.\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/migrate-apache-spark-04-log-output.png)

## Gängige Verfahren für die Migration von Spark-Programmen
<a name="glue-author-migrate-apache-spark-migrate"></a>

### Bewerten Sie den Support der Spark-Version
<a name="glue-author-migrate-apache-spark-migrate-versions"></a>

 AWS Glue Release-Versionen definieren die Version von Apache Spark und Python, die für den AWS Glue Job verfügbar sind. Sie finden unsere AWS Glue Versionen und was sie unterstützen unter[AWS Glue Versionen](release-notes.md#release-notes-versions). 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
<a name="glue-author-migrate-apache-spark-third-party-libraries"></a>

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](aws-glue-programming-python-libraries.md)

Allgemeine Python-Abhängigkeiten werden in der AWS Glue Umgebung bereitgestellt, einschließlich der häufig angeforderten [Pandas-Bibliothek](https://pandas.pydata.org/). Diese Abhängigkeiten sind in der AWS Glue -Version 2.0\$1 enthalten. Weitere Informationen zu bereitgestellten Modulen finden Sie unter [Python-Module sind bereits in AWS Glue enthalten](aws-glue-programming-python-libraries.md#glue-modules-provided). 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](aws-glue-programming-etl-glue-arguments.md).

Sie können zusätzliche Python-Abhängigkeiten mit dem `--extra-py-files`-Auftragsargument liefern. Wenn Sie einen Job 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](aws-glue-programming-python-libraries.md#extra-py-files-support).

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
<a name="glue-author-migrate-apache-spark-credential-management"></a>

Bestehende Spark-Programme können mit einer komplexen oder benutzerdefinierten Konfiguration ausgestattet sein, um Daten aus ihren Datenquellen abzurufen. Gängige Authentifizierungsabläufe für Datenquellen werden von Verbindungen unterstützt. AWS Glue Weitere Informationen zu AWS Glue -Verbindungen finden Sie unter [Herstellen einer Verbindung zu Daten](glue-connections.md).

AWS Glue Verbindungen ermöglichen es, Ihren Job auf zwei Arten von Datenspeichern mit einer Vielzahl von Arten von Datenspeichern zu verbinden: durch Methodenaufrufe an unsere Bibliotheken und durch das Einrichten der **zusätzlichen Netzwerkverbindung** in der AWS Konsole. Sie können das AWS SDK auch von Ihrem Job aus aufrufen, um Informationen aus einer Verbindung abzurufen. 

 **Methodenaufrufe** — AWS Glue Verbindungen sind eng in den AWS Glue Datenkatalog integriert, einen Dienst, der es Ihnen ermöglicht, Informationen über Ihre Datensätze zu kuratieren, und die verfügbaren Methoden zur Interaktion mit AWS Glue Verbindungen spiegeln dies wider. Wenn Sie über eine bestehende Authentifizierungskonfiguration verfügen, die Sie für JDBC-Verbindungen wiederverwenden möchten, können Sie auf Ihre AWS Glue Verbindungskonfiguration über die Methode auf der zugreifen. `extract_jdbc_conf` `GlueContext` Weitere Informationen finden Sie unter [extract\$1jdbc\$1conf](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-extract_jdbc_conf). 

**Konsolenkonfiguration** — AWS Glue Jobs verwenden zugehörige AWS Glue Verbindungen, um Verbindungen zu Amazon VPC-Subnetzen zu konfigurieren. Wenn Sie Ihre Sicherheitsmaterialien direkt verwalten, müssen Sie in der AWS Konsole möglicherweise den `NETWORK` Typ **Zusätzliche Netzwerkverbindung** angeben, um das Routing zu konfigurieren. Weitere Informationen über die AWS Glue -Verbindungs-API finden Sie unter [Verbindungs-API](aws-glue-api-catalog-connections.md)

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 in Secrets Manager hosten und über das Boto3 oder AWS SDK, die im Job bereitgestellt werden, darauf zugreifen.

### Konfigurieren von Apache Spark
<a name="glue-author-migrate-apache-spark-spark-configuration"></a>

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 Es werden Jobs über 3.0 bereitgestellt`SparkSession`, die geändert werden können, um die Laufzeitkonfiguration festzulegen. [Apache Sparkkonfiguration](https://spark.apache.org/docs/latest/configuration.html). Das Tuning von Spark ist komplex und garantiert AWS Glue nicht, dass die gesamte Spark-Konfiguration eingerichtet wird. Wenn Ihre Migration eine umfangreiche Konfiguration auf Spark-Ebene erfordert, wenden Sie sich an den Support.

### Erstellen einer benutzerdefinierten Konfiguration
<a name="glue-author-migrate-apache-spark-custom-configuration"></a>

Migrierte Spark-Programme können so konzipiert sein, dass sie eine benutzerdefinierte Konfiguration erfordern. AWS Glue ermöglicht es, die Konfiguration über die Job-Argumente auf Job- und Job-Ausführungsebene festzulegen. Informationen über Auftragsargumente finden Sie in [Verwenden von Auftragsparametern in AWS Glue-Jobs](aws-glue-programming-etl-glue-arguments.md). Sie können über unsere Bibliotheken auf Job-Argumente im Kontext eines Jobs zugreifen. AWS Glue bietet eine Hilfsfunktion, um eine konsistente Ansicht zwischen den Argumenten, die im Job gesetzt wurden, und den Argumenten, die während der Jobausführung gesetzt wurden, bereitzustellen. Siehe [Zugriff auf Parameter mit `getResolvedOptions`](aws-glue-api-crawler-pyspark-extensions-get-resolved-options.md) in Python und [AWS GlueScala GlueArgParser APIs](glue-etl-scala-apis-glue-util-glueargparser.md) in Scala.

### Migration von Java-Code
<a name="glue-author-migrate-apache-spark-java-code"></a>

Wie in [Bibliotheken von Drittanbietern einschließen](#glue-author-migrate-apache-spark-third-party-libraries) 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-Job 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 AWS Glue Argumentübergaben an die Methode nicht konfigurieren. `main` Wenn Ihr vorhandener Code die eingestellte Konfiguration lesen muss AWS Glue, führt dies wahrscheinlich zu einer Inkompatibilität mit dem vorherigen Code. 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. Das folgende AWS Glue ETL-Skript zeigt 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()
  }
}
```