Python-Umgebung konfigurieren

PySpark-Jobs in Managed Service for Apache Spark werden von einem Python-Interpreter im Cluster ausgeführt. Der Jobcode muss zur Laufzeit mit der Python-Interpreterversion und den Abhängigkeiten kompatibel sein.

Interpreter-Version und -Module prüfen

Das folgende Beispielprogramm check_python_env.py prüft den Linux-Nutzer, der den Job ausführt, den Python-Interpreter und die verfügbaren Module.

import getpass
import importlib.util
import sys

print(f'This job is running as "{getpass.getuser()}".')
print(sys.executable, sys.version_info)
for package in sys.argv[1:]:
  print(importlib.util.find_spec(package))

Führen Sie das Programm aus:

REGION=region
gcloud dataproc jobs submit pyspark check_python_env.py \
    --cluster=my-cluster \
    --region=${REGION} \
    -- pandas scipy

Beispielausgabe:

This job is running as "root".
/opt/conda/default/bin/python sys.version_info(major=3, minor=11, micro=8, releaselevel='final', serial=0)
ModuleSpec(name='pandas', loader=<_frozen_importlibexternal.SourceFileLoader object at 0x7f8b9c0a3d90>, origin='/opt/conda/default/lib/python3.11/site-packages/pandas/init_.py', submodule_search_locations=['/opt/conda/default/lib/python3.11/site-packages/pandas'])
ModuleSpec(name='scipy', loader=<_frozen_importlibexternal.SourceFileLoader object at 0x7f8b9c0a3e50>, origin='/opt/conda/default/lib/python3.11/site-packages/scipy/init_.py', submodule_search_locations=['/opt/conda/default/lib/python3.11/site-packages/scipy'])

Python-Umgebungen für Managed Service for Apache Spark-Images

In den folgenden Abschnitten werden die Python-Umgebungen für unterstützte Managed Service for Apache Spark-Cluster mit Image-Version beschrieben.

Managed Service for Apache Spark-Imageversion 2.x

Conda (oder micromamba in Version 2.3) ist auf Managed Service for Apache Spark-Clustern der Version 2.x installiert. Der standardmäßige Python 3-Interpreter befindet sich auf der VM-Instanz unter /opt/conda/default/bin. Auf den folgenden Seiten ist die Python-Version aufgeführt, die in den unterstützten Managed Service for Apache Spark 2.x-Image-Versionen enthalten ist:

Der nicht standardmäßige Python-Interpreter des Betriebssystems ist unter /usr/bin/ verfügbar.

Sie können conda- und pip-Pakete in der base-Umgebung installieren oder Ihre eigene conda-Umgebung auf dem Cluster mit Conda-bezogenen Clusterattributen einrichten.

Hinweis zu Conda-Channels: Die Standard-Image-Versionen 2.1, 2.2 und 2.3 für Managed Service for Apache Spark enthalten keine vorkonfigurierten Conda-Paket-Channels (z. B. defaults oder conda-forge) in .condarc (siehe Release-Hinweis vom 4. September 2026). Wenn Sie nicht präfixierte Paketnamen an dataproc:conda.packages übergeben oder conda install PACKAGE ohne Angabe eines Channels ausführen, schlägt der Vorgang mit CondaValueError: No channels available to install from oder PackagesNotFoundError fehl.

Wenn Sie Conda-Pakete installieren möchten, müssen Sie den Kanal explizit angeben:

  • Wenn Sie die Property dataproc:conda.packages verwenden, nutzen Sie das Format CHANNEL::PACKAGE==VERSION (z. B. dataproc:conda.packages=conda-forge::pip==24.0).
  • Wenn Sie conda install in der Befehlszeile ausführen, übergeben Sie das Flag -c (oder --channel), z. B. conda install PACKAGES -c conda-forge.

Beispiel:

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=2.3 \
    --region=${REGION} \
    --properties=^#^dataproc:conda.packages='conda-forge::pytorch==2.1.0,conda-forge::coverage==6.5.0'#dataproc:pip.packages='tokenizers==0.15.0,datasets==2.16.1'

Managed Service for Apache Spark-Imageversion 3.0

Python 3 ist auf Managed Service for Apache Spark-Clustern der Version 3.0 installiert. In Version 3.0-Images ist Pixi als Teil der Python-Installation installiert und wird anstelle von Conda zum Installieren von Python-Paketen verwendet.

Probleme beim Herunterladen von Paketen vermeiden

Managed Service for Apache Spark-Clusternodes laden Pakete aus externen öffentlichen Python-Repositories herunter, wenn benutzerdefinierte conda- und pip-Pakete installiert werden (siehe conda-bezogene Clustereigenschaften). Um Fehler beim Erstellen von Clustern aufgrund der Nichtverfügbarkeit öffentlicher Python-Repositories zu vermeiden, sollten Sie ein benutzerdefiniertes Image für Managed Service for Apache Spark erstellen oder die Abhängigkeiten in einen Cloud Storage-Bucket hochladen (siehe Abhängigkeiten mit Clustern mit nur interner IP-Adresse herunterladen).

Python-Interpreter für einen Job auswählen

Wenn mehrere Python-Interpreter auf Ihrem Cluster installiert sind, führt das System /etc/profile.d/effective-python.sh aus. Dadurch wird die Umgebungsvariable PYSPARK_PYTHON exportiert, um den Standard-Python-Interpreter für Ihre PySpark-Jobs auszuwählen. Wenn Sie für einen PySpark-Job einen nicht standardmäßigen Python-Interpreter benötigen, legen Sie beim Senden des Jobs an den Cluster die Attribute spark.pyspark.python und spark.pyspark.driver.python auf den erforderlichen Python-Pfad oder die erforderliche Python-Version fest (z. B. „/usr/bin/python3“ oder „python3.11“).

Beispiel:

REGION=region
gcloud dataproc jobs submit pyspark check_python_env.py \
    --cluster=my-cluster \
    --region=${REGION} \
    --properties="spark.pyspark.python=/usr/bin/python3,spark.pyspark.driver.python=/usr/bin/python3"

Python mit Sudo

Wenn Sie eine SSH-Verbindung zu einem Clusterknoten herstellen und sudo python --version ausführen, kann sich die angezeigte Python-Version von python --version unterscheiden. Dieser Versionsunterschied kann auftreten, weil sudo das Standardsystem Python /usr/bin/python verwendet und /etc/profile.d/effective-python.sh nicht ausführt, um die Python-Umgebung zu initialisieren. Wenn Sie sudo verwenden möchten, suchen Sie nach dem Python-Pfad, der in /etc/profile.d/effective-python.sh festgelegt ist. Führen Sie dann den Befehl env aus, um PATH auf diesen Python-Pfad festzulegen. Beispiel:

sudo env PATH=/opt/conda/default/bin:${PATH} python --version

Conda-bezogene Clusterattribute verwenden

Sie können die conda-Umgebung während der Clustererstellung mit Conda-bezogenen Clusterattributen anpassen.

Es gibt zwei gegenseitige exklusive Möglichkeiten, die Conda-Umgebung anzupassen, wenn Sie einen Managed Service for Apache Spark-Cluster erstellen:

  1. Verwenden Sie das Clusterattribut dataproc:conda.env.config.uri, um eine neue Conda-Umgebung im Cluster zu erstellen und zu aktivieren. oder

  2. Verwenden Sie die Clustereigenschaften dataproc:conda.packages und dataproc:pip.packages, um dem Cluster die Pakete conda bzw. pip in der Umgebung conda base hinzuzufügen.

Conda-bezogene Clusterattribute

  • dataproc:conda.env.config.uri:Der absolute Pfad zu einer YAML-Konfigurationsdatei für die Conda-Umgebung, die sich in Cloud Storage befindet. Mit dieser Datei wird eine neue conda-Umgebung im Cluster erstellt und aktiviert. Da Standard-Images keine vorkonfigurierten Conda-Channels enthalten, müssen Sie dafür sorgen, dass in Ihrer environment.yaml-Datei die erforderlichen Paket-Channels (z. B. conda-forge) unter channels explizit aufgeführt sind.

    Beispiel:

    1. Rufen Sie eine Conda-environment.yaml-Konfigurationsdatei ab oder erstellen Sie sie. Sie können die Datei manuell erstellen, eine vorhandene Datei verwenden oder eine vorhandene Conda-Umgebung mit dem folgenden Befehl in eine environment.yaml-Datei exportieren:

      conda env export --name=env-name > environment.yaml
      

    2. Kopieren Sie die Konfigurationsdatei in Ihren Cloud Storage-Bucket.

      gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
      

    3. Erstellen Sie den Cluster und verweisen Sie auf die Konfigurationsdatei der Umgebung in Cloud Storage.

      REGION=region
      gcloud dataproc clusters create cluster-name \
          --region=${REGION} \
          --properties='dataproc:conda.env.config.uri=gs://bucket-name/environment.yaml' \
          ... other flags ...
      

  • dataproc:conda.packages:Eine Liste von conda-Paketen mit bestimmten Channels und Versionen, die in der Basisumgebung installiert werden sollen, formatiert als CHANNEL::PACKAGE==VERSION (z. B. conda-forge::pkg1==v1,conda-forge::pkg2==v2...). Wenn conda Konflikte mit vorhandenen Paketen in der Basisumgebung nicht auflösen kann, werden die in Konflikt stehenden Pakete nicht installiert.

    Hinweise:

    • Da die standardmäßigen Managed Service for Apache Spark-Image-Versionen 2.1, 2.2 und 2.3 keine vorkonfigurierten Conda-Channels in .condarc enthalten, müssen Sie jedem Paketnamen den entsprechenden Channel voranstellen (z. B. conda-forge::). Wenn Sie Paketnamen ohne Präfix übergeben, schlägt der Vorgang mit CondaValueError: No channels available to install from oder PackagesNotFoundError fehl.

    • Die Clusterattribute dataproc:conda.packages und dataproc:pip.packages können nicht mit dem Clusterattribut dataproc:conda.env.config.uri verwendet werden.

    • Wenn Sie mehrere Pakete angeben (durch ein Komma getrennt), müssen Sie ein alternatives Trennzeichen angeben (siehe Clusterattribut Formatierung). Im folgenden Beispiel wird „#“ als Trennzeichen angegeben, um mehrere kommagetrennte Paketnamen an das Attribut dataproc:conda.packages zu übergeben.

    Beispiel:

    REGION=region
    gcloud dataproc clusters create cluster-name \
        --region=${REGION} \
        --properties='^#^dataproc:conda.packages=conda-forge::pytorch==2.1.0,conda-forge::coverage==6.5.0' \
        ... other flags ...
    

  • dataproc:pip.packages:Eine Liste von pip-Paketen mit bestimmten Versionen, die in der Basisumgebung installiert werden sollen, formatiert als pkg1==v1,pkg2==v2.... pip aktualisiert vorhandene Abhängigkeiten nur, wenn dies erforderlich ist. Konflikte können dazu führen, dass die Umgebung inkonsistent ist.

    Hinweise:

    • Die Clusterattribute dataproc:pip.packages und dataproc:conda.packages können nicht mit dem Clusterattribut dataproc:conda.env.config.uri verwendet werden.

    • Wenn Sie mehrere Pakete angeben (durch ein Komma getrennt), müssen Sie ein alternatives Trennzeichen angeben (siehe Clusterattribut Formatierung). Im folgenden Beispiel wird „#“ als Trennzeichen angegeben, um mehrere kommagetrennte Paketnamen an das Attribut dataproc:pip.packages zu übergeben.

    Beispiel:

    REGION=region
    gcloud dataproc clusters create cluster-name \
        --region=${REGION} \
        --properties='^#^dataproc:pip.packages=tokenizers==0.15.0,datasets==2.16.1' \
        ... other flags ...
    
  • Sie können sowohl dataproc:conda.packages als auch dataproc:pip.packages verwenden, wenn Sie einen Cluster erstellen.

    Beispiel:

    REGION=region
    gcloud dataproc clusters create cluster-name \
        --region=${REGION} \
        --image-version=2.3 \
        --properties=^#^dataproc:conda.packages='conda-forge::pytorch==2.1.0,conda-forge::coverage==6.5.0'#dataproc:pip.packages='tokenizers==0.15.0,datasets==2.16.1' \
        ... other flags ...