Come posso utilizzare librerie Python esterne nel processo ETL di AWS Glue 2.0?

5 minuti di lettura
0

Desidero utilizzare librerie Python esterne in un processo di estrazione, trasformazione e caricamento (ETL) di AWS Glue 2.0.

Risoluzione

Con AWS Glue versione 2.0, puoi installare moduli Python aggiuntivi o versioni diverse a livello di processo. Per aggiungere un nuovo modulo o modificare la versione di un modulo esistente, usa la chiave del parametro di processo --additional-python-modules con un valore contenente un elenco di moduli Python separati da virgole. Ciò consente al processo ETL di AWS Glue 2.0 di installare i moduli aggiuntivi utilizzando il programma di installazione del pacchetto Python (pip3).

Per installare un modulo Python aggiuntivo per il tuo processo AWS Glue:

  1. Apri la console AWS Glue.
  2. Nel riquadro di navigazione, scegliProcessi.
  3. Seleziona il processo in cui desideri aggiungere il modulo Python.
  4. Scegli Operazioni, quindi scegli Modifica processo.
  5. Espandi la sezione Configurazione di sicurezza, librerie di script e parametri di processo (opzionale).
  6. In Parametri del processo, effettua le seguenti operazioni:
    Per Chiave, inserisci --additional-python-modules.
    Per Valore, inserisci pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl.
  7. Scegli Salva.

Questi passaggi forniscono un esempio per l'installazione di due moduli diversi:

  • PyMySQL tramite Internet
  • Natural Language Toolkit (NLTK) da un file wheel su Amazon Simple Storage Service (Amazon S3)

L'installazione di un nuovo modulo o l'aggiornamento di un modulo esistente richiede il download delle dipendenze relative al modulo. Ciò significa che è necessario disporre dell'accesso a Internet per completare una di queste attività. Se non hai accesso a Internet, consulta Creazione di moduli Python da un wheel per carichi di lavoro Spark ETL utilizzando AWS Glue 2.0.

Per l'elenco dei moduli Python aggiuntivi già forniti in AWS Glue 2.0, consulta Moduli Python già forniti nella versione 2.0 di AWS Glue.

Le librerie e i moduli di estensione scritti in C sono supportati anche da AWS Glue 2.0 con l'opzione --additional-python-modules. Tuttavia, un sottoinsieme di moduli Python, come spacy e grpc, richiede le autorizzazioni di root per l'installazione. Senza le autorizzazioni di root, la compilazione di questi moduli non riesce durante l'installazione. AWS Glue non fornisce l'accesso root durante l'installazione del pacchetto. La soluzione è precompilare i file binari in un wheel compatibile con AWS Glue e installare il wheel.

Per compilare una libreria in un linguaggio basato su C, il compilatore deve essere compatibile con il sistema operativo e l'architettura del processore di destinazione. Se la libreria è compilata con un sistema operativo o un'architettura del processore diversi, il file wheel non è installato in AWS Glue. Poiché AWS Glue è un servizio gestito, l'accesso al cluster non è disponibile per sviluppare queste dipendenze. Per precompilare il modulo Python basato su C che richiede le autorizzazioni di root, procedi come segue:

Nota: questi passaggi forniscono un esempio per l'installazione del modulo grpcio.

1.    Avvia un'istanza Linux Amazon Elastic Compute Cloud (Amazon EC2) con spazio di volume sufficiente per le tue librerie.

2.    Installa il container Docker sull'istanza, configura l'accesso non sudo, quindi avvia docker.

sudo yum install docker -y
sudo usermod -a -G docker ec2-user
sudo service docker start

3.    Crea un file dockerfile_grpcio e copia quanto segue nel file:

# Base for AWS Glue
FROM amazonlinux
RUN yum update -y
RUN yum install shadow-utils.x86_64 -y
RUN yum install -y java-1.8.0-openjdk.x86_64
RUN yum install -y python3
RUN yum install -y cython doxygen numpy scipy gcc autoconf automake libtool zlib-devel openssl-devel maven wget protobuf-compiler cmake make gcc-c++
# Additional components needed for grpcio
WORKDIR /root
RUN yum install python3-devel -y
RUN yum install python-devel -y
RUN pip3 install wheel
# Install grpcio and related modules
RUN pip3 install Cython
RUN pip3 install cmake scikit-build
RUN pip3 install grpcio
# Create a directory for the wheel
RUN mkdir wheel_dir
# Create the wheel
RUN pip3 wheel grpcio -w wheel_dir

4.    Esegui la creazione di docker per creare il tuo Dockerfile. Esegui i seguenti comandi per riavviare il daemon Docker:

$ sudo service docker restart
$ docker build -f dockerfile_grpcio .

Al termine del comando di creazione di docker, viene visualizzato un messaggio di azione completata con l'ID dell'immagine Docker. Ad esempio, "È stato creato con successo 1111222233334444". Annota l'ID dell'immagine Docker per utilizzarla nel passaggio successivo.

5.    Estrai il file wheel dal container Docker. Esegui i seguenti comandi per estrarre il file .whl:

# Get the docker image ID
$ docker image ls

# Run the container
$ docker run -dit 111122223334444

# Verify the location of the wheel file and retrieve the name of the wheel file
$ docker exec -t -i 5555666677778888 ls /root/wheel_dir/

# Copy the wheel out of docker to EC2
$ docker cp 5555666677778888:/root/wheel_dir/doc-example-wheel .

Assicurati di sostituire i seguenti valori nei comandi precedenti:

  • 1111222233334444 con l'ID dell'immagine Docker
  • 5555666677778888 con l'ID del container
  • doc-example-wheel con il nome del file wheel generato

6.    Carica il wheel su Amazon S3 eseguendo i seguenti comandi:

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/

Assicurati di sostituire i seguenti valori nei comandi precedenti:

  • doc-example-wheel con il nome del file wheel generato
  • grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl con il nome del file del pacchetto Python

7.    Per il processo ETL di AWS Glue, nella console AWS Glue, in Parametri del processo, procedi come segue: Per Chiave, inserisci --additional-python-modules.
Per Valore, inserisci s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl.
Nota: assicurati di sostituire grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl con il nome del file del pacchetto Python.

Importante: le versioni 0.9 e 1.0 di AWS Glue non supportano i moduli Python scritti in C. Per installare una libreria Python esterna in AWS Glue 0.9 e 1.0, consulta Come posso utilizzare le librerie Python esterne nel processo ETL di AWS Glue 1.0 o 0.9?


Informazioni correlate

Usare le librerie Python con AWS Glue

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa