Como faço para atualizar minha versão do Python no Amazon EMR e configurar trabalhos do PySpark para usar a versão atualizada do Python?

7 minuto de leitura
0

Quero atualizar minha versão do Python no Amazon EMR e configurar as tarefas do PySpark para usar a versão atualizada do Python.

Breve descrição

As instâncias de cluster e as aplicações do sistema usam diferentes versões Python com base nas seguintes versões de lançamento do Amazon EMR:

  • Versões de lançamento do Amazon EMR 4.6.0-5.19.0: O Python 3.4 está instalado nas instâncias do cluster. O Python 2.7 é o padrão do sistema.
  • Versões de lançamento do Amazon EMR 5.20.0 e posteriores: O Python 3.6 está instalado nas instâncias do cluster. Para as versões 5.20.0-5.29.0 do Amazon EMR, o Python 2.7 é o sistema padrão. Para as versões 5.30.0 e posteriores, o Python 3 é o padrão do sistema.
  • Versões de lançamento do Amazon EMR 6.0.0 e posteriores: O Python 3.7 está instalado nas instâncias do cluster. O Python 3 é o padrão do sistema.
  • Versões de lançamento do Amazon EMR 7.0.0 e posteriores: O Python 3.9 está instalado nas instâncias do cluster. O Python 3 é o padrão do sistema.

Solução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Para atualizar sua versão do Python, aponte a variável de ambiente PYSPARK_PYTHON da classificação spark-env para o diretório em que a nova versão do Python está instalado:

which example-python-version

Observação: Substitua example-python-version pela sua nova versão do Python.

Atualize sua versão do Python para o Amazon EMR executada no Amazon EC2

Observação: Antes de instalar uma nova versão do Python e do OpenSSL em suas instâncias de cluster do Amazon EMR, certifique-se de testar os seguintes scripts.

Para fazer o upgrade para o Python 3.9 para o Amazon EMR versão 6.15 executado no Amazon Elastic Compute Cloud (Amazon EC2), use o script a seguir. Você também pode usar o script para atualizar para o Python 3.10 ou posterior na versão 7.0 do Amazon EMR:

sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel
wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz
tar xvf example-python3-version.tgz
cd example-python3-version/
./configure --enable-optimizations
sudo make altinstall

Observação: Substitua example-python3-version pela sua versão do Python 3.

O OpenSSL é necessário para fazer o upgrade para o Python 3.10 ou posterior no Amazon EMR 6.15 ou anterior. Use o seguinte script:

sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel
cd /home/hadoop/
wget https://github.com/openssl/openssl/archive/refs/tags/example-openssl11-version.tar.gz
tar -xzf example-openssl11-version.tar.gz
cd example-openssl11-version/
./config --prefix=/usr --openssldir=/etc/ssl --libdir=lib no-shared zlib-dynamic
make
sudo make install
cd /home/hadoop/
wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz
tar xvf example-python3-version.tgz
cd example-python3-version/
./configure --enable-optimizations --with-openssl=/usr
sudo make altinstall

Observação: Substitua example-python3-version pela versão do Python 3 e example-openssl11-version pela versão do OpenSSL 11. Para obter mais informações, consulte openssl no site do GitHub.

Para usar a versão atualizada como sua instalação padrão do Python 3, use /usr/local/bin/python3.x como sua nova localização do Python. O script Python anterior é instalado em /usr/local/bin/python3.x e a instalação padrão do Python é /usr/bin/python3.

Atualize sua versão do Python em um cluster em execução

Observação: Para as versões 5.36.0 e anteriores do Amazon EMR, você pode atualizar a versão do Python para 3.8.

Amazon EMR versão 5.21.0 ou anterior

Envie uma solicitação de reconfiguração com um objeto de configuração que seja semelhante ao seguinte:

[  {
     "Classification": "spark-env",
     "Configurations": [
       {
         "Classification": "export",
         "Properties": {
            "PYSPARK_PYTHON": "/usr/bin/python3"
          }
       }
    ]
  }
]

Amazon EMR versão 4.6.0-5.20.x

Conclua as seguintes etapas:

  1. Use SSH para se conectar ao nó primário.
  2. Para alterar o ambiente padrão do Python, execute o comando a seguir:
    sudo sed -i -e '$a\export PYSPARK_PYTHON=/usr/bin/python3' /etc/spark/conf/spark-env.sh
    Para confirmar se o PySpark usa a versão correta do Python, execute o seguinte comando:
    [hadoop@example-ip-address conf]$ pyspark
    Observação: Substitua example-ip-address pelo seu endereço IP.
    Exemplo de saída:
    Python 3.4.8 (default, Apr 25 2018, 23:50:36)
    Welcome to
          ____              __
         / __/__  ___ _____/ /__
        _\ \/ _ \/ _ `/ __/  '_/
       /__ / .__/\_,_/_/ /_/\_\   version 2.3.1
          /_/
    Using Python version 3.4.8 (default, Apr 25 2018 23:50:36)
    SparkSession available as 'spark'.

Observação: A nova configuração entra em vigor no próximo trabalho do PySpark.

Atualize sua versão do Python em um novo cluster

Para atualizar sua versão do Python ao iniciar um cluster no Amazon EMR, adicione uma ação de bootstrap ao script que você usa.

Para fazer o upgrade para o Python 3.9 para o Amazon EMR versão 6.15 que é executado no Amazon EC2, use o script a seguir. Você também pode usar o script para atualizar para o Python 3.10 ou posterior na versão 7.0 do Amazon EMR:

sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel
wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz
tar xvf example-python3-version.tgz
cd example-python3-version/
./configure --enable-optimizations
sudo make altinstall

Observação: Substitua example-python3-version pela sua versão do Python 3.

O OpenSSL é necessário para fazer o upgrade para o Python 3.10 ou posterior no Amazon EMR 6.15 e versões anteriores. Use o seguinte script:

sudo yum -y install openssl-devel bzip2-devel libffi-devel xz-devel gcc sqlite-devel
cd /home/hadoop/
wget https://github.com/openssl/openssl/archive/refs/tags/example-openssl11-version.tar.gz
tar -xzf example-openssl11-version.tar.gz
cd example-openssl11-version/
./config —prefix=/usr --openssldir=/etc/ssl --libdir=lib no-shared zlib-dynamic
make
sudo make install
cd /home/hadoop/
wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz
tar xvf example-python3-version.tgz
cd example-python3-version/
./configure --enable-optimizations --with-openssl=/usr
sudo make altinstall

Observação: Substitua example-python3-version pela versão do Python 3 e example-openssl11-version pela versão do OpenSSL 11. Para obter mais informações, consulte openssl no site do GitHub.

Em seguida, adicione um objeto de configuração semelhante ao seguinte:

[
  {
     "Classification": "spark-env",
     "Configurations": [
       {
         "Classification": "export",
         "Properties": {
            "PYSPARK_PYTHON": "<example-python-version-path>"
          }
       }
    ]
  }
]

Atualize sua versão do Python no Amazon EMR no Amazon EKS

**Observação:**As imagens baseadas no Amazon Linux 2023 contêm al2023 no nome. Além disso, o Amazon EMR 6.13.0 e versões posteriores usam o Python 3.9.16 por padrão em imagens baseadas no Amazon Linux 2023. Para imagens baseadas no Amazon Linux 2, o Python 3.7 é a versão padrão.

Para atualizar sua versão do Python para o Amazon EMR no Amazon Elastic Kubernetes Service (Amazon EKS), é necessária uma imagem do docker. Selecione um URI base para sua região da AWS:

FROM example-base-URI-account-id.dkr.ecr.example-region.amazonaws.com/spark/emr-6.15.0
USER root
RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel tar gzip wget make
RUN wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz && \
tar xzf example-python3-version.tgz && cd example-python3-version && \
./configure --enable-optimizations && \
make altinstall
USER hadoop:hadoop

Observação: Substitua example-base-URI-account-id pelo ID da conta base para imagens do Apache Spark, example-region pela sua região e example-python3-version pela versão do Python.

Para transmitir uma imagem ao enviar um workload do Spark, use substituições de configuração da aplicação, um driver do Spark e uma imagem primária do pod:

{
                "classification": "spark-defaults",
                "properties": {
                    "spark.kubernetes.container.image": "example-account-id.dkr.ecr.example-region.amazonaws.com/example-repository"
                }
 }

Observação: Substitua example-account-id pelo ID da conta que está armazenando a imagem criada, example-repository pelo nome do seu repositório que está armazenando a imagem personalizada e example-region pela sua região.

Atualize sua versão do Python no Amazon EMR Sem Servidor

Para atualizar sua versão do Python em uma aplicação Amazon EMR Sem Servidor, use uma imagem do docker para instalar a nova versão do Python:

FROM public.ecr.aws/emr-serverless/spark/emr-6.9.0:latest
USER root
# install python 3
RUN yum install -y gcc openssl-devel bzip2-devel libffi-devel tar gzip wget make
RUN wget https://www.python.org/ftp/python/3.x.x/example-python3-version.tgz && \
tar xzf example-python3-version.tgz && cd example-python3-version && \
./configure --enable-optimizations && \
make altinstall
# EMRS will run the image as hadoop
USER hadoop:hadoop

Observação: Substitua example-python-version pela sua versão do Python 3.

Ao enviar um trabalho do Spark para uma aplicação do Amazon EMR Sem Servidor, passe o seguinte caminho para usar a nova versão do Python:

--conf spark.emr-serverless.driverEnv.PYSPARK_DRIVER_PYTHON=/usr/local/bin/python3.9
--conf spark.emr-serverless.driverEnv.PYSPARK_PYTHON=/usr/local/bin/python3.9
--conf spark.executorEnv.PYSPARK_PYTHON=/usr/local/bin/python3.9

Informações relacionadas

Configurar o Spark

Apache Spark

Detalhes para selecionar um URI de imagem base

Usando imagens personalizadas com o EMR de tecnologia sem servidor

AWS OFICIAL
AWS OFICIALAtualizada há 3 meses