Wie verwende ich externe Python-Bibliotheken in meinem AWS-Glue-2.0-ETL-Job?

Lesedauer: 5 Minute
0

Ich möchte externe Python-Bibliotheken in einem AWS-Glue-2.0-Job des Typs Extract, Transform, Load (ETL) verwenden.

Behebung

Mit AWS Glue Version 2.0 können Sie zusätzliche Python-Module oder verschiedene Versionen auf Jobebene installieren. Um ein neues Modul hinzuzufügen oder die Version eines vorhandenen Moduls zu ändern, verwenden Sie den Jobparameterschlüssel --additional-python-modules mit einem Wert, der eine kommagetrennte Liste von Python-Modulen enthält. Dadurch kann Ihr ETL-Job in AWS Glue 2.0 die zusätzlichen Module mithilfe des Python-Paketinstallationsprogramms (pip3) installieren.

So installieren Sie ein zusätzliches Python-Modul für Ihren AWS-Glue-Job:

  1. Öffnen Sie die AWS-Glue-Konsole.
  2. Wählen Sie im Navigationsbereich Jobs aus.
  3. Wählen Sie den Job aus, zu dem Sie das Python-Modul hinzufügen möchten.
  4. Wählen Sie Aktionen und dann Job bearbeiten aus.
  5. Erweitern Sie den Abschnitt Sicherheitskonfiguration, Skriptbibliotheken und Jobparameter (optional).
  6. Gehen Sie unter Jobparameter wie folgt vor:
    Geben Sie für Schlüssel --additional-python-modules ein.
    Geben Sie für Wert pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl ein.
  7. Klicken Sie auf Speichern.

Folgende Schritte sind ein Beispiel für die Installation von zwei verschiedenen Modulen:

  • PyMySQL über das Internet
  • Natural Language Toolkit (NLTK) aus einer Wheel-Datei auf Amazon Simple Storage Service (Amazon S3)

Um ein neues Modul zu installieren oder ein vorhandenes zu aktualisieren, müssen modulbezogene Abhängigkeiten heruntergeladen werden. Sie benötigen daher einen Internetzugang, um diese Aufgaben ausführen zu können. Weitere Informationen für den Fall, dass Sie über keinen Internetzugang verfügen, finden Sie unter Building Python modules from a wheel for Spark ETL workloads using AWS Glue 2.0.

Eine Liste der zusätzlichen Python-Module, die bereits in AWS Glue 2.0 bereitgestellt werden, finden Sie unter Python modules already provided in AWS Glue version 2.0.

In C geschriebene Bibliotheken und Erweiterungsmodule werden mit der Option**--additional-python-modules** ebenfalls von AWS Glue 2.0 unterstützt. Einige Python-Module, beispielsweise spacy und grpc, lassen sich jedoch nur mit Root-Rechten installieren. Ohne Root-Rechte schlägt die Kompilierung dieser Module während der Installation fehl. AWS Glue bietet während der Paketinstallation keinen Root-Zugriff. Die Lösung besteht darin, die Binärdateien in ein mit AWS Glue kompatibles Wheel vorzukompilieren und dieses Wheel zu installieren.

Um eine Bibliothek in einer C-basierten Sprache zu kompilieren, muss der Compiler mit dem Zielbetriebssystem und der betreffenden Prozessorarchitektur kompatibel sein. Wenn die Bibliothek für ein anderes Betriebssystem oder eine andere Prozessorarchitektur kompiliert wurde, wird das Wheel nicht in AWS Glue installiert. Da es sich bei AWS Glue um einen verwalteten Service handelt, ist für die Entwicklung dieser Abhängigkeiten kein Cluster-Zugriff verfügbar. Gehen Sie wie folgt vor, um das C-basierte Python-Modul, für das Root-Rechte erforderlich sind, vorzukompilieren:

Hinweis: Diese Schritte sind ein Beispiel für die Installation des Moduls grpcio.

1.Starten Sie eine Amazon Elastic Compute Cloud (Amazon EC2)-Linux-Instance mit ausreichend Speicherplatz für Ihre Bibliotheken.

2.Installieren Sie den Docker-Container auf der Instance, richten Sie den Nicht-Sudo-Zugriff ein und starten Sie Docker.

sudo yum install docker -y
sudo usermod -a -G docker ec2-user
sudo service docker start

3.Erstellen Sie eine Datei dockerfile_grpcio und kopieren Sie Folgendes in die Datei:

# Base for AWS Glue
FROM amazonlinux
RUN yum update -y
RUN yum install shadow-utils.x86_64 -y
RUN yum install -y java-1.8.0-openjdk.x86_64
RUN yum install -y python3
RUN yum install -y cython doxygen numpy scipy gcc autoconf automake libtool zlib-devel openssl-devel maven wget protobuf-compiler cmake make gcc-c++
# Additional components needed for grpcio
WORKDIR /root
RUN yum install python3-devel -y
RUN yum install python-devel -y
RUN pip3 install wheel
# Install grpcio and related modules
RUN pip3 install Cython
RUN pip3 install cmake scikit-build
RUN pip3 install grpcio
# Create a directory for the wheel
RUN mkdir wheel_dir
# Create the wheel
RUN pip3 wheel grpcio -w wheel_dir

4.Führen Sie den Docker-Build aus, um Ihr Dockerfile zu erstellen. Führen Sie die folgenden Befehle aus, um den Docker-Daemon neu zu starten:

$ sudo service docker restart
$ docker build -f dockerfile_grpcio .

Wenn der Docker-Build-Befehl abgeschlossen ist, wird eine Erfolgsmeldung mit Ihrer Docker-Image-ID angezeigt. Zum Beispiel: „1111222233334444 wurde erfolgreich erstellt.“ Notieren Sie sich die Docker-Image-ID, um sie im nächsten Schritt zu verwenden.

5.Extrahieren Sie die Wheel-Datei aus dem Docker-Container. Führen Sie die folgenden Befehle aus, um die Datei .whl zu extrahieren:

# Get the docker image ID
$ docker image ls

# Run the container
$ docker run -dit 111122223334444

# Verify the location of the wheel file and retrieve the name of the wheel file
$ docker exec -t -i 5555666677778888 ls /root/wheel_dir/

# Copy the wheel out of docker to EC2
$ docker cp 5555666677778888:/root/wheel_dir/doc-example-wheel .

Ersetzen Sie die folgenden Werte in den obigen Befehlen:

  • 1111222233334444 mit der Docker-Image-ID
  • 5555666677778888 mit der Container-ID
  • doc-example-wheel mit dem Namen der generierten Wheel-Datei

6.Laden Sie das Wheel auf Amazon S3 hoch, indem Sie die folgenden Befehle ausführen:

aws s3 cp doc-example-wheel s3://path/to/wheel/
aws s3 cp grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl s3://aws-glue-add-modules/grpcio/

Ersetzen Sie die folgenden Werte in den obigen Befehlen:

  • doc-example-wheel mit dem Namen der generierten Wheel-Datei
  • grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl mit dem Namen der Python-Paketdatei

7.Geben Sie in der AWS-Glue-Konsole unter Jobparameter Folgendes für den AWS-Glue-ETL-Job ein: Geben Sie für Schlüssel --additional-python-modules ein.
Geben Sie für Wert s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl ein.
**Hinweis:**Ersetzen Sie grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl mit dem Namen der Python-Paketdatei.

Wichtig: Die AWS-Glue-Versionen 0.9 und 1.0 unterstützen keine in C geschriebenen Python-Module. Informationen zur Installation einer externen Python-Bibliothek in AWS Glue 0.9 und 1.0 finden Sie unter Wie verwende ich externe Python-Bibliotheken in meinem AWS Glue 1.0 oder 0.9 ETL-Job?


Verwandte Informationen

Using Python libraries with AWS Glue

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren