I job PySpark su Managed Service for Apache Spark vengono eseguiti da un interprete Python sul cluster. Il codice del job deve essere compatibile in fase di runtime con la versione dell'interprete Python e le dipendenze.
Controlla la versione dell'interprete e i moduli
Il seguente programma di esempio check_python_env.py controlla l'utente Linux che esegue il job, l'interprete Python e i moduli disponibili.
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))
Esegui il programma
REGION=region gcloud dataproc jobs submit pyspark check_python_env.py \ --cluster=my-cluster \ --region=${REGION} \ -- pandas scipy
Esempio di output
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))
Ambienti Python delle immagini di Managed Service for Apache Spark
Le sezioni seguenti descrivono gli ambienti Python per i cluster di diverse versioni delle immagini di Managed Service for Apache Spark.
Versione dell'immagine di Managed Service for Apache Spark 1.5
Miniconda3 è installato sui cluster Managed Service for Apache Spark 1.5.
L'interprete predefinito è Python 3.7, che si trova nell'istanza VM rispettivamente in /opt/conda/miniconda3/bin/python3.7. Python 2.7 è disponibile anche in /usr/bin/python2.7.
Puoi installare i pacchetti conda e pip nell'ambiente base o
configurare il tuo ambiente conda sul cluster utilizzando
le proprietà del cluster correlate a conda.
Per utilizzare Python 2.7 come interprete predefinito sui cluster 1.5,
non utilizzare il
componente facoltativo Anaconda
durante la creazione del cluster. Utilizza invece l'
azione di inizializzazione conda
per installare Miniconda2 e utilizza le
proprietà del cluster correlate a conda
per installare i pacchetti conda e pip nell'ambiente base o configurare il tuo
ambiente conda sul cluster.
Esempio
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'
Versione dell'immagine di Managed Service for Apache Spark 2.x
conda è installato sui
cluster Managed Service for Apache Spark 2.x. L'interprete Python3 predefinito si trova nell'istanza VM in /opt/conda/default/bin. Le pagine seguenti elencano la versione di Python inclusa nelle versioni delle immagini di Managed Service for Apache Spark:
L'interprete Python non predefinito del sistema operativo è disponibile in /usr/bin/.
Puoi installare i pacchetti conda e pip nell'ambiente base o configurare il tuo
ambiente conda sul cluster utilizzando
le proprietà del cluster correlate a conda.
Esempio
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'
Nota: Anaconda non è disponibile per i cluster Managed Service for Apache Spark 2.0.
Evita problemi di download dei pacchetti
I nodi del cluster Managed Service for Apache Spark scaricano i pacchetti dai repository Python pubblici esterni quando installano pacchetti conda e pip personalizzati (vedi
Proprietà del cluster correlate a conda).
Per evitare errori di creazione del cluster dovuti alla mancata disponibilità dei repository Python pubblici, valuta la possibilità di creare un'immagine personalizzata di Managed Service for Apache Spark
o di caricare le dipendenze in un bucket Cloud Storage (vedi
Scaricare le dipendenze con i cluster solo con IP interni).
Scegli un interprete Python per un job
Se sul cluster sono installati più interpreti Python, il sistema esegue /etc/profile.d/effective-python.sh, che esporta la variabile di ambiente PYSPARK_PYTHON per scegliere l'interprete Python predefinito per i job PySpark. Se hai bisogno di un interprete Python non predefinito per un job PySpark, quando invii il job al cluster, imposta le proprietà spark.pyspark.python e spark.pyspark.driver.python sul numero di versione di Python richiesto (ad esempio "python2.7" o "python3.6").
Esempio
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 con sudo
Se ti connetti a un nodo del cluster su cui è installato Miniconda o Anaconda utilizzando SSH,
quando esegui sudo python --version, la versione di Python visualizzata può essere
diversa da quella visualizzata da python --version.
Questa differenza di versione può verificarsi perché sudo utilizza il Python di sistema predefinito /usr/bin/python e non esegue /etc/profile.d/effective-python.sh per inizializzare l'ambiente Python.
Per un'esperienza coerente quando utilizzi sudo, individua il percorso Python impostato in /etc/profile.d/effective-python.sh, quindi esegui il comando env per impostare PATH su questo percorso Python. Ecco un esempio di cluster 1.5:
sudo env PATH=/opt/conda/default/bin:${PATH} python --version
Utilizza le proprietà del cluster correlate a conda
Puoi personalizzare l'ambiente conda durante la creazione del cluster utilizzando le proprietà
del cluster correlate a conda.
Esistono due modi reciprocamente esclusivi per personalizzare l'ambiente conda quando crei un cluster Managed Service for Apache Spark:
Utilizza la proprietà del cluster
dataproc:conda.env.config.uriper creare e attivare un nuovo ambiente conda sul cluster. oppureUtilizza le proprietà del cluster
dataproc:conda.packagesedataproc:pip.packagesper aggiungere rispettivamente i pacchetticondaepipall'ambientecondabasesul cluster.
Proprietà del cluster correlate a conda
dataproc:conda.env.config.uri: il percorso assoluto di un file di configurazione YAML dell'ambiente conda che si trova in Cloud Storage. Questo file verrà utilizzato per creare e attivare un nuovo ambientecondasul cluster.Esempio:
Recupera o crea un file di configurazione
environment.yamldi conda. Puoi creare manualmente il file, utilizzare un file esistente o esportare un ambiente conda esistente) in un fileenvironment.yamlutilizzando il seguente comando:conda env export --name=env-name > environment.yaml
Copia il file di configurazione nel bucket Cloud Storage.
gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
Crea il cluster e fai riferimento al file di configurazione dell'ambiente 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: un elenco dicondapacchetti con versioni specifiche da installare nell'ambiente di base, nel formatopkg1==v1,pkg2==v2.... Secondanon riesce a risolvere i conflitti con i pacchetti esistenti nell'ambiente di base, i pacchetti in conflitto non verranno installati.Note:
Le proprietà del cluster
dataproc:conda.packagesedataproc:pip.packagesnon possono essere utilizzate con ladataproc:conda.env.config.uriproprietà del cluster.Quando specifichi più pacchetti (separati da una virgola), devi specificare un carattere delimitatore alternativo (vedi Formattazione delle proprietà del cluster ). L'esempio seguente specifica "#" come carattere delimitatore per passare più nomi di pacchetti separati da virgole alla proprietà
dataproc:conda.packages.
Esempio:
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: un elenco di pacchettipipcon versioni specifiche da installare nell'ambiente di base, nel formatopkg1==v1,pkg2==v2.... `pip esegue l'upgrade delle dipendenze esistenti solo se necessario. I conflitti possono rendere l'ambiente incoerente.Note:
Le proprietà del cluster
dataproc:pip.packagesedataproc:conda.packagesnon possono essere utilizzate con la proprietà del clusterdataproc:conda.env.config.uri.Quando specifichi più pacchetti (separati da una virgola), devi specificare un carattere delimitatore alternativo (vedi Formattazione delle proprietà del cluster ). L'esempio seguente specifica "#" come carattere delimitatore per passare più nomi di pacchetti separati da virgole alla proprietà
dataproc:pip.packages.
Esempio:
REGION=region gcloud dataproc clusters create cluster-name \ --region=${REGION} \ --properties='^#^dataproc:pip.packages=tokenizers==0.10.1,datasets==1.4.1' \ ... other flags ...
Puoi utilizzare sia
dataproc:conda.packagessiadataproc:pip.packagesdurante la creazione di un cluster.Esempio:
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 ...