Como eu uso bibliotecas Python externas no meu trabalho de ETL do AWS Glue 2.0?

5 minuto de leitura
0

Quero usar bibliotecas externas do Python em trabalhos de extração, transformação e carregamento (ETL) do AWS Glue 2.0.

Solução

Com o AWS Glue versão 2.0, você pode instalar módulos de Python adicionais ou versões diferentes 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** com um valor contendo uma lista de módulos Python separados por vírgula. Isso permite que seu trabalho de ETL do AWS Glue 2.0 instale os módulos adicionais usando o instalador de pacotes Python (pip3).

Para instalar um módulo Python adicional para seu trabalho no AWS Glue:

  1. Abra o console do AWS Glue.
  2. No painel de navegação, escolha Tarefas.
  3. Selecione o trabalho em que você deseja adicionar o módulo de Python.
  4. Escolha Ações e depois Editar tarefa.
  5. Expanda a seção Configurações de segurança, bibliotecas de script e parâmetros de trabalho (opcional).
  6. Em Parâmetros do trabalho, faça o seguinte:
    Em Chave, insira**--additional-python-modules**.
    Em Value, insira pymysql==1.0.2, s3://aws-glue-add-modules/nltk-3.6.2-py3-none-any.whl.
  7. Escolha Salvar.

Essas etapas fornecem um exemplo de instalação de dois módulos diferentes:

  • PyMySQL pela internet
  • Kit de ferramentas de linguagem natural (NLTK) a partir de um arquivo wheel no Amazon Simple Storage Service (Amazon S3)

Instalar um novo módulo ou atualizar um módulo existente requer o download de dependências relacionadas ao módulo. Isso significa que você precisa ter acesso à Internet para concluir qualquer uma dessas tarefas. 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 ver a lista de módulos adicionais do Python que já são fornecidos no AWS Glue 2.0, consulte Módulos do Python já fornecidos no AWS Glue versão 2.0.

Bibliotecas e módulos de extensão escritos em C também são compatíveis com o AWS Glue 2.0 com a opção**--additional-python-modules**. No entanto, um subconjunto de módulos do Python, como spacy e ** grpc**, exige permissões de root para ser instalado. Sem permissões de root, a compilação desses módulos falha durante a instalação. O AWS Glue não fornece acesso root durante a instalação do pacote. A solução é pré-compilar os binários em um wheel compatível com o AWS Glue e instalar 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 o módulo Python baseado em C que requer permissões de root, faça o seguinte:

Observação: essas etapas fornecem um exemplo de instalação do módulo grpcio.

1.    Inicie uma instância Linux do Amazon Elastic Compute Cloud (Amazon EC2) com espaço de volume suficiente para suas bibliotecas.

2.    Instale o contêiner do Docker na instância, configure o acesso sem sudo e inicie o docker.

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

3.    Crie um arquivo dockerfile\ _grpcio e copie o seguinte para o arquivo:

# 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.    Execute o docker build para criar seu Dockerfile. Execute os seguintes comandos para reiniciar o daemon do Docker:

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

Quando o comando docker build for concluído, uma mensagem de sucesso será exibida com 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.

5.    Extraia o arquivo wheel do contêiner Docker. Execute os seguintes comandos para extrair o arquivo .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 .

Certifique-se de substituir os seguintes valores nos comandos anteriores:

  • 1111222233334444 com o ID de imagem do Docker
  • 5555666677778888 com o ID do contêiner
  • doc-example-wheel com o nome do arquivo wheel gerado

6.    Faça o upload do wheel para o Amazon S3 executando 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/

Certifique-se de substituir os seguintes valores nos comandos anteriores:

  • doc-example-wheel com o nome do arquivo wheel gerado
  • grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl com o nome do arquivo do pacote Python

7.    Para o trabalho de ETL do AWS Glue, no console do AWS Glue, em Parâmetros do trabalho, faça 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.
Observação: substitua grpcio-1.32.0-cp37-cp37m-linux_x86_64.whl pelo nome do arquivo do pacote Python.

Importante: as versões 0.9 e 1.0 do AWS Glue não oferecem suporte a módulos Python escritos em C. Para instalar uma biblioteca Python externa no AWS Glue 0.9 e 1.0, consulte Como usar bibliotecas Python externas no meu trabalho de ETL do AWS Glue 1.0 ou 0.9?


Informações relacionadas

Como usar bibliotecas Python com o AWS Glue

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos