Wie aktualisiere ich meine Python-Version auf Amazon EMR und konfiguriere PySpark-Aufträge, um die aktualisierte Python-Version zu verwenden?

Lesedauer: 6 Minute
0

Ich möchte meine Python-Version auf Amazon EMR aktualisieren und PySpark-Aufträge so konfigurieren, dass sie die aktualisierte Python-Version verwenden.

Kurzbeschreibung

Cluster-Instances und Systemanwendungen verwenden unterschiedliche Python-Versionen auf der Grundlage der folgenden Amazon EMR-Release-Versionen:

  • Amazon EMR-Release-Versionen 4.6.0-5.19.0: Python 3.4 ist auf den Cluster-Instances installiert. Python 2.7 ist der Systemstandard.
  • Amazon EMR-Release-Versionen 5.20.0 und höher: Python 3.6 ist auf den Cluster-Instances installiert. Für die Amazon EMR-Versionen 5.20.0-5.29.0 ist Python 2.7 der Systemstandard. Für Versionen 5.30.0 und höher ist Python 3 der Systemstandard.
  • Amazon EMR-Release-Versionen 6.0.0 und höher: Python 3.7 ist auf den Cluster-Instances installiert. Python 3 ist der Systemstandard.
  • Amazon EMR-Release-Versionen 7.0.0 und höher: Python 3.9 ist auf den Cluster-Instances installiert. Python 3 ist der Systemstandard.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Um deine Python-Version zu aktualisieren, verweise die Umgebungsvariable PYSPARK_PYTHON für die spark-env-Klassifizierung auf das Verzeichnis, in dem die neue Python-Version installiert ist:

which example-python-version

Hinweis: Ersetze example-python-version durch deine neue Python-Version.

Upgrade der Python-Version für Amazon EMR, die auf Amazon EC2 ausgeführt wurde

Hinweis: Bevor du eine neue Python- und OpenSSL-Version auf den Amazon EMR-Cluster-Instances installierst, stelle sicher, dass du die folgenden Skripts testest.

Verwende das folgende Skript, um ein Upgrade auf Python 3.9 für Amazon EMR Version 6.15 durchzuführen, die auf Amazon Elastic Compute Cloud (Amazon EC2) ausgeführt wird. Du kannst das Skript auch für ein Upgrade auf Python 3.10 oder höher auf Amazon EMR Version 7.0 verwenden:

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

Hinweis: Ersetze example-python3-version durch deine Python 3-Version.

OpenSSL ist für ein Upgrade auf Python 3.10 oder höher auf Amazon EMR 6.15 oder älter erforderlich. Verwende das folgende Skript:

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

Hinweis: Ersetze example-python3-version durch deine Python 3-Version und example-openssl11-version durch deine OpenSSL 11-Version. Weitere Informationen findest du unter openssl auf der GitHub-Website.

Um die aktualisierte Version als Standardinstallation von Python 3 zu verwenden, verwende /usr/local/bin/python3.x als neuen Python-Speicherort. Das vorangehende Python-Skript ist unter /usr/local/bin/python3.x installiert und die Standard-Python-Installation ist /usr/bin/python3.

Upgrade der Python-Version auf einem Cluster, der ausgeführt wird

Hinweis: Bei Amazon EMR-Versionen 5.36.0 und älter kannst du die Python-Version auf 3.8 aktualisieren.

Amazon EMR Version 5.21.0 oder älter

Sende eine Rekonfigurationsanforderung mit einem Konfigurationsobjekt, das dem folgenden ähnelt:

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

Amazon EMR Version 4.6.0–5.20.x

Führe die folgenden Schritte aus:

  1. Verwende SSH, um eine Verbindung zum Primärknoten herzustellen.
  2. Führe den folgenden Befehl aus, um die Standard-Python-Umgebung zu ändern:
    sudo sed -i -e '$a\export PYSPARK_PYTHON=/usr/bin/python3' /etc/spark/conf/spark-env.sh
    Führe den folgenden Befehl aus, um dich zu vergewissern, dass PySpark die richtige Python-Version verwendet:
    [hadoop@example-ip-address conf]$ pyspark
    Hinweis: Ersetze example-ip-address durch deine IP-Adresse.
    Beispielausgabe:
    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'.

Hinweis: Die neue Konfiguration wird beim nächsten PySpark-Auftrag wirksam.

Upgrade der Python-Version auf einem neuen Cluster

Um deine Python-Version zu aktualisieren, wenn du einen Cluster auf Amazon EMR startest, füge dem von dir verwendeten Skript eine Bootstrap-Aktion hinzu.

Verwende das folgende Skript, um ein Upgrade auf Python 3.9 für Amazon EMR Version 6.15 durchzuführen, die auf Amazon EC2 ausgeführt wird. Du kannst das Skript auch für ein Upgrade auf Python 3.10 oder höher auf Amazon EMR Version 7.0 verwenden:

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

Hinweis: Ersetze example-python3-version durch deine Python 3-Version.

OpenSSL ist für ein Upgrade auf Python 3.10 oder höher auf Amazon EMR 6.15 und älter erforderlich. Verwende das folgende Skript:

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

Hinweis: Ersetze example-python3-version durch deine Python 3-Version und example-openssl11-version durch deine OpenSSL 11-Version. Weitere Informationen findest du unter openssl auf der GitHub-Website.

Füge dann ein Konfigurationsobjekt hinzu, das dem folgenden ähnelt:

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

Upgrade der Python-Version auf Amazon EMR in Amazon EKS

Hinweis: Auf Amazon Linux 2023 basierende Images enthalten al2023 im Namen. Außerdem verwenden Amazon EMR 6.13.0 und höher standardmäßig Python 3.9.16 in Images, die auf Amazon Linux 2023 basieren. Für Images, die auf Amazon Linux 2 basieren, ist Python 3.7 die Standardversion.

Um die Python-Version für Amazon EMR auf Amazon Elastic Kubernetes Service (Amazon EKS) zu aktualisieren, ist ein Docker-Image erforderlich. Wähle eine Basis-URI für deine AWS-Region aus:

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

Hinweis: Ersetze example-base-URI-account-id durch die Basiskonto-ID für Apache Spark-Images, example-region durch deine Region und example-python3-version durch die Python-Version.

Um ein Image zu übergeben, wenn du einen Spark-Workload abschickst, verwende Überschreibungen der Anwendungskonfiguration, einen Spark-Treiber und ein primäres Pod-Image:

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

Hinweis: Ersetze example-account-id durch die Konto-ID, die das erstellte Image speichert, **example-repository ** durch den Namen deines Repository, der das benutzerdefinierte Image speichert, und example-region durch deine Region.

Upgrade der Python-Version auf Amazon EMR Serverless

Um deine Python-Version in einer Amazon EMR Serverless-Anwendung zu aktualisieren, verwende ein Docker-Image, um die neue Python-Version zu installieren:

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

Hinweis: Ersetze example-python-version durch deine Python 3-Version.

Wenn du einen Spark-Auftrag]() an eine Amazon EMR Serverless-Anwendung[ abschickst, übergebe den folgenden Pfad, um die neue Python-Version zu verwenden:

--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

Ähnliche Informationen

Spark konfigurieren

Apache Spark

Einzelheiten zur Auswahl einer Basis-Image-URI

Verwendung benutzerdefinierter Images mit EMR Serverless

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Monaten