¿Cómo actualizo mi versión de Python en Amazon EMR y configuro los trabajos de PySpark para que usen la versión actualizada de Python?

7 minutos de lectura
0

Quiero actualizar mi versión de Python en Amazon EMR y configurar los trabajos de PySpark para que usen la versión actualizada de Python.

Descripción breve

Las instancias de clúster y las aplicaciones del sistema utilizan diferentes versiones de Python en función de las siguientes versiones de Amazon EMR:

  • Versiones 4.6.0-5.19.0 de Amazon EMR: Python 3.4 está instalado en las instancias del clúster. Python 2.7 es el valor predeterminado del sistema.
  • Versiones 5.20.0 y posteriores de Amazon EMR: Python 3.6 está instalado en las instancias del clúster. Para las versiones 5.20.0-5.29.0 de Amazon EMR, Python 2.7 es el valor predeterminado del sistema. Para las versiones 5.30.0 y posteriores, Python 3 es el valor predeterminado del sistema.
  • Versiones 6.0.0 y posteriores de Amazon EMR: Python 3.7 está instalado en las instancias del clúster. Python 3 es el valor predeterminado del sistema.
  • Versiones 7.0.0 y posteriores de Amazon EMR: Python 3.9 está instalado en las instancias del clúster. Python 3 es el valor predeterminado del sistema.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Troubleshooting errors for the AWS CLI (Solución de errores de la AWS CLI). Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Con el fin de actualizar la versión de Python, utiliza la variable de entorno PYSPARK_PYTHON de la clasificación spark-env para señalar al directorio donde se ha instalado la nueva versión de Python:

which example-python-version

Nota: Sustituye example-python-version por la nueva versión de Python.

Actualización de la versión de Python para Amazon EMR que se ejecuta en Amazon EC2

Nota: Antes de instalar una nueva versión de Python y OpenSSL en las instancias de clúster de Amazon EMR, asegúrate de probar los siguientes scripts.

Para actualizar a Python 3.9 para la versión 6.15 de Amazon EMR que se ejecuta en Amazon Elastic Compute Cloud (Amazon EC2), utiliza el siguiente script. También puedes usar el script para actualizar a Python 3.10 o posterior en la versión 7.0 de 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

Nota: Sustituye example-python3-version por tu versión de Python 3.

Se requiere OpenSSL para actualizar a Python 3.10 o posterior en Amazon EMR 6.15 o versiones anteriores. Utiliza el siguiente 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

Nota: Sustituye example-python3-version por tu versión de Python 3 y example-openssl11-version por tu versión de OpenSSL 11. Para obtener más información, consulta openssl en el sitio web de GitHub.

Para usar la versión actualizada como instalación predeterminada de Python 3, usa /usr/local/bin/python3.x como tu nueva ubicación de Python. El script de Python anterior se instala en /usr/local/bin/python3.x y la instalación predeterminada de Python es /usr/bin/python3.

Actualización de la versión de Python en un clúster en ejecución

Nota: En el caso de las versiones 5.36.0 y anteriores de Amazon EMR, puedes actualizar la versión de Python a la 3.8.

Versión 5.21.0 o anterior de Amazon EMR

Envía una solicitud de reconfiguración con un objeto de configuración similar al siguiente:

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

Versión 4.6.0-5.20.x de Amazon EMR

Sigue estos pasos:

  1. Usa SSH para conectarte al nodo principal.
  2. Para cambiar el entorno predeterminado de Python, ejecuta el siguiente comando:
    sudo sed -i -e '$a\export PYSPARK_PYTHON=/usr/bin/python3' /etc/spark/conf/spark-env.sh
    Para confirmar que PySpark usa la versión correcta de Python, ejecuta el siguiente comando:
    [hadoop@example-ip-address conf]$ pyspark
    Nota: Sustituye example-ip address por tu dirección IP.
    Resultado del ejemplo:
    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'.

Nota: La nueva configuración se aplicará en el siguiente trabajo de PySpark.

Actualización de la versión de Python en un nuevo clúster

Para actualizar tu versión de Python al lanzar un clúster en Amazon EMR, añade una acción de arranque al script que utilices.

Para actualizar a Python 3.9 para la versión 6.15 de Amazon EMR que se ejecuta en Amazon EC2, utiliza el siguiente script. También puedes usar el script para actualizar a Python 3.10 o posterior en la versión 7.0 de 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

Nota: Sustituye example-python3-version por tu versión de Python 3.

Se requiere OpenSSL para actualizar a Python 3.10 o posterior en Amazon EMR 6.15 y versiones anteriores. Utiliza el siguiente 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

Nota: Sustituye example-python3-version por tu versión de Python 3 y example-openssl11-version por tu versión de OpenSSL 11. Para obtener más información, consulta openssl en el sitio web de GitHub.

A continuación, añade un objeto de configuración similar al siguiente:

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

Actualiza tu versión de Python en Amazon EMR en Amazon EKS

Nota: Las imágenes basadas en Amazon Linux 2023 contienen al2023 en el nombre. Además, Amazon EMR 6.13.0 y versiones posteriores utilizan Python 3.9.16 de forma predeterminada en las imágenes basadas en Amazon Linux 2023. En el caso de las imágenes basadas en Amazon Linux 2, Python 3.7 es la versión predeterminada.

Para actualizar la versión de Python para Amazon EMR en Amazon Elastic Kubernetes Service (Amazon EKS), se necesita una imagen de Docker. Selecciona un URI base para tu región de 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

Nota: Sustituye example-base-URI-account-ID por el ID de cuenta base para las imágenes de Apache Spark, example-region por tu región y example-python3-version por la versión de Python.

Para pasar una imagen al enviar una carga de trabajo de Spark, usa anulaciones de configuración de la aplicación, un controlador de Spark y una imagen de pod principal:

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

Nota: Sustituye example-account-id por el ID de la cuenta que almacena la imagen creada, example-repository por el nombre del repositorio que almacena la imagen personalizada y example-region por tu región.

Actualiza tu versión de Python en Amazon EMR sin servidor

Para actualizar tu versión de Python en una aplicación de Amazon EMR sin servidor, utiliza una imagen de Docker para instalar la nueva versión de 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

Nota: Sustituye example-python-version por tu versión de Python 3.

Cuando envíes un trabajo de Spark a una aplicación de Amazon EMR sin servidor, pasa la siguiente ruta para usar la nueva versión de 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

Información relacionada

Configuración de Spark

Apache Spark

Details for selecting a base image URI (Detalles para seleccionar un URI de imagen base)

Using custom images with EMR Serverless (Uso de imágenes personalizadas con EMR sin servidor)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 4 meses