PySpark-Jobs auf Managed Service for Apache Spark werden von einem Python-Interpreter auf dem Cluster ausgeführt. Der Jobcode muss zur Laufzeit mit der Version und Abhängigkeiten des Python-Interpreters kompatibel sein.
Interpreterversion 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))
Python-Umgebungen für Managed Service for Apache Spark-Images
In den folgenden Abschnitten werden die Python-Umgebungen für verschiedene Cluster mit Managed Service for Apache Spark-Imageversionen beschrieben.
Managed Service for Apache Spark-Imageversion 1.5
Miniconda3 ist auf Managed Service for Apache Spark-Clustern der Version 1.5 installiert.
Der Standard-Interpreter ist Python 3.7, der sich auf der VM-Instanz unter /opt/conda/miniconda3/bin/python3.7 befindet. Python 2.7 ist auch unter /usr/bin/python2.7 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.
Wenn Sie Python 2.7 als Standard-Interpreter in einem 1.5-Cluster verwenden möchten,
verwenden Sie beim Erstellen des Clusters nicht die
optionale Anaconda-Komponente. Verwenden Sie stattdessen die
Initialisierungsaktion conda
um Miniconda2 zu installieren, und
conda-bezogene Clusterattribute
um conda und pip Pakete in der base Umgebung zu installieren oder Ihre
eigene conda Umgebung auf dem Cluster einzurichten.
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'
Managed Service for Apache Spark-Imageversion 2.x
conda ist auf
Managed Service for Apache Spark-Clustern der Version 2.x installiert. Der Standard-Python3-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 Managed Service for Apache Spark-Imageversionen 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.
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 Managed Service for Apache Spark-Cluster der Version 2.0 nicht verfügbar.
Probleme beim Herunterladen von Paketen vermeiden
Managed Service for Apache Spark-Clusterknoten laden Pakete aus externen öffentlichen
Python-Repositories herunter, wenn benutzerdefinierte conda und pip Pakete installiert werden (siehe
conda-bezogene Clusterattribute).
Um Fehler bei der Clustererstellung aufgrund der Nichtverfügbarkeit öffentlicher
Python-Repositories zu vermeiden, können Sie ein benutzerdefiniertes Managed Service for Apache Spark-Image erstellen
oder die Abhängigkeiten in einen Cloud Storage-Bucket hochladen (siehe
Abhängigkeiten mit Clustern herunterladen, die nur interne IP-Adressen verwenden).
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 unterscheiden.
python --version
Dieser Versionsunterschied kann auftreten, weil sudo das Standardsystem Python /usr/bin/python verwendet und nicht /etc/profile.d/effective-python.sh 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 ist ein Beispiel für einen Cluster mit 1.5:
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 Cluster attribute
dataproc:conda.packagesunddataproc:pip.packages, um dercondabaseUmgebung auf dem ClustercondaundpipPakete 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. Anhand dieser Datei wird eine neueconda-Umgebung erstellt und aktiviert.Beispiel :
Rufen Sie eine conda-Konfigurationsdatei
environment.yamlab oder erstellen Sie sie. Sie können die Dateimanuell erstellen, eine vorhandene Datei verwenden oder eine vorhandene conda-Umgebung) mit dem folgenden Befehl in eineenvironment.yamlDatei 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 voncondaPaketen mit bestimmten Versionen, die in der Basisumgebung installiert werden sollen, formatiert alspkg1==v1,pkg2==v2.... Wenncondakeine Konflikte mit vorhandenen Paketen in der Basisumgebung lösen kann, werden die in Konflikt stehenden Pakete nicht installiert.Hinweise:
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 durch Kommas getrennte Paketnamen an das Attribut
dataproc:conda.packageszu ü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, im Formatpkg1==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.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 durch Kommas getrennte Paketnamen an das Attribut
dataproc:pip.packageszu ü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.packagesals auchdataproc:pip.packagesverwenden.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 ...