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.
Sie können einen Python-Shell-Job verwenden, um Python-Skripte als Shell auszuführen in AWS Glue. Mit einem Python-Shell-Job können Sie Skripte ausführen, die mit Python 3.6 oder Python 3.9 kompatibel sind.
Anmerkung
Die Support für Pyshell v3.6 endet am 1. März 2026. Informationen zur Migration Ihrer Workloads finden Sie unter Migration von AWS Glue Python-Shell-Jobs. Wenn Sie mit der Python-Shell v3.9 fortfahren möchten, sieheMigration von Python-Shell 3.6 auf Python-Shell 3.9.
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 die Definition von Jobeigenschaften beschrieben in AWS Glue Studio, oder mit der AWS CLI.
AWS Glue Studio
Wenn Sie Ihren Python-Shell-Job definieren in AWS Glue Studio, geben Sie einige der folgenden Eigenschaften an:
- 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 zu Berechtigungen für die Ausführung von Jobs finden Sie 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 Leitfaden zur Programmierung.
- 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 bearbeiten in AWS Glue Studio.
- Datenverarbeitungseinheiten
-
Die maximale Anzahl von AWS Glue Datenverarbeitungseinheiten (DPUs), die zugewiesen werden können, wenn dieser Job ausgeführt wird. Eine DPU ist eine relative Maßeinheit für die Rechenleistung, die sich aus 4 V CPUs Rechenkapazität und 16 GB Arbeitsspeicher zusammensetzt. Weitere Informationen finden Sie unter .AWS Glue Preisgestaltung
. 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 gilt für AWS Glue Shell-Jobs. 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. Beispiel, "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 ein AWS Glue Verbindung für die VPC-SecurityGroup-Subnet 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 spezifische Details für Ihren Amazon Redshift Redshift-Cluster.table_name
Ersetzen Sie 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 ist der Pfad der hochgeladenen Datei
s3://DOC-EXAMPLE-BUCKET/EGG-FILE
oders3://DOC-EXAMPLE-BUCKET/WHEEL-FILE
. -
-
Erstellen Sie eine Python-Datei, die als Skript für die verwendet werden soll AWS Glue Job 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 ist der Pfad der hochgeladenen Datei
s3://DOC-EXAMPLE-BUCKET/scriptname.py
. -
Erstellen Sie einen Python-Shell-Auftrag, der dieses Skript verwendet. Auf dem AWS Glue In der Konsole geben Sie auf der Seite mit den Auftragseigenschaften den Pfad zur
.egg/.whl
Datei im Feld 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 der Job ausgeführt wird, druckt das Skript die Zeilen, die in der
table_name
Tabelle im Amazon Redshift Redshift-Cluster erstellt wurden.
Verwendung AWS CloudFormation mit Python-Shell-Jobs in AWS Glue
Sie können AWS CloudFormation mit Python-Shell-Jobs in verwenden AWS Glue. Das Folgende ist ein Beispiel:
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
.
Migration von Python-Shell 3.6 auf Python-Shell 3.9
So migrieren Sie Ihre Python-Shell-Jobs auf die neueste AWS Glue Version:
-
Wählen Sie in der AWS Glue Konsole (https://console.aws.amazon.com/glue/
) Ihren vorhandenen Python-Shell-Job aus. -
Stellen Sie auf der Registerkarte Jobdetails die Python-Version auf ein
Python 3.9
und wählen Sie Speichern. -
Stellen Sie sicher, dass Ihr Jobskript mit Python 3.9 kompatibel ist und erfolgreich ausgeführt wird.