Konfiguration von Jobeigenschaften für Python-Shell-Jobs in AWS Glue - AWS Glue

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.

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 auf analytics gesetzt. Wenn Sie diese Option abwählen, wird die library-set-Option auf none 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 Das folgende Beispiel zeigt ein NumPy Skript, das in einem Python-Shell-Job verwendet werden kann. Das Skript gibt „Hello World“ und die Ergebnisse mehrerer mathematischer Berechnungen aus.

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
  1. Erstellen Sie einen Amazon-Redshift-Cluster in einer Virtual Private Cloud (VPC) und fügen Sie einer Tabelle einige Daten hinzu.

  2. 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.

  3. Erstellen Sie ein Verzeichnis mit dem Namen redshift_example und eine Datei mit dem Namen setup.py. Fügen Sie folgenden Code in ei setup.py.

    from setuptools import setup setup( name="redshift_module", version="0.1", packages=['redshift_module'] )
  4. Erstellen Sie im Verzeichnis redshift_example das Verzeichnis redshift_module. Erstellen Sie im Verzeichnis redshift_module die Dateien __init__.py und pygresql_redshift_common.py.

  5. Lassen Sie die Datei __init__.py leer. Fügen Sie in pygresql_redshift_common.py folgenden Code ein. Ersetzen Sie port, db_name, user und password_for_user durch für Ihren Amazon-Redshift-Cluster spezifische Details. Ersetzen Sie table-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 * from table_name;" res = con.query(statement) return res
  6. Wechseln Sie zum Verzeichnis redshift_example, sofern Sie dieses noch nicht aufgerufen haben.

  7. 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
  8. Installieren Sie die für den vorangehenden Befehl erforderlichen Abhängigkeiten.

  9. 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 oder s3://DOC-EXAMPLE-BUCKET/WHEEL-FILE.

  10. 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
  11. Laden Sie die vorangehende Datei in Amazon S3 hoch. In diesem Beispiel lautet der hochgeladene Dateipfad s3://DOC-EXAMPLE-BUCKET/scriptname.py.

  12. 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.