Come posso utilizzare librerie Python esterne in un lavoro ETL di AWS Glue?

6 minuti di lettura
0

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

Breve descrizione

Quando utilizzi le versioni 2.0, 3.0 e 4.0 di AWS Glue, puoi installare moduli Python aggiuntivi o versioni di moduli diverse a livello di processo. Per aggiungere un nuovo modulo o cambiare la versione di un modulo esistente, usa la chiave del parametro del processo --additional-python-modules. Il valore della chiave è un elenco di nomi di moduli Python separati da virgole. Quando utilizzi questo parametro, il lavoro ETL di AWS Glue installa i moduli aggiuntivi tramite il programma di installazione dei pacchetti Python (pip3).

Puoi anche usare il parametro**--additional-python-modules** per installare librerie Python scritte in linguaggi basati su C.

Risoluzione

Installa o aggiorna i moduli Python

Per installare un modulo Python aggiuntivo per il tuo lavoro AWS Glue, completa i passaggi seguenti:

  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 un elenco separato da virgole di moduli che desideri aggiungere.
  7. Scegli Salva.

Ad esempio, supponiamo che tu voglia aggiungere due nuovi moduli, la versione 1.0.2 di PyMySQL e la versione 3.6.2 del Natural Language Toolkit (NLTK). Installi il modulo PyMySQL da Internet e il modulo NLTK da un bucket Amazon Simple Storage Service (Amazon S3). In tal caso, la chiave del parametro**--additional-python-modules** ha il valore pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl.

Alcuni moduli hanno dipendenze da altri moduli. Se installi o aggiorni un modulo di questo tipo, devi scaricare anche gli altri moduli da cui dipende. Ciò significa che devi avere accesso a Internet per installare o aggiornare il modulo. Se non hai accesso a Internet, consulta Building Python modules from a wheel for Spark ETL workloads using AWS Glue 2.0 (Creazione di moduli Python da un wheel per carichi di lavoro Spark ETL utilizzando AWS Glue 2.0).

Per un elenco dei moduli Python inclusi in ogni versione di AWS Glue per impostazione predefinita, consulta Moduli Python già forniti in Glue AWS.

Installa i moduli Python basati su C

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori relativi ad AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

AWS Glue supporta anche librerie ed estensioni scritte in C con il parametro --additional-python-modules. Tuttavia, alcuni moduli Python, come spacy e grpc, richiedono autorizzazioni root per l'installazione. AWS Glue non fornisce l'accesso root durante l'installazione dei pacchetti. Per risolvere il problema, precompila i file binari in un wheel compatibile con AWS Glue e installa 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, non è disponibile l'accesso al cluster per sviluppare queste dipendenze.

Per precompilare un modulo Python basato su C che richiede autorizzazioni root, completa i seguenti passaggi:

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

  2. Installa Docker sull'istanza EC2, configura l'accesso non sudo e avvia Docker. I comandi necessari sono i seguenti:

    Installa Docker:

    sudo yum install docker -y

    Configura l'accesso sudo:

    sudo su

    Avvia Docker:

    sudo service docker start
  3. Crea un file Dockerfile per il modulo. Ad esempio, per installare il modulo grpcio, crea un file chiamato dockerfile_grpcio e copia il contenuto seguente nel file:

    FROM amazonlinux:2  
    \# Install required repositories and tools  
    RUN yum update -y  
    RUN yum install shadow-utils.x86\_64 -y  
    \# Install Java 8 (corrected package name)  
    RUN yum install -y java-1.8.0-openjdk.x86\_64  
    \# Install Python 3.7  
    WORKDIR /opt  
    RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel wget tar make  
    \# Install Python 3.7  
    RUN wget https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz  
    RUN tar xzf Python-3.7.12.tgz  
    WORKDIR /opt/Python-3.7.12  
    RUN ./configure --enable-optimizations  
    RUN make altinstall  
    RUN ln -sf /usr/local/bin/python3.7 /usr/bin/python3  
    RUN ln -sf /usr/local/bin/pip3.7 /usr/bin/pip3  
    \# Verify Python version  
    RUN python3 --version  
    RUN pip3 --version  
    \# Install other dependencies  
    RUN yum install -y doxygen autoconf automake libtool zlib-devel openssl-devel maven wget protobuf-compiler cmake make gcc-c++  
    RUN yum install -y python3-devel  
    \# Install Python packages  
    RUN pip3 install --upgrade pip  
    RUN pip3 install wheel  
    RUN pip3 install cython numpy scipy  
    RUN pip3 install cmake scikit-build  
    \# Create wheel directory and install grpcio  
    WORKDIR /root  
    RUN mkdir wheel\_dir  
    RUN pip3 install Cython  
    RUN pip3 install grpcio  
    RUN pip3 wheel grpcio -w wheel\_dir
  4. Esegui il comando build di docker per compilare il file Dockerfile:

    docker build -f dockerfile\_grpcio .
  5. Riavvia il daemon Docker:

    sudo service docker restart

    Al termine del comando docker build, verrà visualizzato un messaggio di operazione completata contenente l'ID dell'immagine Docker. Ad esempio, "Successfully built 1111222233334444" (1111222233334444 è stato creato correttamente). Prendi nota dell'ID dell'immagine Docker per utilizzarlo nel passaggio successivo.

  6. Estrai il file wheel .whl dal container Docker. I comandi necessari sono i seguenti:

    Ottieni l'ID dell'immagine Docker:

    docker image ls

    Esegui il container, ma sostituisci 1111222233334444 con l'ID della tua immagine Docker:

    docker run -dit 111122223334444

    Verifica la posizione del file wheel e recuperane il nome, ma sostituisci 5555666677778888 con l'ID del tuo container:

    docker exec -t -i 5555666677778888 ls /root/wheel\_dir/

    Copia il file wheel dal container Docker ad Amazon EC2:

    docker cp 5555666677778888:/root/wheel\_dir/doc-example-wheel .

    Nota: sostituisci doc-example-wheel con il nome del file wheel generato.

  7. Per caricare il file wheel su Amazon S3, esegui questi 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/

    Nota: sostituisci grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl con il nome del file del pacchetto Python.

  8. Apri la console AWS Glue.

  9. Per il lavoro ETL di AWS Glue, in Parametri del lavoro, inserisci quanto 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.

Informazioni correlate

Usare le librerie Python con AWS Glue

AWS UFFICIALE
AWS UFFICIALEAggiornata un mese fa