Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Como eu uso bibliotecas externas do Python no meu trabalho de ETL do AWS Glue?
Quero usar bibliotecas externas do Python em trabalho de extração, transformação e carregamento (ETL) do AWS Glue.
Breve descrição
Ao usar as versões 2.0, 3.0 e 4.0 do AWS Glue, é possível instalar módulos adicionais do Python ou diferentes versões do módulo no nível do trabalho. Para adicionar um novo módulo ou alterar a versão de um módulo existente, use a chave do parâmetro de trabalho --additional-python-modules. O valor da chave é uma lista de nomes de módulos Python separados por vírgula. Quando você usa esse parâmetro, seu trabalho de ETL do AWS Glue instala os módulos adicionais por meio do instalador de pacotes Python (pip3).
Você também pode usar o parâmetro --additional-python-modules para instalar bibliotecas do Python escritas em linguagens baseadas em C.
Resolução
Instalar ou atualizar módulos Python
Para instalar um módulo Python adicional para seu trabalho no AWS Glue, conclua as seguintes etapas:
- Abra o console do AWS Glue.
- No painel de navegação, escolha Tarefas.
- Selecione o trabalho em que você deseja adicionar o módulo de Python.
- Escolha Ações e depois Editar tarefa.
- Expanda a seção Configurações de segurança, bibliotecas de script e parâmetros de trabalho (opcional).
- Em Parâmetros do trabalho, faça o seguinte:
Em Chave, insira**--additional-python-modules**.
Em Valor, insira uma lista separada por vírgulas dos módulos que você deseja adicionar. - Selecione Salvar.
Por exemplo, suponha que você queira adicionar dois novos módulos, a versão 1.0.2 do PyMySQL e a versão 3.6.2 do Natural Language Toolkit (NLTK). Você instala o módulo PyMySQL da internet e o módulo NLTK de um bucket do Amazon Simple Storage Service (Amazon S3). Nesse caso, a chave do parâmetro --additional-python-modules tem o valor pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl.
Alguns módulos têm dependências de outros módulos. Se você instalar ou atualizar esse módulo, também deverá baixar os outros módulos dos quais ele depende. Isso significa que você deve ter acesso à internet para instalar ou atualizar o módulo. Se você não tiver acesso à Internet, consulte Como criar módulos Python a partir de uma wheel para workloads do Spark ETL usando o AWS Glue 2.0.
Para obter uma lista dos módulos Python que estão incluídos em cada versão do AWS Glue por padrão, consulte Módulos Python já fornecidos no AWS Glue.
Instale módulos Python baseados em C
Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
O AWS Glue também oferece suporte a bibliotecas e extensões escritas em C com o parâmetro --additional-python-modules. No entanto, um subconjunto de módulos Python, como spacy e grpc, exige permissões raiz para ser instalado. O AWS Glue não fornece acesso raiz durante a instalação do pacote. Para resolver esse problema, pré-compile os binários em um wheel compatível com o AWS Glue e instale esse wheel.
Para compilar uma biblioteca em uma linguagem baseada em C, o compilador deve ser compatível com o sistema operacional e a arquitetura do processador de destino. Se a biblioteca for compilada em um sistema operacional ou arquitetura do processador diferente, o wheel não será instalado no AWS Glue. Como o AWS Glue é um serviço gerenciado, o acesso ao cluster não está disponível para desenvolver essas dependências.
Para pré-compilar um módulo Python baseado em C que requer permissões raiz, conclua as seguintes etapas:
-
Execute uma instância Linux (Amazon Linux 2 AMI) do Amazon Elastic Compute Cloud (Amazon EC2) com espaço de volume suficiente para suas bibliotecas.
-
Instale o Docker na instância do EC2, configure o acesso não sudo e inicie o Docker. Para fazer isso, execute os comandos a seguir:
Instale o Docker:
sudo yum install docker -y
Configure o acesso ao sudo:
sudo su
Inicie o Docker:
sudo service docker start
-
Crie um arquivo Dockerfile para o módulo. Por exemplo, para instalar o módulo grpcio, crie um arquivo chamado dockerfile_grpcio e copie o seguinte conteúdo no arquivo:
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
-
Execute o docker build para criar seu Dockerfile:
docker build -f dockerfile\_grpcio .
-
Reinicie o daemon do Docker:
sudo service docker restart
Quando o comando docker build for concluído, você receberá uma mensagem de sucesso contendo seu ID de imagem do Docker. Por exemplo, “Successfully built 1111222233334444”. Anote o ID da imagem do Docker a ser usado na próxima etapa.
-
Extraia o arquivo wheel .whl do contêiner do Docker. Para fazer isso, execute os comandos a seguir:
Obtenha o ID da imagem do Docker:
docker image ls
Execute o contêiner, mas substitua 1111222233334444 pelo ID da imagem do Docker:
docker run -dit 111122223334444
Verifique a localização do arquivo wheel e recupere o nome do arquivo wheel, mas substitua 5555666677778888 pelo seu ID de contêiner:
docker exec -t -i 5555666677778888 ls /root/wheel\_dir/
Copie o wheel do contêiner do Docker para o Amazon EC2:
docker cp 5555666677778888:/root/wheel\_dir/doc-example-wheel .
Observação: Substitua doc-example-wheel pelo nome do seu arquivo wheel gerado
-
Para fazer o upload do wheel para o Amazon S3, execute os seguintes comandos:
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/
Observação: Substitua grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl pelo nome do arquivo do pacote Python.
-
Abra o console do AWS Glue.
-
Para o trabalho de ETL do AWS Glue, em Parâmetros do trabalho, insira o seguinte:
Em Chave, insira**--additional-python-modules**.
Em Valor, insira s3://aws-glue-add-modules/grpcio/grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl.
Informações relacionadas

Conteúdo relevante
- feita há 5 meseslg...
- feita há um mêslg...
- feita há um mêslg...
- feita há 4 meseslg...
- feita há 2 meseslg...
- AWS OFICIALAtualizada há 3 anos