PySpark-Jobs auf Dataproc werden von einem Python-Interpreter auf dem Cluster ausgeführt. Jobcode muss zur Laufzeit mit der Python-Interpreter-Version kompatibel sein und Abhängigkeiten.
Dolmetscherversion 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 sys import imp print('This job is running as "{}".'.format(getpass.getuser())) print(sys.executable, sys.version_info) for package in sys.argv[1:]: print(imp.find_module(package))
Programm starten
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". ('/usr/bin/python', sys.version_info(major=2, minor=7, micro=13, releaselevel='final', serial=0)) (None, '/usr/local/lib/python2.7/dist-packages/pandas', ('', '', 5)) (None, '/usr/local/lib/python2.7/dist-packages/scipy', ('', '', 5))
Dataproc-Image-Python-Umgebungen
In den folgenden Abschnitten werden die Python-Umgebungen Dataproc-Image-Versionscluster
Dataproc-Image-Version 1.5
Miniconda3 ist auf Dataproc 1.5-Clustern installiert.
Der Standard-Interpreter ist Python 3.7. Es befindet sich auf der VM-Instanz unter
/opt/conda/miniconda3/bin/python3.7
. Python 2.7 ist auch unter /usr/bin/python2.7
verfügbar.
Sie können die Pakete conda
und pip
in der Umgebung base
installieren oder
Richten Sie Ihre eigene conda
-Umgebung im Cluster ein mit
Conda-bezogene Clusterattribute.
Um Anaconda3 anstelle von Miniconda3 zu installieren, wählen Sie die
Optionale Anaconda-Komponente
und installieren Sie die Pakete conda
und pip
in der Umgebung base
oder richten Sie
conda
-Umgebung im Cluster mithilfe von
Conda-bezogene Clusterattribute
Beispiel
REGION=region gcloud beta dataproc clusters create my-cluster \ --image-version=1.5 \ --region=${REGION} \ --optional-components=ANACONDA \ --properties=^#^dataproc:conda.packages='pytorch==1.0.1,visions==0.7.1'#dataproc:pip.packages='tokenizers==0.10.1,datasets==1.5.0'
Wenn Sie die optionale Komponente Anaconda3 installieren, wird Miniconda3 aus dem Cluster entfernt und /opt/conda/anaconda3/bin/python3.6
zum Standard-Python-Interpreter für PySpark-Jobs. Sie können die Python-Interpreter-Version der optionalen Komponente nicht ändern.
Wenn Sie Python 2.7 als Standard-Interpreter für Cluster 1.5 verwenden möchten,
verwenden Sie nicht die
Optionale Anaconda-Komponente
beim Erstellen des Clusters. Verwenden Sie stattdessen die Methode
Conda-Initialisierungsaktion
um Miniconda2 zu installieren
Conda-bezogene Clusterattribute
um die Pakete conda
und pip
in der Umgebung base
zu installieren oder Ihr
eigene conda
-Umgebung im Cluster.
Beispiel
REGION=region gcloud dataproc clusters create my-cluster \ --image-version=1.5 \ --region=${REGION} \ --metadata='MINICONDA_VARIANT=2' \ --metadata='MINICONDA_VERSION=latest' \ --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/conda/bootstrap-conda.sh \ --properties=^#^dataproc:conda.packages='pytorch==1.0.1,visions==0.7.1'#dataproc:pip.packages='tokenizers==0.10.1,datasets==1.5.0'
Dataproc-Image-Version 2.x
conda ist installiert auf
Dataproc 2.x-Cluster Der standardmäßige Python3-Interpreter
auf der VM-Instanz unter /opt/conda/default/bin
. Auf den folgenden Seiten
Die in Dataproc-Image-Versionen enthaltene Python-Version:
Der nicht standardmäßige Python-Interpreter aus dem Betriebssystem ist unter /usr/bin/
verfügbar.
Sie können die Pakete conda
und pip
in der Umgebung base
installieren oder Ihr
eigene conda
-Umgebung im Cluster mithilfe von
Conda-bezogene Clusterattribute.
Beispiel
REGION=region gcloud dataproc clusters create my-cluster \ --image-version=2.0 \ --region=${REGION} \ --properties=^#^dataproc:conda.packages='pytorch==1.7.1,coverage==5.5'#dataproc:pip.packages='tokenizers==0.10.1,datasets==1.5.0'
Hinweis: Anaconda ist für Dataproc 2.0-Cluster nicht verfügbar.
Python-Interpreter für einen Job auswählen
Wenn in Ihrem Cluster mehrere Python-Interpreter installiert sind, führt das System /etc/profile.d/effective-python.sh
aus. Dabei 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 die erforderliche Python-Versionsnummer fest (zum Beispiel "python2.7" oder "python3.6").
Beispiel
REGION=region gcloud dataproc jobs submit pyspark check_python_env.py \ --cluster=my-cluster \ --region=${REGION} \ --properties="spark.pyspark.python=python2.7,spark.pyspark.driver.python=python2.7"
Python mit Sudo
Wenn Sie eine SSH-Verbindung zu einem Clusterknoten herstellen, auf dem Miniconda oder Anaconda installiert ist, 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. Hier ein Beispiel für einen 1,5-Cluster:
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 Einstellungen anpassen
Clusterattribute.
Es gibt zwei sich gegenseitig ausschließende Möglichkeiten, die Conda-Umgebung anzupassen, erstellen Sie einen Dataproc-Cluster:
Verwenden Sie zum Erstellen und Aktivieren das Clusterattribut
dataproc:conda.env.config.uri
eine neue Conda-Umgebung im Cluster erstellt. oderDie Cluster
dataproc:conda.packages
unddataproc:pip.packages
verwenden Propertiesconda
- bzw.pip
-Pakete zuconda
base
hinzufügen. Umgebung im Cluster.
Conda-bezogene Clusterattribute
dataproc:conda.env.config.uri
:Der absolute Pfad zu einem YAML-Konfigurationsdatei für die Conda-Umgebung in Cloud Storage. Diese Datei wird zum Erstellen und Aktivieren einer neuenconda
-Umgebung im Cluster verwendet.Beispiel:
Rufen Sie eine Conda-
environment.yaml
-Konfigurationsdatei ab oder erstellen Sie eine. Sie können manuelle Erstellung Datei Sie verwenden eine vorhandene Datei oder Vorhandene Conda-Umgebung exportieren) in eineenvironment.yaml
-Datei umwandeln, wie unten gezeigt.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 Versionen, die in der Basisumgebung installiert werden sollen, formatiert alspkg1==v1,pkg2==v2...
Wennconda
nicht aufgelöst werden kann mit vorhandenen Paketen in der Basisumgebung in Konflikt steht, werden nicht installiert.Hinweise:
Die Clusterattribute
dataproc:conda.packages
unddataproc:pip.packages
können nicht mit dem Clusterattributdataproc: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 durch Kommas getrennte Paketnamen an das Attribut
dataproc:conda.packages
zu übergeben.
Beispiel:
REGION=region gcloud dataproc clusters create cluster-name \ --region=${REGION} \ --properties='^#^dataproc:conda.packages=pytorch==1.7.1,coverage==5.5' \ ... other flags ...
dataproc:pip.packages
:Eine Liste vonpip
Paketen mit bestimmten Versionen, die in der Basisumgebung installiert werden sollen, formatiert alspkg1==v1,pkg2==v2...
„pip“ aktualisiert vorhandene Abhängigkeiten nur, wenn erforderlich. Konflikte können dazu führen, dass die Umgebung inkonsistent ist.Hinweise:
Die Clusterattribute
dataproc:pip.packages
unddataproc:conda.packages
können nicht mit dem Clusterattributdataproc: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 durch Kommas getrennte Paketnamen an das Attribut
dataproc:pip.packages
zu übergeben.
Example:
REGION=region gcloud dataproc clusters create cluster-name \ --region=${REGION} \ --properties='^#^dataproc:pip.packages=tokenizers==0.10.1,datasets==1.4.1' \ ... other flags ...
Sie können beim Erstellen eines Clusters sowohl
dataproc:conda.packages
als auchdataproc:pip.packages
verwenden.Example:
REGION=region gcloud dataproc clusters create cluster-name \ --region=${REGION} \ --image-version=1.5 \ --metadata='MINICONDA_VARIANT=2' \ --metadata='MINICONDA_VERSION=latest' \ --properties=^#^dataproc:conda.packages='pytorch==1.7.1,coverage==5.5'#dataproc:pip.packages='tokenizers==0.10.1,datasets==1.4.1' \ ... other flags ...