Comment puis-je mettre à niveau ma version de Python sur Amazon EMR et configurer les tâches PySpark pour utiliser la version mise à niveau de Python ?

Lecture de 8 minute(s)
0

Je souhaite mettre à niveau ma version de Python sur Amazon EMR et configurer les tâches PySpark pour utiliser la version mise à niveau de Python.

Brève description

Les instances de cluster et les applications système utilisent différentes versions de Python en fonction des versions suivantes d'Amazon EMR :

  • Versions de mise à jour 4.6.0-5.19.0 d'Amazon EMR : Python 3.4 est installé sur les instances de cluster. Python 2.7 est la valeur par défaut du système.
  • Versions de mise à jour 5.20.0 et ultérieures d’Amazon EMR : Python 3.6 est installé sur les instances de cluster. Pour les versions 5.20.0-5.29.0 d'Amazon EMR, Python 2.7 est la valeur par défaut du système. Pour les versions 5.30.0 et ultérieures, Python 3 est la valeur par défaut du système.
  • Versions de mise à jour 6.0.0 et ultérieures d’Amazon EMR : Python 3.7 est installé sur les instances de cluster. Python 3 est la valeur par défaut du système.
  • Versions de mise à jour 7.0.0 et ultérieures d’Amazon EMR : Python 3.9 est installé sur les instances de cluster. Python 3 est la valeur par défaut du système.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), reportez-vous à la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Pour mettre à niveau votre version de Python, pointez la variable d’environnement PYSPARK_PYTHON pour la classification spark-env vers le répertoire dans lequel la nouvelle version de Python est installée :

which example-python-version

Remarque : Remplacez example-python-version par votre nouvelle version de Python.

Mettre à niveau votre version de Python pour Amazon EMR qui s'exécute sur Amazon EC2

Remarque : Avant d'installer une nouvelle version de Python et d'OpenSSL sur vos instances de cluster Amazon EMR, assurez-vous de tester les scripts suivants.

Pour effectuer une mise à niveau vers Python 3.9 pour Amazon EMR version 6.15 exécuté sur Amazon Elastic Compute Cloud (Amazon EC2), utilisez le script suivant. Vous pouvez également utiliser le script pour effectuer une mise à niveau vers Python 3.10 ou une version ultérieure sur la version 7.0 d'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

Remarque : Remplacez example-python3-version par votre version de Python 3.

OpenSSL est requis pour effectuer la mise à niveau vers Python 3.10 ou version ultérieure sur Amazon EMR 6.15 ou version antérieure. Utilisez le script suivant :

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

Remarque : Remplacez example-python3-version par votre version de Python 3 et example-openssl11-version par votre version d'OpenSSL 11. Pour en savoir plus, consultez la page openssl sur le site Web de GitHub.

Pour utiliser la version mise à niveau comme installation par défaut de Python 3, utilisez /usr/local/bin/python3.x comme nouvel emplacement Python. Le script Python précédent est installé dans /usr/local/bin/python3.x et l'installation par défaut de Python est /usr/bin/python3.

Mettre à niveau votre version de Python sur un cluster en cours d'exécution

Remarque : Pour les versions 5.36.0 et antérieures d'Amazon EMR, vous pouvez mettre à niveau la version Python vers la version 3.8.

Amazon EMR version 5.21.0 ou antérieure

Soumettez une requête de reconfiguration avec un objet de configuration similaire au suivant :

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

Amazon EMR version 4.6.0-5.20.x

Effectuez les opérations suivantes :

  1. Utilisez SSH pour vous connecter au nœud primaire.
  2. Pour modifier l'environnement Python par défaut, exécutez la commande suivante :
    sudo sed -i -e '$a\export PYSPARK_PYTHON=/usr/bin/python3' /etc/spark/conf/spark-env.sh
    Pour vérifier que PySpark utilise la bonne version de Python, exécutez la commande suivante :
    [hadoop@example-ip-address conf]$ pyspark
    Remarque : Remplacez example-ip-address par votre adresse IP.
    Exemple de sortie :
    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'.

Remarque : La nouvelle configuration prend effet lors de la prochaine tâche PySpark.

Mettre à niveau votre version de Python sur un nouveau cluster

Pour mettre à niveau votre version de Python lorsque vous lancez un cluster sur Amazon EMR, ajoutez une action d’amorçage au script que vous utilisez.

Pour effectuer une mise à niveau vers Python 3.9 pour Amazon EMR version 6.15 exécuté sur Amazon EC2, utilisez le script suivant. Vous pouvez également utiliser le script pour effectuer une mise à niveau vers Python 3.10 ou une version ultérieure sur la version 7.0 d'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

Remarque : Remplacez example-python3-version par votre version de Python 3.

OpenSSL est requis pour effectuer la mise à niveau vers Python 3.10 ou version ultérieure sur Amazon EMR 6.15 et versions antérieures. Utilisez le script suivant :

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

Remarque : Remplacez example-python3-version par votre version de Python 3 et example-openssl11-version par votre version d'OpenSSL 11. Pour en savoir plus, consultez la page openssl sur le site Web de GitHub.

Puis, ajoutez un objet de configuration similaire au suivant :

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

Mettre à niveau votre version de Python sur Amazon EMR sur Amazon EKS

Remarque : Les images basées sur Amazon Linux 2023 contiennent al2023 dans leur nom. Amazon EMR 6.13.0 et versions ultérieures utilisent également Python 3.9.16 par défaut dans les images basées sur Amazon Linux 2023. Pour les images basées sur Amazon Linux 2, Python 3.7 est la version par défaut.

Pour mettre à niveau votre version de Python pour Amazon EMR sur Amazon Elastic Kubernetes Service (Amazon EKS), une image Docker est requise. Sélectionnez un URI de base pour votre région 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

Remarque : Remplacez example-base-URI-account-id par l'ID de compte de base pour les images Apache Spark, example-region par votre région et example-python3-version par la version Python.

Pour transmettre une image lorsque vous soumettez une charge de travail Spark, utilisez des modifications de configuration de l'application, un pilote Spark et une image de pod prmaire :

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

Remarque : Remplacez example-account-id par l'ID de compte qui stocke l'image créée, example-repository par le nom de votre référentiel qui stocke l'image personnalisée et example-region par votre région.

Mettre à niveau votre version de Python sur Amazon EMR sans serveur

Pour mettre à niveau votre version de Python sur une application Amazon EMR sans serveur, utilisez une image Docker pour installer la nouvelle version 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

Remarque : Remplacez example-python-version par votre version de Python 3.

Lorsque vous soumettez une tâche Spark à une application Amazon EMR sans serveur, passez le chemin suivant pour utiliser la nouvelle version 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

Informations connexes

Configurer Spark

Apache Spark

Détails relatifs à la sélection de l'URI d'une image de base

Utilisation d'images personnalisées avec EMR sans serveur

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 4 mois