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.
Konfiguration von Jobeigenschaften für Python-Shell-Jobs in AWS Glue
Sie können eine Python-Shell-Aufgabe verwenden, um Python-Skripte in AWS Glue als Shell auszuführen. Mit einem Python-Shell-Job können Sie Skripte ausführen, die mit Python 3.6 oder Python 3.9 kompatibel sind.
Themen
Einschränkungen
Beachten Sie die folgenden Einschränkungen von Python-Shell-Aufträgen:
-
Sie können für Python-Shell-Aufträge keine Auftragslesezeichen verwenden.
-
In Python 3.9+ können Sie keine Python-Bibliotheken als
.egg
Dateien packen. Nutzen Sie stattdessen.whl
. Die
--extra-files
-Option kann aufgrund einer Beschränkung für temporäre Kopien von S3-Daten nicht verwendet werden.
Definieren von Auftragseigenschaften für Python-Shell-Aufträge
In diesen Abschnitten wird das Definieren von Jobeigenschaften in AWS Glue Studio oder mithilfe der AWS CLI beschrieben.
AWS Glue Studio
Wenn Sie Ihren Python-Shell-Auftrag in AWS Glue Studio definieren, stellen Sie einige der folgenden Eigenschaften bereit:
- IAM-Rolle
-
Geben Sie die AWS Identity and Access Management (IAM-) Rolle an, die für die Autorisierung von Ressourcen verwendet wird, die für die Ausführung des Jobs und den Zugriff auf Datenspeicher verwendet werden. Weitere Informationen über die Berechtigungen für die Ausführung von Aufträgen in AWS Glue finden Sie unter Identitäts- und Zugriffsmanagement für AWS Glue.
- Typ
-
Wählen Sie Python shell (Python-Shell) aus, um ein Python-Skript mit dem Auftragsbefehl
pythonshell
auszuführen. - Python-Version
-
Wählen Sie die Python-Version aus. Die Standardeinstellung ist Python 3.9. Gültige Versionen sind Python 3.6 und Python 3.9.
- Allgemeine Analyse-Bibliotheken laden (empfohlen)
-
Wählen Sie diese Option, um allgemeine Bibliotheken für Python 3.9 in die Python-Shell aufzunehmen.
Wenn Ihre Bibliotheken entweder benutzerdefiniert sind oder mit den vorinstallierten in Konflikt stehen, können Sie sich dafür entscheiden, keine gängigen Bibliotheken zu installieren. Sie können jedoch neben den üblichen Bibliotheken weitere Bibliotheken installieren.
Wenn Sie diese Option auswählen, wird die
library-set
-Option aufanalytics
gesetzt. Wenn Sie diese Option abwählen, wird dielibrary-set
-Option aufnone
gesetzt. - Name der Skriptdatei und Skriptpfad
-
Der Code im Skript definiert die prozedurale Logik Ihres Auftrags. Geben Sie den Skript-Namen und den Speicherort in Amazon Simple Storage Service (Amazon S3) an. Vergewissern Sie sich, dass sich keine Datei mit dem Namen des Skriptverzeichnisses im Pfad befindet. Weitere Informationen über die Verwendung von Skripts finden Sie unter AWS Glue Programmierleitfaden.
- Script
-
Der Code im Skript definiert die prozedurale Logik Ihres Auftrags. Sie können das Skript in Python 3.6 oder Python 3.9 codieren. Sie können ein Skript in AWS Glue Studio bearbeiten.
- Datenverarbeitungseinheiten
-
Die maximal zulässige Anzahl von AWS Glue-Datenverarbeitungseinheiten (Data Processing Units, DPUs), die zugeteilt werden kann, wenn dieser Auftrag ausgeführt wird. Bei einer DPU handelt es sich um ein relatives Maß der Rechenleistung, die aus 4 vCPUs Rechenkapazität und 16 GB Arbeitsspeicher besteht. Weitere Informationen finden Sie unter AWS Glue Preise
. Sie können den Wert auf 0,0625 oder 1 festlegen. Der Standardwert ist 0.0625. In beiden Fällen beträgt die lokale Festplatte für die Instance 20 GB.
CLI
Sie können auch einen Python-Shell-Job mit dem erstellen AWS CLI, wie im folgenden Beispiel.
aws glue create-job --name python-job-cli --role Glue_DefaultRole --command '{"Name" : "pythonshell", "PythonVersion": "3.9", "ScriptLocation" : "s3://DOC-EXAMPLE-BUCKET/scriptname.py"}' --max-capacity 0.0625
Anmerkung
Sie müssen die Version von nicht angeben, AWS Glue da der Parameter --glue-version
nicht für AWS Glue Shell-Jobs gilt. Jede angegebene Version wird ignoriert.
Jobs, die Sie mit der AWS CLI Standardeinstellung Python 3 erstellen. Gültige Python-Versionen sind 3 (entsprechend 3.6) und 3.9. Um Python 3.6 anzugeben, fügen Sie dieses Tupel dem --command
-Parameter hinzu: "PythonVersion":"3"
Um Python 3.9 anzugeben, fügen Sie dieses Tupel dem --command
-Parameter hinzu: "PythonVersion":"3.9"
Um die maximale Kapazität festzulegen, die von einem Python-Shell-Auftrag genutzt werden darf, geben Sie den Parameter --max-capacity
an. Der Parameter --allocated-capacity
kann für Python-Shell-Aufträge nicht verwendet werden.
Für Python-Shell-Aufträge unterstützte Bibliotheken
In der Python-Shell mit Python 3.9 können Sie den Bibliothekssatz auswählen, um vorgefertigte Bibliothekssätze für Ihre Anforderungen zu verwenden. Sie können die library-set
-Option verwenden, um den Bibliothekssatz auszuwählen. Gültige Werte sind analytics
und none
.
Die Umgebung für die Ausführung von Python-Shell-Aufträgen unterstützt die folgenden Bibliotheken:
Python-Version | Python 3.6 | Python 3.9 | |
---|---|---|---|
Bibliothek-Set | N/A | Analytik | Keine |
avro | 1.11.0 | ||
awscli | 116.242 | 1,23,5 | 1,23,5 |
awswrangler | 2.15,1 | ||
botocore | 1.12,232 | 1,24,21 | 1,23,5 |
boto3 | 1,9,203 | 1,21,21 | |
elasticsearch | 8.2.0 | ||
numpy | 1.16.2 | 1.22.3 | |
pandas | 0,24,2 | 1.4.2 | |
psycopg2 | 2.9.3 | ||
pyathena | 2.5.3 | ||
PyGreSQL | 5.0.6 | ||
PyMySQL | 1.0.2 | ||
pyodbc | 4.0.32 | ||
pyorc | 0.6.0 | ||
redshift-connector | 2.0.907 | ||
Anforderungen | 2.22.0 | 2,27,1 | |
Scikit-learn | 0,20,3 | 1.0.2 | |
scipy | 1.2.1 | 1.8.0 | |
SQLAlchemy | 1,4,36 | ||
s3fs | 2022,3,0 |
Für wissenschaftliches Computing können Sie die Bibliothek NumPy
in einer Python-Shell-Aufgabe verwenden. Weitere Informationen finden Sie unter. NumPy
import numpy as np print("Hello world") a = np.array([20,30,40,50]) print(a) b = np.arange( 4 ) print(b) c = a-b print(c) d = b**2 print(d)
Bereitstellen Ihrer eigenen Python-Bibliothek
Verwenden von PIP
Mit Python-Shell, die Python 3.9 verwendet, können Sie zusätzliche Python-Module oder verschiedene Versionen auf der Auftragsebene bereitstellen. Sie können die Option „--additional-python-modules
“ mit verschiedenen kommagetrennten Python-Modulen verwenden, um ein neues Modul hinzuzufügen oder die Version eines vorhandenen Moduls zu ändern. Sie können benutzerdefinierte Python-Module, die auf Amazon S3 gehostet werden, nicht mit diesem Parameter bereitstellen, wenn Sie Python-Shell-Aufträge verwenden.
Verwenden Sie beispielsweise zum Aktualisieren oder Hinzufügen eines neuen scikit-learn
-Moduls den folgenden Schlüssel und Wert: "--additional-python-modules",
"scikit-learn==0.21.3"
.
AWS Glue verwendet den Python Package Installer (pip3), um die zusätzlichen Module zu installieren. Sie können zusätzliche pip3-Optionen innerhalb des --additional-python-modules
-Werts übergeben. z. B. "scikit-learn==0.21.3 -i https://pypi.python.org/simple/"
. Es gelten alle Inkompatibilitäten oder Einschränkungen von pip3.
Anmerkung
Um Inkompatibilitäten in Zukunft zu vermeiden, empfehlen wir die Verwendung von Bibliotheken, die für Python 3.9 erstellt wurden.
Verwenden einer Egg- oder Whl-Datei
Möglicherweise verfügen Sie bereits über eine oder mehrere, als .egg
- oder .whl
-Datei verpackte Python-Bibliotheken. Wenn dies der Fall ist, können Sie diese für Ihre Aufgabe angeben, indem Sie die AWS Command Line Interface
(AWS CLI) unter dem Flag „--extra-py-files
“ verwenden wie im folgenden Beispiel gezeigt.
aws glue create-job --name python-redshift-test-cli --role
role
--command '{"Name" : "pythonshell", "ScriptLocation" : "s3://MyBucket/python/library/redshift_test.py"}' --connections Connections=connection-name
--default-arguments '{"--extra-py-files" : ["s3://DOC-EXAMPLE-BUCKET/EGG-FILE", "s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE"]}'
Wenn Sie sich nicht sicher sind, wie Sie eine .egg
- oder .whl
-Datei aus einer Python-Bibliothek erstellen, führen Sie die folgenden Schritte aus. Dieses Beispiel gilt für macOS, Linux und Windows Subsystem for Linux (WSL).
So erstellen Sie eine Python-EGG- oder -WHL-Datei
-
Erstellen Sie einen Amazon-Redshift-Cluster in einer Virtual Private Cloud (VPC) und fügen Sie einer Tabelle einige Daten hinzu.
-
Erstellen Sie eine AWS Glue Verbindung für die VPC- und SecurityGroup Subnetz-Kombination, mit der Sie den Cluster erstellt haben. Testen Sie, ob die Verbindung erfolgreich ist.
-
Erstellen Sie ein Verzeichnis mit dem Namen
redshift_example
und eine Datei mit dem Namensetup.py
. Fügen Sie folgenden Code in eisetup.py
.from setuptools import setup setup( name="redshift_module", version="0.1", packages=['redshift_module'] )
-
Erstellen Sie im Verzeichnis
redshift_example
das Verzeichnisredshift_module
. Erstellen Sie im Verzeichnisredshift_module
die Dateien__init__.py
undpygresql_redshift_common.py
. -
Lassen Sie die Datei
__init__.py
leer. Fügen Sie inpygresql_redshift_common.py
folgenden Code ein. Ersetzen Sieport
,db_name
,user
undpassword_for_user
durch für Ihren Amazon-Redshift-Cluster spezifische Details. Ersetzen Sietable-name
durch den Namen der Tabelle in Amazon Redshift.import pg def get_connection(host): rs_conn_string = "host=%s port=%s dbname=%s user=%s password=%s" % ( host,
port
,db_name
,user
,password_for_user
) rs_conn = pg.connect(dbname=rs_conn_string) rs_conn.query("set statement_timeout = 1200000") return rs_conn def query(con): statement = "Select * fromtable_name
;" res = con.query(statement) return res -
Wechseln Sie zum Verzeichnis
redshift_example
, sofern Sie dieses noch nicht aufgerufen haben. -
Führen Sie eine der folgenden Aktionen aus:
Führen Sie den folgenden Befehl aus, um eine
.egg
-Datei zu erstellen.python setup.py bdist_egg
Führen Sie den folgenden Befehl aus, um eine
.whl
-Datei zu erstellen.python setup.py bdist_wheel
-
Installieren Sie die für den vorangehenden Befehl erforderlichen Abhängigkeiten.
-
Der Befehl erstellt eine Datei im Verzeichnis
dist
.-
Wenn Sie eine EGG-Datei erstellt haben, hat diese den Namen
redshift_module-0.1-py2.7.egg
. -
Wenn Sie eine Wheel-Datei erstellt haben, hat diese den Namen
redshift_module-0.1-py2.7-none-any.whl
.
Laden Sie diese Datei in Amazon S3 hoch.
In diesem Beispiel lautet der Pfad der hochgeladenen Datei entweder
s3://DOC-EXAMPLE-BUCKET/EGG-FILE
oders3://DOC-EXAMPLE-BUCKET/WHEEL-FILE
. -
-
Erstellen Sie eine Python-Datei, die als Skript für die AWS Glue-Aufgabe verwendet werden soll, und fügen Sie der Datei den folgenden Code hinzu.
from redshift_module import pygresql_redshift_common as rs_common con1 = rs_common.get_connection(
redshift_endpoint
) res = rs_common.query(con1) print "Rows in the table cities are: " print res -
Laden Sie die vorangehende Datei in Amazon S3 hoch. In diesem Beispiel lautet der hochgeladene Dateipfad
s3://DOC-EXAMPLE-BUCKET/scriptname.py
. -
Erstellen Sie einen Python-Shell-Auftrag, der dieses Skript verwendet. Geben Sie in der AWS Glue-Konsole auf der Seite Job properties (Aufgabeneigenschaften) den Pfad zur
.egg/.whl
-Datei im Feld Python library path (Python-Bibliothekspfad) an. Wenn es mehrere.egg/.whl
- und Python-Dateien gibt, geben Sie in diesem Feld eine durch Komma getrennte Liste ein.Beim Ändern oder Umbenennen von
.egg
-Dateien müssen die Dateinamen die Standardnamen verwenden, die mit dem Befehl „python setup.py bdist_egg“ generiert werden, oder die Benennungskonventionen des Python-Moduls einhalten. Weitere Informationen finden Sie in den Vorgaben für Python-Code. Erstellen Sie mithilfe von einen Job mit einem Befehl, wie im folgenden Beispiel. AWS CLI
aws glue create-job --name python-redshift-test-cli --role Role --command '{"Name" : "pythonshell", "ScriptLocation" : "s3://DOC-EXAMPLE-BUCKET/scriptname.py"}' --connections Connections="connection-name" --default-arguments '{"--extra-py-files" : ["s3://DOC-EXAMPLE-BUCKET/EGG-FILE", "s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE"]}'
Wenn die Aufgabe ausgeführt wird, gibt das Skript die Zeilen aus, die in der Tabelle
table_name
im Amazon-Redshift-Cluster erstellt werden.
Verwendung AWS CloudFormation mit Python-Shell-Jobs in AWS Glue
Sie können AWS CloudFormation mit Python-Shell-Jobs in verwendenAWS Glue. Im Folgenden wird ein Beispiel gezeigt:
AWSTemplateFormatVersion: 2010-09-09 Resources: Python39Job: Type: 'AWS::Glue::Job' Properties: Command: Name: pythonshell PythonVersion: '3.9' ScriptLocation: 's3://bucket/location' MaxRetries: 0 Name: python-39-job Role: RoleName
Die Amazon CloudWatch Logs-Gruppe für die Ausgabe von Python-Shell-Jobs lautet/aws-glue/python-jobs/output
. Informationen zu Fehlern finden Sie in der Protokollgruppe /aws-glue/python-jobs/error
.