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.packagesverwenden, nutzen Sie das FormatCHANNEL::PACKAGE==VERSION(z. B.dataproc:conda.packages=conda-forge::pip==24.0). - Wenn Sie
conda installin 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:
Verwenden Sie das Clusterattribut
dataproc:conda.env.config.uri, um eine neue Conda-Umgebung im Cluster zu erstellen und zu aktivieren. oderVerwenden Sie die Clustereigenschaften
dataproc:conda.packagesunddataproc:pip.packages, um dem Cluster die Paketecondabzw.pipin der Umgebungcondabasehinzuzufü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 neueconda-Umgebung im Cluster erstellt und aktiviert. Da Standard-Images keine vorkonfigurierten Conda-Channels enthalten, müssen Sie dafür sorgen, dass in Ihrerenvironment.yaml-Datei die erforderlichen Paket-Channels (z. B.conda-forge) unterchannelsexplizit aufgeführt sind.Beispiel:
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 eineenvironment.yaml-Datei exportieren:conda env export --name=env-name > environment.yaml
Kopieren Sie die Konfigurationsdatei in Ihren Cloud Storage-Bucket.
gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
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 vonconda-Paketen mit bestimmten Channels und Versionen, die in der Basisumgebung installiert werden sollen, formatiert alsCHANNEL::PACKAGE==VERSION(z. B.conda-forge::pkg1==v1,conda-forge::pkg2==v2...). WenncondaKonflikte 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.2und2.3keine vorkonfigurierten Conda-Channels in.condarcenthalten, müssen Sie jedem Paketnamen den entsprechenden Channel voranstellen (z. B.conda-forge::). Wenn Sie Paketnamen ohne Präfix übergeben, schlägt der Vorgang mitCondaValueError: No channels available to install fromoderPackagesNotFoundErrorfehl.Die Clusterattribute
dataproc:conda.packagesunddataproc:pip.packageskönnen nicht mit dem Clusterattributdataproc:conda.env.config.uriverwendet 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.packageszu ü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 vonpip-Paketen mit bestimmten Versionen, die in der Basisumgebung installiert werden sollen, formatiert alspkg1==v1,pkg2==v2....pipaktualisiert vorhandene Abhängigkeiten nur, wenn dies erforderlich ist. Konflikte können dazu führen, dass die Umgebung inkonsistent ist.Hinweise:
Die Clusterattribute
dataproc:pip.packagesunddataproc:conda.packageskönnen nicht mit dem Clusterattributdataproc:conda.env.config.uriverwendet 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.packageszu ü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.packagesals auchdataproc:pip.packagesverwenden, 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 ...