

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.

# Lokales Entwickeln und Testen von AWS Glue-Jobskripten
<a name="aws-glue-programming-etl-libraries"></a>

Wenn Sie Ihre AWS Glue for Spark-Jobskripte entwickeln und testen, stehen Ihnen mehrere Optionen zur Verfügung:
+ AWS Glue Studio-Konsole
  + Visual editor (Visueller Editor)
  + Skript-Editor
  + AWS Glue Studio Notizbuch
+ Interaktive Sitzungen
  + Jupyter Notebook
+ Docker-Image
  + Lokale Entwicklung
  + Remote-Entwicklung

Sie können eine der oben genannten Optionen entsprechend Ihren Anforderungen auswählen.

Wenn Sie keinen Code oder weniger Code-Erfahrung bevorzugen, ist der Visual Editor von AWS Glue Studio eine gute Wahl.

Wenn Sie ein interaktives Notizbucherlebnis bevorzugen, ist das AWS Glue Studio-Notizbuch eine gute Wahl. Weitere Informationen finden Sie unter [Notizbücher mit AWS Glue Studio und AWS Glue](https://docs.aws.amazon.com/glue/latest/ug/notebooks-chapter.html) verwenden. Wenn Sie Ihre eigene lokale Umgebung nutzen möchten, sind interaktive Sitzungen eine gute Wahl. Weitere Informationen finden Sie unter [Interaktive Sitzungen mit AWS Glue verwenden](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions-chapter.html).

Wenn Sie local/remote Entwicklungserfahrung bevorzugen, ist das Docker-Image eine gute Wahl. Auf diese Weise können Sie AWS Glue for Spark-Jobskripte entwickeln und testen, wo immer Sie möchten, ohne dass AWS Glue-Kosten anfallen.

Wenn Sie lokale Entwicklung ohne Docker bevorzugen, ist die lokale Installation des AWS Glue ETL-Bibliotheksverzeichnisses eine gute Wahl.

## Entwickeln mit AWS Glue Studio
<a name="develop-using-studio"></a>

Der visuelle Editor von AWS Glue Studio ist eine grafische Oberfläche, die es einfach macht, ETL-Jobs (Extrahieren, Transformieren und Laden) in AWS Glue zu erstellen, auszuführen und zu überwachen. Sie können Workflows zur Datentransformation visuell zusammenstellen und sie nahtlos auf der Apache Spark-basierten serverlosen ETL-Engine von AWS Glue ausführen. Sie können das Schema und die Datenergebnisse in jedem Schritt des Auftrags überprüfen. Weitere Informationen finden Sie im [Benutzerhandbuch von AWS Glue Studio](https://docs.aws.amazon.com/glue/latest/ug/what-is-glue-studio.html).

## Entwickeln mit interaktiven Sitzungen
<a name="develop-using-interactive-sessions"></a>

Mit interaktiven Sitzungen können Sie Anwendungen aus der Umgebung Ihrer Wahl erstellen und testen. Weitere Informationen finden Sie unter [Interaktive Sitzungen mit AWS Glue verwenden](https://docs.aws.amazon.com/glue/latest/dg/interactive-sessions-chapter.html).

# AWS Glue Jobs lokal mit einem Docker-Image entwickeln und testen
<a name="develop-local-docker-image"></a>

 Für eine produktionsreife Datenplattform sind der Entwicklungsprozess und die CI/CD Pipeline für AWS Glue Jobs ein zentrales Thema. Sie können AWS Glue Jobs in einem Docker-Container flexibel entwickeln und testen. AWS Glue hostet Docker-Images auf Docker Hub, um Ihre Entwicklungsumgebung mit zusätzlichen Dienstprogrammen einzurichten. Sie können Ihre bevorzugte IDE, Ihr bevorzugtes Notebook oder REPL mithilfe der ETL-Bibliothek verwenden AWS Glue . In diesem Thema wird beschrieben, wie Sie Jobs der AWS Glue Version 5.0 in einem Docker-Container mithilfe eines Docker-Images entwickeln und testen.

## Verfügbare Docker-Images
<a name="develop-local-available-docker-images-ecr"></a>

 Die folgenden Docker-Images sind für AWS Glue [Amazon ECR](https://gallery.ecr.aws/glue/aws-glue-libs) verfügbar:. 
+  Für AWS Glue Version 5.0: `public.ecr.aws/glue/aws-glue-libs:5` 
+ Für AWS Glue Version 4.0: `public.ecr.aws/glue/aws-glue-libs:glue_libs_4.0.0_image_01`
+ Für AWS Glue Version 3.0: `public.ecr.aws/glue/aws-glue-libs:glue_libs_3.0.0_image_01`
+ Für AWS Glue Version 2.0: `public.ecr.aws/glue/aws-glue-libs:glue_libs_2.0.0_image_01`

**Anmerkung**  
 AWS Glue Docker-Images sind sowohl mit x86\$164 als auch mit arm64 kompatibel. 

 In diesem Beispiel verwenden wir `public.ecr.aws/glue/aws-glue-libs:5` und führen den Container auf einem lokalen Rechner (Mac, Windows oder Linux) aus. Dieses Container-Image wurde für Spark-Jobs der Version 5.0 getestet AWS Glue . Dieses Image enthält Folgendes: 
+  Amazon Linux 2023 
+  AWS Glue ETL-Bibliothek 
+  Apache Spark 3.5.4 
+  Bibliotheken im offenen Tabellenformat; Apache Iceberg 1.7.1, Apache Hudi 0.15.0 und Delta Lake 3.3.0 
+  AWS Glue Datenkatalog-Client 
+  Amazon Redshift Konnektor für Apache Spark 
+  Amazon DynamoDB Anschluss für Apache Hadoop 

 Laden Sie zum Einrichten Ihres Containers das Image aus der ECR Public Gallery herunter und führen Sie dann den Container aus. In diesem Thema wird gezeigt, wie Sie Ihren Container je nach Ihren Anforderungen mit den folgenden Methoden ausführen: 
+ `spark-submit`
+ REPL-Shell `(pyspark)`
+ `pytest`
+ Visual Studio Code

## Voraussetzungen
<a name="develop-local-docker-image-prereq"></a>

Stellen Sie vor dem Starten sicher, dass Docker installiert ist und der Docker-Daemon ausgeführt wird. Installationsanweisungen finden Sie in der Docker-Dokumentation für [Mac](https://docs.docker.com/docker-for-mac/install/) oder [Linux](https://docs.docker.com/engine/install/). Der Computer, auf dem der Docker ausgeführt wird, hostet den AWS Glue Container. Stellen Sie außerdem sicher, dass Sie über mindestens 7 GB Speicherplatz für das Image auf dem Host, auf dem der Docker ausgeführt wird, verfügen.

 Weitere Informationen zu Einschränkungen bei der lokalen Entwicklung von AWS Glue Code finden Sie unter [Einschränkungen für die lokale Entwicklung](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html#local-dev-restrictions). 

### Konfiguration AWS
<a name="develop-local-docker-image-config-aws-credentials"></a>

Um AWS API-Aufrufe aus dem Container zu aktivieren, richten Sie die AWS Anmeldeinformationen wie folgt ein. In den folgenden Abschnitten werden wir dieses AWS benannte Profil verwenden.

1.  [Erstellen Sie ein AWS benanntes Profil](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-files.html). 

1.  Öffnen Sie es `cmd` unter Windows oder einem Terminal Mac/Linux und führen Sie den folgenden Befehl in einem Terminal aus: 

   ```
   PROFILE_NAME="<your_profile_name>"
   ```

In den folgenden Abschnitten verwenden wir dieses AWS benannte Profil.

### 
<a name="develop-local-docker-pull-image-from-ecr-public"></a>

 Wenn Sie Docker in Windows ausführen, wählen Sie das Docker-Symbol aus (mit Rechtsklick) und wählen Sie dann **Zu Linux-Containern wechseln** aus, bevor Sie das Image abrufen. 

Mit dem folgenden Befehl können Sie das Image aus ECR Public abrufen:

```
docker pull public.ecr.aws/glue/aws-glue-libs:5 
```

## Ausführen des Containers
<a name="develop-local-docker-image-setup-run"></a>

Sie können jetzt mit diesem Image einen Container ausführen. Sie können eine der folgenden Optionen entsprechend Ihren Anforderungen auswählen.

### spark-submit
<a name="develop-local-docker-image-setup-run-spark-submit"></a>

Sie können ein AWS Glue Jobskript ausführen, indem Sie den `spark-submit` Befehl auf dem Container ausführen. 

1.  Schreiben Sie Ihr Skript und speichern Sie es als `sample.py` wie im Beispiel unten. Speichern Sie es mit den folgenden Befehlen unter dem `/local_path_to_workspace/src/`-Verzeichnis: 

   ```
   $ WORKSPACE_LOCATION=/local_path_to_workspace
   $ SCRIPT_FILE_NAME=sample.py
   $ mkdir -p ${WORKSPACE_LOCATION}/src
   $ vim ${WORKSPACE_LOCATION}/src/${SCRIPT_FILE_NAME}
   ```

1.  Diese Variablen werden im folgenden Docker-Ausführungsbefehl verwendet. Der im folgenden Befehl „spark-submit“ verwendete Beispielcode (sample.py) ist im Anhang am Ende dieses Themas enthalten. 

    Führen Sie den folgenden Befehl aus, um den `spark-submit`-Befehl für den Container zum Übermitteln einer neuen Spark-Anwendung auszuführen: 

   ```
   $ docker run -it --rm \
       -v ~/.aws:/home
       /hadoop/.aws \
       -v $WORKSPACE_LOCATION:/home/hadoop/workspace/ \
       -e AWS_PROFILE=$PROFILE_NAME \
       --name glue5_spark_submit \
       public.ecr.aws/glue/aws-glue-libs:5 \
       spark-submit /home/hadoop/workspace/src/$SCRIPT_FILE_NAME
   ```

1. (Optional) Passen Sie die Konfiguration von `spark-submit` an Ihre Umgebung an. Sie können beispielsweise Ihre Abhängigkeiten mit der `--jars`-Konfiguration übergeben. Weitere Informationen finden Sie unter [Dynamically Loading Spark Properties](https://spark.apache.org/docs/latest/configuration.html) in der Spark-Dokumentation. 

### REPL-Shell (Pyspark)
<a name="develop-local-docker-image-setup-run-repl-shell"></a>

 Sie können die REPL (`read-eval-print loops`)-Shell für die interaktive Entwicklung ausführen. Führen Sie den folgenden Befehl aus, um den PySpark Befehl auf dem Container auszuführen und die REPL-Shell zu starten: 

```
$ docker run -it --rm \
    -v ~/.aws:/home/hadoop/.aws \
    -e AWS_PROFILE=$PROFILE_NAME \
    --name glue5_pyspark \
    public.ecr.aws/glue/aws-glue-libs:5 \
    pyspark
```

 Dann erhalten Sie die folgende Ausgabe: 

```
Python 3.11.6 (main, Jan  9 2025, 00:00:00) [GCC 11.4.1 20230605 (Red Hat 11.4.1-2)] on linux
Type "help", "copyright", "credits" or "license" for more information.
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 3.5.4-amzn-0
      /_/

Using Python version 3.11.6 (main, Jan  9 2025 00:00:00)
Spark context Web UI available at None
Spark context available as 'sc' (master = local[*], app id = local-1740643079929).
SparkSession available as 'spark'.
>>>
```

 Mit dieser REPL-Shell können Sie interaktiv programmieren und testen. 

### Pytest
<a name="develop-local-docker-image-setup-run-pytest"></a>

 Für Komponententests können Sie Jobskripte `pytest` für AWS Glue Spark verwenden. Führen Sie zur Vorbereitung die folgenden Befehle aus. 

```
$ WORKSPACE_LOCATION=/local_path_to_workspace
$ SCRIPT_FILE_NAME=sample.py
$ UNIT_TEST_FILE_NAME=test_sample.py
$ mkdir -p ${WORKSPACE_LOCATION}/tests
$ vim ${WORKSPACE_LOCATION}/tests/${UNIT_TEST_FILE_NAME}
```

 Führen Sie folgenden Befehl zur Ausführung von `pytest` mit `docker run` aus: 

```
$ docker run -i --rm \
    -v ~/.aws:/home/hadoop/.aws \
    -v $WORKSPACE_LOCATION:/home/hadoop/workspace/ \
    --workdir /home/hadoop/workspace \
    -e AWS_PROFILE=$PROFILE_NAME \
    --name glue5_pytest \
    public.ecr.aws/glue/aws-glue-libs:5 \
    -c "python3 -m pytest --disable-warnings"
```

 Sobald `pytest` die Ausführung der Modultests abgeschlossen hat, sieht Ihre Ausgabe in etwa so aus: 

```
============================= test session starts ==============================
platform linux -- Python 3.11.6, pytest-8.3.4, pluggy-1.5.0
rootdir: /home/hadoop/workspace
plugins: integration-mark-0.2.0
collected 1 item

tests/test_sample.py .                                                   [100%]

======================== 1 passed, 1 warning in 34.28s =========================
```

### Einrichten des Containers für die Verwendung von Visual Studio Code
<a name="develop-local-docker-image-setup-visual-studio"></a>

 Gehen Sie wie folgt vor, um den Container mit Visual Studio Code einzurichten. 

1. Installieren Sie Visual Studio Code.

1. Installieren Sie [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python).

1. Installieren Sie [Visual Studio Code Remote - Containers](https://code.visualstudio.com/docs/remote/containers)

1. Öffnen Sie den Workspace-Ordner in Visual Studio Code.

1. Drücken Sie auf `Ctrl+Shift+P` (Windows/Linux) oder `Cmd+Shift+P` (Mac).

1. Geben Sie `Preferences: Open Workspace Settings (JSON)` ein.

1. Drücken Sie die **Eingabetaste**.

1. Fügen Sie das folgende JSON ein und speichern Sie die Einstellung.

   ```
   {
       "python.defaultInterpreterPath": "/usr/bin/python3.11",
       "python.analysis.extraPaths": [
           "/usr/lib/spark/python/lib/py4j-0.10.9.7-src.zip:/usr/lib/spark/python/:/usr/lib/spark/python/lib/",
       ]
   }
   ```

 So richten Sie den Container ein: 

1. Führen Sie den Docker-Container aus.

   ```
   $ docker run -it --rm \
       -v ~/.aws:/home/hadoop/.aws \
       -v $WORKSPACE_LOCATION:/home/hadoop/workspace/ \
       -e AWS_PROFILE=$PROFILE_NAME \
       --name glue5_pyspark \
       public.ecr.aws/glue/aws-glue-libs:5 \
       pyspark
   ```

1. Starten Sie Visual Studio Code.

1.  Wählen Sie im linken Menü **Remote Explorer** und dann `amazon/aws-glue-libs:glue_libs_4.0.0_image_01` aus. 

1.  Klicken Sie mit der rechten Maustaste und wählen Sie **Im aktuellen Fenster anhängen**.   
![\[Wenn Sie mit der rechten Maustaste klicken, wird ein Fenster mit der Option „Im aktuellen Fenster anhängen“ angezeigt.\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/vs-code-other-containers.png)

1.  Wenn das folgende Dialogfeld angezeigt wird, wählen Sie **Verstanden**.   
![\[Eine Fensterwarnung mit der Meldung „Das Anfügen an einen Container kann die Ausführung von beliebigem Code zur Folge haben“.\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/vs-code-warning-got-it.png)

1. Öffnen Sie `/home/handoop/workspace/`.  
![\[Ein Drop-down-Fenster mit der Option „Arbeitsbereich“ ist hervorgehoben.\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/vs-code-open-workspace.png)

1.  Erstellen Sie ein AWS Glue PySpark Skript und wählen Sie **Ausführen**. 

   Sie werden die erfolgreiche Ausführung des Skripts sehen.  
![\[Die erfolgreiche Ausführung des Skripts.\]](http://docs.aws.amazon.com/de_de/glue/latest/dg/images/vs-code-run-successful-script.png)

## Änderungen zwischen dem Docker-Image AWS Glue 4.0 und AWS Glue 5.0
<a name="develop-local-docker-glue4-glue5-changes"></a>

 Die wichtigsten Änderungen zwischen dem Docker-Image AWS Glue 4.0 und AWS Glue 5.0: 
+  In AWS Glue 5.0 gibt es ein einzelnes Container-Image für Batch- und Streaming-Jobs. Dies unterscheidet sich von Glue 4.0, wo es ein Image für Batch und ein weiteres für Streaming gab. 
+  In AWS Glue 5.0 lautet der Standardbenutzername des Containers`hadoop`. In AWS Glue 4.0 lautete der Standardbenutzername`glue_user`. 
+  In AWS Glue 5.0 wurden mehrere zusätzliche Bibliotheken, darunter Livy JupyterLab und Livy, aus dem Bild entfernt. Sie können diese manuell installieren. 
+  In AWS Glue 5.0 sind alle Iceberg-, Hudi- und Delta-Bibliotheken standardmäßig vorinstalliert, und die Umgebungsvariable `DATALAKE_FORMATS` wird nicht mehr benötigt. Vor AWS Glue 4.0 wurde die Umgebungsvariable `DATALAKE_FORMATS` Umgebungsvariable verwendet, um anzugeben, welche spezifischen Tabellenformate geladen werden sollten. 

 Die obige Liste ist spezifisch für das Docker-Image. Weitere Informationen zu AWS Glue 5.0-Updates finden Sie unter [Einführung von AWS Glue 5.0 für Apache Spark](https://aws.amazon.com/blogs/big-data/introducing-aws-glue-5-0-for-apache-spark/) und [Migration von AWS Glue for Spark-Jobs auf AWS Glue Version 5.0](https://docs.aws.amazon.com/glue/latest/dg/migrating-version-50.html). 

## Überlegungen
<a name="develop-local-docker-considerations"></a>

 Beachten Sie, dass die folgenden Funktionen nicht unterstützt werden, wenn Sie das AWS Glue Container-Image zur lokalen Entwicklung von Jobskripten verwenden. 
+  [Auftrags-Lesezeichen](https://docs.aws.amazon.com/glue/latest/dg/monitor-continuations.html) 
+  AWS Glue Parquet Writer ([unter Verwendung des Parquet-Formats in AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-parquet-home.html)) 
+  [ FillMissingValues transformieren](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-transforms-fillmissingvalues.html) 
+  [FindMatches transformieren](https://docs.aws.amazon.com/glue/latest/dg/machine-learning.html#find-matches-transform) 
+  [Vektorisierter SIMD-CSV-Reader](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-csv-home.html#aws-glue-programming-etl-format-simd-csv-reader) 
+  Die Eigenschaft [ customJdbcDriverS3Path](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-jdbc) zum Laden des JDBC-Treibers aus dem Amazon S3-Pfad 
+  [AWS Glue Qualität der Daten](https://docs.aws.amazon.com/glue/latest/dg/glue-data-quality.html) 
+  [Erkennung sensibler Daten](https://docs.aws.amazon.com/glue/latest/dg/detect-PII.html) 
+  AWS Lake Formation Verkauf von Zugangsdaten auf der Grundlage von Genehmigungen 

## Anhang: Hinzufügen von JDBC-Treibern und Java-Bibliotheken
<a name="develop-local-docker-image-appendix"></a>

 Um einen JDBC-Treiber hinzuzufügen, der derzeit nicht im Container verfügbar ist, können Sie in Ihrem Arbeitsbereich ein neues Verzeichnis mit den benötigten JAR-Dateien erstellen und das Verzeichnis im Docker-Ausführungsbefehl unter `/opt/spark/jars/` einbinden. JAR-Dateien, die sich im Container unter `/opt/spark/jars/` befinden, werden automatisch zu Spark Classpath hinzugefügt und können während der Auftragsausführung verwendet werden. 

 Verwenden Sie beispielsweise den folgenden Befehl docker run, um JDBC-Treiber-Jars zur REPL-Shell hinzuzufügen. PySpark 

```
docker run -it --rm \
    -v ~/.aws:/home/hadoop/.aws \
    -v $WORKSPACE_LOCATION:/home/hadoop/workspace/ \
    -v $WORKSPACE_LOCATION/jars/:/opt/spark/jars/ \
    --workdir /home/hadoop/workspace \
    -e AWS_PROFILE=$PROFILE_NAME \
    --name glue5_jdbc \
    public.ecr.aws/glue/aws-glue-libs:5 \
    pyspark
```

 Wie unter **Überlegungen** hervorgehoben, kann die `customJdbcDriverS3Path` Verbindungsoption nicht verwendet werden, um einen benutzerdefinierten JDBC-Treiber aus Amazon S3 in AWS Glue Container-Images zu importieren. 