Wie verwende ich externe Python-Bibliotheken in einem AWS-Glue-ETL-Auftrag?
Ich möchte externe Python-Bibliotheken in einem AWS-Glue-Auftrag des Typs „Extract, Transform, Load“ (ETL, Extrahieren, Transformieren und Laden) verwenden.
Kurzbeschreibung
Wenn du die AWS-Glue-Versionen 2.0, 3.0 und 4.0 verwendest, kannst du zusätzliche Python-Module oder verschiedene Modulversionen auf Auftragsebene installieren. Um ein neues Modul hinzuzufügen oder die Version eines vorhandenen Moduls zu ändern, verwende den Auftragsparameterschlüssel --additional-python-modules. Der Wert des Schlüssels ist eine Liste von durch Komma getrennten Python-Modulnamen. Wenn du diesen Parameter verwendest, installiert der AWS-Glue-ETL-Auftrag die zusätzlichen Module über das Python-Paketinstallationsprogramm (pip3).
Du kannst auch den Parameter --additional-python-modules verwenden, um Python-Bibliotheken zu installieren, die in C-basierten Sprachen geschrieben sind.
Lösung
Python-Module installieren oder aktualisieren
Gehe wie folgt vor, um ein zusätzliches Python-Modul für den AWS-Glue-Auftrag zu installieren:
- Öffne die AWS-Glue-Konsole.
- Wähle im Navigationsbereich Jobs (Aufträge) aus.
- Wähle den Auftrag aus, zu dem du das Python-Modul hinzufügen möchtest.
- Wähle Actions (Aktionen) und dann Edit job (Job bearbeiten) aus.
- Erweitere den Abschnitt Security configuration, script libraries, and job parameters (optional) (Sicherheitskonfiguration, Skriptbibliotheken und Jobparameter (optional)).
- Gehe unter Job parameters (Jobparameter) wie folgt vor:
Gib für Key (Schlüssel) --additional-python-modules ein.
Gib unter Value (Wert) eine durch Komma getrennte Liste von Modulen ein, die du hinzufügen möchtest. - Wähle Save (Speichern) aus.
Angenommen, du möchtest zwei neue Module hinzufügen, Version 1.0.2 von PyMySQL und Version 3.6.2 des Natural Language Toolkits (NLTK). Du installierst das PyMySQL-Modul aus dem Internet und das NLTK-Modul aus einem Amazon Simple Storage Service (Amazon S3)-Bucket. In diesem Fall hat der Parameterschlüssel --additional-python-modules den Wert pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl.
Einige Module haben Abhängigkeiten von anderen Modulen. Wenn du ein solches Modul installierst oder aktualisierst, musst du auch die anderen Module herunterladen, von denen es abhängt. Dies bedeutet, dass du über einen Internetzugang verfügen musst, um das Modul zu installieren oder zu aktualisieren. Falls du keinen Internetzugang hast, findest du weitere Informationen unter Building Python modules from a wheel for Spark ETL workloads using AWS Glue 2.0 (Erstellen von Python-Modulen von einem Rad aus für Spark-ETL-Workloads mit AWS Glue 2.0).
Eine Liste der Python-Module, die standardmäßig in jeder Version von AWS Glue enthalten sind, findest du unter Python modules already provided in AWS Glue (Python-Module, die bereits in AWS Glue bereitgestellt werden).
C-basierte Python-Module installieren
Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Troubleshooting errors for the AWS CLI (Problembehandlung bei der AWS CLI). Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
AWS Glue unterstützt auch Bibliotheken und Erweiterungen, die in C mit dem Parameter --additional-python-modules geschrieben wurden. Einige Python-Module, beispielsweise spacy und grpc, lassen sich jedoch nur mit Root-Berechtigungen installieren. AWS Glue bietet während der Paketinstallation keinen Root-Zugriff. Um dieses Problem zu lösen, kompiliere die Binärdateien in ein mit AWS Glue kompatibles Rad vor und installiere dieses Rad.
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.
Gehe wie folgt vor, um ein C-basiertes Python-Modul vorzukompilieren, für das Root-Berechtigungen erforderlich sind:
-
Starte eine Linux-Instance der Amazon Elastic Compute Cloud (Amazon EC2) (Amazon Linux 2 AMI) mit ausreichend Volume-Platz für deine Bibliotheken.
-
Installiere Docker auf der EC2-Instance, richte den Nicht-sudo-Zugriff ein und starte dann Docker. Führe dazu den folgenden Befehl aus:
Installiere Docker:
sudo yum install docker -yRichte den sudo-Zugriff ein:
sudo suStarte Docker:
sudo service docker start -
Erstelle eine Dockerfile-Datei für das Modul. Um beispielsweise das Modul grpcio zu installieren, erstelle eine Datei namens dockerfile_grpcio und kopiere den folgenden Inhalt in die Datei:
FROM amazonlinux:2 # Install required repositories and tools RUN yum update -y RUN yum install shadow-utils.x86_64 -y # Install Java 8 (corrected package name) RUN yum install -y java-1.8.0-openjdk.x86_64 # Install Python 3.7 WORKDIR /opt RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel wget tar make # Install Python 3.7 RUN wget https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz RUN tar xzf Python-3.7.12.tgz WORKDIR /opt/Python-3.7.12 RUN ./configure --enable-optimizations RUN make altinstall RUN ln -sf /usr/local/bin/python3.7 /usr/bin/python3 RUN ln -sf /usr/local/bin/pip3.7 /usr/bin/pip3 # Verify Python version RUN python3 --version RUN pip3 --version # Install other dependencies RUN yum install -y doxygen autoconf automake libtool zlib-devel openssl-devel maven wget protobuf-compiler cmake make gcc-c++ RUN yum install -y python3-devel # Install Python packages RUN pip3 install --upgrade pip RUN pip3 install wheel RUN pip3 install cython numpy scipy RUN pip3 install cmake scikit-build # Create wheel directory and install grpcio WORKDIR /root RUN mkdir wheel_dir RUN pip3 install Cython RUN pip3 install grpcio RUN pip3 wheel grpcio -w wheel_dir -
Führe den Docker Build aus, um die Dockerfile zu erstellen:
docker build -f dockerfile_grpcio . -
Starte den Docker-Daemon neu:
sudo service docker restartWenn der Docker-Build-Befehl abgeschlossen ist, erhältst du eine Erfolgsmeldung, die die Docker-Image-ID enthält. Beispiel: „Successfully built 1111222233334444“ Notiere dir die Docker-Image-ID, um sie im nächsten Schritt zu verwenden.
-
Extrahiere die Rad-Datei .whl aus dem Docker-Container. Führe dazu den folgenden Befehl aus:
Rufe die Docker-Image-ID ab:
docker image lsFühre den Container aus, aber ersetze 1111222233334444 dabei durch deine Docker-Image-ID:
docker run -dit 111122223334444Überprüfe den Speicherort der Rad-Datei und rufe den Namen der Rad-Datei ab, aber ersetze 5555666677778888 dabei durch deine Container-ID:
docker exec -t -i 5555666677778888 ls /root/wheel_dir/Kopiere das Rad aus dem Docker-Container in Amazon EC2:
docker cp 5555666677778888:/root/wheel_dir/doc-example-wheel .Hinweis: Ersetze doc-example-wheel durch den Namen der generierten Rad-Datei.
-
Lade das Rad in Amazon S3 hoch, indem du die folgenden Befehle ausführst:
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/Hinweis: Ersetze grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl durch den Namen deiner Python-Paketdatei.
-
Öffne die AWS-Glue-Konsole.
-
Gib für den AWS-Glue-ETL-Auftrag unter Job parameters (Auftragsparameter) Folgendes ein:
Gib für Key (Schlüssel) --additional-python-modules ein.
Gib unter Value (Wert) s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl ein.
Weitere Informationen
Using Python libraries with AWS Glue (Verwenden von Python-Bibliotheken mit AWS Glue)
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 2 Jahren
AWS OFFICIALAktualisiert vor einem Jahr