Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Usare le librerie Python con Glue AWS
È possibile installare moduli e librerie Python aggiuntivi da utilizzare con AWS Glue ETL. Per AWS Glue 2.0 e versioni successive, AWS Glue utilizza Python Package Installer (pip3) per installare moduli aggiuntivi utilizzati da Glue ETL. AWS AWS Glue offre diverse opzioni per portare i moduli Python aggiuntivi nell'ambiente di lavoro AWS Glue. Puoi usare il --additional-python-modules parametro per inserire nuovi moduli usando file zip contenenti ruote Python in bundle (note anche come «zip of wheels», disponibili per AWS Glue 5.0 e versioni successive), singoli file wheel Python, file dei requisiti (requirements.txt, disponibile per AWS Glue 5.0 e versioni successive) o un elenco di moduli Python separati da virgole. Potrebbe anche essere usato per cambiare la versione dei moduli python forniti nell'ambiente AWS Glue (vedi Moduli Python già forniti in Glue AWS per maggiori dettagli).
Argomenti
Installazione di moduli Python aggiuntivi con pip in AWS Glue 2.0 o versioni successive
AWS Glue utilizza Python Package Installer (pip3) per installare moduli aggiuntivi che devono essere utilizzati da Glue ETL. AWS Puoi utilizzare il parametro --additional-python-modules con un elenco di moduli Python separati da virgole per aggiungere un nuovo modulo o modificare la versione di un modulo esistente. Puoi installare gli artefatti delle ruote predefiniti tramite una cerniera di ruote o un elemento ruota indipendente caricando il file su Amazon S3, quindi includendo il percorso dell'oggetto Amazon S3 nell'elenco dei moduli. Per ulteriori informazioni sull'impostazione dei parametri del lavoro, vedere Utilizzo dei parametri del lavoro nei lavori AWS Glue.
Puoi passare opzioni aggiuntive a pip3 tramite il parametro --python-modules-installer-option. Ad esempio, potresti passare --only-binary a force pip per installare solo artefatti precompilati per i pacchetti specificati da. --additional-python-modules Per altri esempi, consulta Creazione di moduli Python da una ruota per carichi di lavoro Spark ETL
Le migliori pratiche per la gestione delle dipendenze in Python
Per i carichi di lavoro di produzione, AWS Glue consiglia di impacchettare tutte le dipendenze Python come file wheel in un unico elemento zip. Questo approccio fornisce:
-
Esecuzione deterministica: controllo esatto sulle versioni dei pacchetti installate
-
Affidabilità: nessuna dipendenza da archivi di pacchetti esterni durante l'esecuzione del lavoro
-
Prestazioni: operazione di download singola anziché più chiamate di rete
-
Installazione offline: funziona in ambienti VPC privati senza accesso a Internet
Considerazioni importanti
Secondo il modello di responsabilitàAWS condivisa
-
Aggiornamenti di sicurezza: aggiornamento regolare dei pacchetti per risolvere le vulnerabilità di sicurezza
-
Compatibilità delle versioni: Garantire che i pacchetti siano compatibili con la versione di AWS Glue in uso
-
Test: verifica del corretto funzionamento delle dipendenze impacchettate nell'ambiente Glue
Se hai dipendenze minime, potresti prendere in considerazione l'utilizzo di singoli file wheel.
AWS Glue 5.0 e versioni successive supportano il pacchetto di più file wheel in un unico artefatto zip contenente ruote Python in bundle per una gestione delle dipendenze più affidabile e deterministica. Per utilizzare questo approccio, crea un file zip contenente tutte le dipendenze della ruota e le relative dipendenze transitive con il .gluewheels.zip suffisso, caricalo su Amazon S3 e fai riferimento ad esso utilizzando il parametro. --additional-python-modules Assicurati di --no-index aggiungerlo al parametro job. --python-modules-installer-option Con questa configurazione, lo zip del file wheels funge essenzialmente da indice locale da cui pip risolve le dipendenze in fase di esecuzione. Ciò elimina le dipendenze da repository di pacchetti esterni come PyPI durante l'esecuzione del lavoro, fornendo maggiore stabilità e coerenza per i carichi di lavoro di produzione. Esempio:
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/zip-of-wheels-1.0.0.gluewheels.zip --python-modules-installer-option --no-index
Per istruzioni su come creare un file zip of wheels, consulta. Appendice A: Creazione di un artefatto Zip of Wheels
AWS Glue supporta l'installazione di pacchetti Python personalizzati utilizzando file wheel (.whl) archiviati in Amazon S3. Per includere i file wheel nei tuoi lavori AWS Glue, fornisci un elenco separato da virgole dei tuoi file wheel memorizzati in s3 al parametro job. --additional-python-modules Esempio:
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/package-1.0.0-py3-none-any.whl,s3://your-bucket/path/to/another-package-2.1.0-cp311-cp311-linux_x86_64.whl
Questo approccio supporta anche le casistiche in cui sono necessarie distribuzioni personalizzate o pacchetti con dipendenze native precompilati per il sistema operativo corretto. Per altri esempi, consulta Creazione di moduli Python da una ruota per carichi di lavoro Spark ETL
In AWS Glue 5.0+, puoi fornire lo standard di fatto per gestire le dipendenze della libreria requirements.txt Python. A tale scopo, fornire i seguenti due parametri di lavoro:
-
Chiave:
--python-modules-installer-optionValore:
-r -
Chiave:
--additional-python-modulesValore:
s3://path_to_requirements.txt
AWS I nodi Glue 5.0 caricano inizialmente le librerie python specificate inrequirements.txt.
Segue un file di esempio requirements.txt:
awswrangler==3.9.1 elasticsearch==8.15.1 PyAthena==3.9.0 PyMySQL==1.1.1 PyYAML==6.0.2 pyodbc==5.2.0 pyorc==0.9.0 redshift-connector==2.1.3 scipy==1.14.1 scikit-learn==1.5.2 SQLAlchemy==2.0.36
Importante
Utilizzate questa opzione con cautela, specialmente nei carichi di lavoro di produzione. Estrarre le dipendenze da PyPI in fase di esecuzione è altamente rischioso perché non si può essere sicuri a quale artefatto si risolva pip. L'uso di versioni di librerie non bloccate è particolarmente rischioso poiché richiama l'ultima versione dei moduli python, che può introdurre modifiche sostanziali o introdurre moduli python incompatibili. Ciò potrebbe causare un errore del lavoro dovuto a un errore di installazione di Python nell'ambiente di lavoro AWS Glue. Sebbene il blocco della versione della libreria aumenti la stabilità, la risoluzione pip non è ancora completamente deterministica, quindi possono sorgere problemi simili. Come buona pratica, AWS Glue consiglia di utilizzare artefatti congelati come zip di ruote o singoli file di ruote (vedi (Consigliato) Installazione di librerie Python aggiuntive in AWS Glue 5.0 o versioni successive utilizzando Zip of Wheels per maggiori dettagli).
Importante
Se non inserite le versioni delle vostre dipendenze transitive, una dipendenza primaria può generare versioni di dipendenza transitive incompatibili. Come best practice, tutte le versioni della libreria devono essere bloccate per una maggiore coerenza nei job AWS Glue. Ancora meglio, AWS Glue consiglia di impacchettare le dipendenze in un file zip o wheels per garantire la massima coerenza e affidabilità per i carichi di lavoro di produzione.
Per aggiornare o aggiungere un nuovo modulo Python, AWS Glue consente di passare --additional-python-modules parametri con un elenco di moduli Python separati da virgole come valori. Ad esempio, per aggiornare o aggiungere un modulo scikit-learn, usa la seguente coppia chiave-valore: "--additional-python-modules",
"scikit-learn==0.21.3". Sono disponibili due opzioni per configurare direttamente i moduli Python.
-
Modulo Python bloccato
"--additional-python-modules", "scikit-learn==0.21.3,ephem==4.1.6" -
Modulo Python non bloccato: (non consigliato per carichi di lavoro di produzione)
"--additional-python-modules", "scikit-learn>==0.20.0,ephem>=4.0.0"O
"--additional-python-modules", "scikit-learn,ephem"
Importante
Utilizzate questa opzione con cautela, specialmente nei carichi di lavoro di produzione. Estrarre le dipendenze da PyPI in fase di esecuzione è altamente rischioso perché non si può essere sicuri a quale artefatto si risolva pip. L'uso di versioni di librerie non bloccate è particolarmente rischioso poiché richiama l'ultima versione dei moduli python, che può introdurre modifiche sostanziali o introdurre moduli python incompatibili. Ciò potrebbe causare un errore del lavoro dovuto a un errore di installazione di Python nell'ambiente di lavoro AWS Glue. Sebbene il blocco della versione della libreria aumenti la stabilità, la risoluzione pip non è ancora completamente deterministica, quindi possono sorgere problemi simili. Come buona pratica, AWS Glue consiglia di utilizzare artefatti congelati come zip di ruote o singoli file di ruote (vedi (Consigliato) Installazione di librerie Python aggiuntive in AWS Glue 5.0 o versioni successive utilizzando Zip of Wheels per maggiori dettagli).
Importante
Se non inserite le versioni delle vostre dipendenze transitive, una dipendenza primaria può generare versioni di dipendenza transitive incompatibili. Come best practice, tutte le versioni della libreria devono essere bloccate per una maggiore coerenza nei job AWS Glue. Ancora meglio, AWS Glue consiglia di impacchettare le dipendenze in un file zip o wheels per garantire la massima coerenza e affidabilità per i carichi di lavoro di produzione.
Inclusione di file Python con funzionalità native PySpark
AWS Glue utilizza PySpark per includere file Python nei job AWS Glue ETL. Quando possibile, ti consigliamo di usare --additional-python-modules per gestire le dipendenze. Puoi utilizzare il parametro del processo --extra-py-files per includere i file Python. Le dipendenze devono essere ospitate in Amazon S3 e il valore dell'argomento deve essere un elenco delimitato da virgole di percorsi Amazon S3 senza spazi. Questa funzionalità si comporta come la gestione delle dipendenze Python che useresti con Spark. Per ulteriori informazioni sulla gestione delle dipendenze di Python in Spark, consulta la pagina Utilizzo delle funzionalità PySpark native--extra-py-filesè utile nei casi in cui il codice aggiuntivo non è incluso nel pacchetto o quando si sta migrando un programma Spark con una toolchain esistente per la gestione delle dipendenze. Affinché gli strumenti di dipendenza siano gestibili, sarà necessario raggruppare le dipendenze prima di inviarle.
Script di programmazione che utilizzano trasformazioni visive
Quando crei un lavoro AWS Glue utilizzando l'interfaccia visiva di AWS Glue Studio, puoi trasformare i tuoi dati con nodi di trasformazione dati gestiti e trasformazioni visive personalizzate. Per ulteriori informazioni sui nodi di trasformazione dei dati, consultare Trasformare i dati con AWS Glue trasformazioni gestite. Per ulteriori informazioni sulle trasformazioni visive, consultare Trasforma i dati con le trasformazioni visive personalizzate . Gli script che utilizzano le trasformazioni visive possono essere generati solo quando il linguaggio del processo è impostato per utilizzare Python.
Quando si genera un lavoro AWS Glue utilizzando trasformazioni visive, AWS Glue Studio includerà queste trasformazioni nell'ambiente di runtime utilizzando il --extra-py-files parametro nella configurazione del lavoro. Per ulteriori informazioni sui parametri di processo, consulta Utilizzo dei parametri del lavoro nei lavori AWS Glue. Quando a si apportano modifiche a uno script o a un ambiente di runtime generato, è necessario mantenere questa configurazione del lavoro affinché lo script venga eseguito correttamente.
Compressione delle librerie per l'inclusione
A meno che una libreria non sia contenuta in un singolo file .py, deve essere compressa in un archivio .zip. La directory del pacchetto deve trovarsi al livello radice dell'archivio e deve contenere un file __init__.py per il pacchetto. Python sarà in grado di importare il pacchetto nel modo normale.
Se la tua libreria è composta da un singolo modulo Python in un file .py, non è necessario trasferirla in un file .zip.
Caricamento delle librerie Python nei notebook AWS Glue Studio
Caricamento delle librerie Python in un endpoint di sviluppo in Glue 0.9/1.0 AWS
Se utilizzi diversi set di librerie per diversi script ETL, puoi impostare un endpoint di sviluppo separato per ciascun set oppure sovrascrivere i file .zip della libreria che l'endpoint di sviluppo carica ogni volta che si cambia script.
Puoi utilizzare la console per specificare uno o più file .zip di libreria per un endpoint di sviluppo al momento della creazione. Dopo l'assegnazione di un nome e un ruolo IAM, scegli Script Libraries and job parameters (optional) (Librerie di Script e parametri di processo -opzionale) e immetti il percorso Amazon S3 completo per i tuoi file .zip della libreria nella casella Python library path (Percorso libreria Python). Ad esempio:
s3://bucket/prefix/site-packages.zip
Se lo desideri, puoi specificare più percorsi completi per i file, separandoli con virgole ma non spazi, in questo modo:
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
Se aggiorni questi file .zip in un secondo momento, puoi utilizzare la console per importarli nuovamente nell'endpoint di sviluppo. Individua l'endpoint dello sviluppatore in questione, verifica la casella a esso corrispondente e scegli Update ETL libraries (Aggiorna librerie ETL) dal menu Action (Operazione).
Allo stesso modo, potete specificare i file di libreria usando AWS Glue APIs. Quando crei un endpoint di sviluppo chiamando CreateDevEndpoint azione (Python: create_dev_endpoint), puoi specificare uno o più percorsi completi per le librerie nel parametro ExtraPythonLibsS3Path in una chiamata come la seguente:
dep = glue.create_dev_endpoint(
EndpointName="testDevEndpoint",
RoleArn="arn:aws:iam::123456789012",
SecurityGroupIds="sg-7f5ad1ff",
SubnetId="subnet-c12fdba4",
PublicKey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtp04H/y...",
NumberOfNodes=3,
ExtraPythonLibsS3Path="s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip")
Quando aggiorni un endpoint di sviluppo, puoi anche aggiornare le librerie caricate utilizzando un oggetto DevEndpointCustomLibraries e impostare il parametro UpdateEtlLibraries su True durante la chiamata UpdateDevEndpoint (update_dev_endpoint).
Usare le librerie Python in un lavoro o JobRun
Quando si crea un nuovo processo nella console, è possibile specificare uno o più file ZIP di libreria scegliendo Script Libraries and job parameters (optional) (Librerie di script e parametri di processo - opzionale) e immettendo percorsi di librerie Amazon S3 completi, analogamente a come si farebbe quando si crea un endpoint di sviluppo:
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
Se si sta chiamando CreateJob (create_job), è possibile specificare uno o più percorsi completi alle librerie predefinite utilizzando il parametro predefinito --extra-py-files, come segue:
job = glue.create_job(Name='sampleJob',
Role='Glue_DefaultRole',
Command={'Name': 'glueetl',
'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py'},
DefaultArguments={'--extra-py-files': 's3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip'})
Quindi, quando avvii un JobRun, puoi sovrascrivere l'impostazione della libreria predefinita con una diversa:
runId = glue.start_job_run(JobName='sampleJob',
Arguments={'--extra-py-files': 's3://bucket/prefix/lib_B.zip'})
Analizza in modo proattivo le dipendenze di Python
Per identificare in modo proattivo potenziali problemi di dipendenza prima della distribuzione su AWS Glue, puoi utilizzare lo strumento di analisi delle dipendenze per convalidare i tuoi pacchetti Python rispetto all'ambiente Glue di destinazione. AWS
AWS fornisce uno strumento di analisi delle dipendenze Python open source progettato specificamente per gli ambienti Glue. AWS Questo strumento è disponibile nell'archivio degli esempi AWS Glue e può essere utilizzato localmente per convalidare le dipendenze prima della distribuzione.
Questa analisi aiuta a garantire che le dipendenze seguano la pratica consigliata del pinning di tutte le versioni della libreria per implementazioni di produzione coerenti. Per maggiori dettagli, consultare la sezione README
Il AWS Glue Python Dependency Analyzer aiuta a identificare le dipendenze non bloccate e i conflitti di versione simulando l'installazione di pip con vincoli specifici della piattaforma che corrispondono all'ambiente Glue di destinazione. AWS
# Analyze a single Glue job python glue_dependency_analyzer.py -j my-glue-job # Analyze multiple jobs with specific AWS configuration python glue_dependency_analyzer.py -j job1 -j job2 --aws-profile production --aws-region us-west-2
Lo strumento contrassegnerà:
-
Dipendenze non bloccate che potrebbero installare versioni diverse tra le esecuzioni dei processi
-
Conflitti delle versioni tra pacchetti
-
Dipendenze non disponibili per l'ambiente AWS Glue di destinazione
Amazon Q Developer è un assistente conversazionale generativo basato sull'intelligenza artificiale (AI) che può aiutarti a comprendere, creare, estendere e utilizzare le applicazioni. AWS È possibile scaricarlo seguendo le istruzioni nella Guida alle nozioni di base per Amazon Q.
Amazon Q Developer può essere usato per analizzare e correggere gli errori nei processi dovuti alle dipendenze Python. Suggeriamo di utilizzare il seguente prompt sostituendo il placeholder <Job-Name> con il nome del processo Glue.
I have an AWS Glue job named <Job-Name> that has failed due to Python module installation conflicts. Please assist in diagnosing and resolving this issue using the following systematic approach. Proceed once sufficient information is available. Objective: Implement a fix that addresses the root cause module while minimizing disruption to the existing working environment. Step 1: Root Cause Analysis • Retrieve the most recent failed job run ID for the specified Glue job • Extract error logs from CloudWatch Logs using the job run ID as a log stream prefix • Analyze the logs to identify: • The recently added or modified Python module that triggered the dependency conflict • The specific dependency chain causing the installation failure • Version compatibility conflicts between required and existing modules Step 2: Baseline Configuration Identification • Locate the last successful job run ID prior to the dependency failure • Document the Python module versions that were functioning correctly in that baseline run • Establish the compatible version constraints for conflicting dependencies Step 3: Targeted Resolution Implementation • Apply pinning by updating the job's additional_python_modules parameter • Pin only the root cause module and its directly conflicting dependencies to compatible versions, and do not remove python modules unless necessary • Preserve flexibility for non-conflicting modules by avoiding unnecessary version constraints • Deploy the configuration changes with minimal changes to the existing configuration and execute a validation test run. Do not change the Glue versions. Implementation Example: Scenario: Recently added pandas==2.0.0 to additional_python_modules Error: numpy version conflict (pandas 2.0.0 requires numpy>=1.21, but existing job code requires numpy<1.20) Resolution: Update additional_python_modules to "pandas==1.5.3,numpy==1.19.5" Rationale: Use pandas 1.5.3 (compatible with numpy 1.19.5) and pin numpy to last known working version Expected Outcome: Restore job functionality with minimal configuration changes while maintaining system stability.
Il prompt indica a Q di:
-
Recuperare l'ultimo ID di esecuzione dei processi non riuscito
-
Trovare i log associati e i dettagli
-
Trovare le esecuzioni dei processi riuscite per rilevare eventuali pacchetti Python modificati
-
Apportare eventuali correzioni alla configurazione e avviare un'altra esecuzione di test
Moduli Python già forniti in Glue AWS
È possibile modificare la versione dei moduli disponibili con il parametro di processo --additional-python-modules.
Appendice A: Creazione di un artefatto Zip of Wheels
Dimostriamo con un esempio come creare un artefatto Zip of Wheels. L'esempio mostrato scarica i pacchetti cryptography e scipy in un artefatto zip of wheels e copia lo zip di wheels in una posizione Amazon S3.
-
È necessario eseguire i comandi per creare lo zip di wheels in un ambiente Amazon Linux simile all'ambiente di Glue. Per informazioni, consulta Appendice B: Dettagli sull'ambiente AWS Glue. Glue 5.1 utilizza AL2 023 con python versione 3.11. Crea Dockerfile che creerà questo ambiente:
FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux:2023-minimal # Install Python 3.11, pip, and zip utility RUN dnf install -y python3.11 pip zip && \ dnf clean all WORKDIR /build -
Crea un file requirements.txt
cryptography scipy -
Crea e avvia un contenitore docker
# Build docker image docker build --platform linux/amd64 -t glue-wheel-builder . # Spin up container docker run --platform linux/amd64 -v $(pwd)/requirements.txt:/input/requirements.txt:ro -v $(pwd):/output -it glue-wheel-builder bash -
Esegui i seguenti comandi nell'immagine docker
# Create a directory for the wheels mkdir wheels # Copy requirements.txt into wheels directory cp /input/requirements.txt wheels/ # Download the wheels with the correct platform and Python version pip3 download \ -r wheels/requirements.txt \ --dest wheels/ \ --platform manylinux2014_x86_64 \ --python-version 311 \ --only-binary=:all: # Package the wheels into a zip archive with the .gluewheels.zip suffix zip -r mylibraries-1.0.0.gluewheels.zip wheels/ # Copy zip to output cp mylibraries-1.0.0.gluewheels.zip /output/ # Exit the container exit -
Carica zip of wheels nella sede di Amazon S3
aws s3 cp mylibraries-1.0.0.gluewheels.zip s3://amzn-s3-demo-bucket/example-prefix/ -
Pulizia opzionale
rm mylibraries-1.0.0.gluewheels.zip rm Dockerfile rm requirements.txt -
Esegui il job Glue con i seguenti job args:
--additional-python-modules s3://amzn-s3-demo-bucket/example-prefix/mylibraries-1.0.0.gluewheels.zip --python-modules-installer-option --no-index
Appendice B: Dettagli sull'ambiente AWS Glue
| AWS Versione Glue | Versione di Python | Immagine di base | versione glibc | Tag della piattaforma compatibili |
|---|---|---|---|---|
| 5.1 | 3.11 | Amazon Linux 2023 (AL2023) |
2.34 |
manylinux_2_34_x86_64 manylinux_2_28_x86_64 manylinux2014_x86_64 |
| 5.0 | 3.11 | Amazon Linux 2023 (AL2023) |
2.34 |
manylinux_2_34_x86_64 manylinux_2_28_x86_64 manylinux2014_x86_64 |
| 4.0 | 3,10 | Amazon Linux (2AL2) |
2.26 | manylinux2014_x86_64 |
| 3.0 | 3.7 | Amazon Linux (2AL2) |
2.26 | manylinux2014_x86_64 |
| 2.0 | 3.7 | AMI Amazon Linux (AL1) |
2.17 | manylinux2014_x86_64 |
Secondo il modello di responsabilitàAWS condivisa
AWS Glue non supporta la compilazione di codice nativo nell'ambiente di lavoro. Tuttavia, i job AWS Glue vengono eseguiti in un ambiente Linux gestito da Amazon. È possibile fornire le dipendenze native in un formato compilato tramite un file wheel Python. Fai riferimento alla tabella precedente per i dettagli sulla compatibilità della versione di AWS Glue.
Importante
L'utilizzo di dipendenze incompatibili può causare problemi di runtime, in particolare per le librerie con estensioni native che devono corrispondere all'architettura e alle librerie di sistema dell'ambiente di destinazione. Ogni versione di AWS Glue funziona su una versione di Python specifica con librerie e configurazioni di sistema preinstallate.