I job PySpark su Dataproc vengono eseguiti da un interprete Python sul cluster. Il codice del job deve essere compatibile al momento dell'esecuzione con la versione e le dipendenze dell'interprete Python.
Controllare la versione e i moduli dell'interprete
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))
Eseguire 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 Dataproc
Le seguenti sezioni descrivono gli ambienti Python per diversi cluster di versioni immagine di Dataproc.
Versione immagine Dataproc 1.5
Miniconda3 è installato sui cluster Dataproc 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 su /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 nei 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 le proprietà del cluster correlate a conda per installare i pacchetti conda
e pip
nell'ambiente base
o configura 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 immagine Dataproc 2.x
conda è installato sui cluster Dataproc 2.x. L'interprete Python3 predefinito si trova
sull'istanza VM in /opt/conda/default/bin
. Le seguenti pagine elencano la versione di Python inclusa nelle versioni immagine di Dataproc:
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 Dataproc 2.0.
Scegliere un interprete Python per un job
Se nel 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 esegui SSH su un nodo del cluster su cui sono installati Miniconda o Anaconda,
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 durante l'utilizzo di 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
Utilizzare le proprietà del cluster correlate a conda
Puoi personalizzare l'ambiente conda
durante la creazione del cluster utilizzando le proprietà del cluster relative a conda.
Esistono due modi mutuamente esclusivi per personalizzare l'ambiente conda quando crei un cluster Dataproc:
Utilizza la proprietà
dataproc:conda.env.config.uri
cluster per creare e attivare un nuovo ambiente conda sul cluster. oUtilizza le proprietà del cluster
dataproc:conda.packages
edataproc:pip.packages
per aggiungere rispettivamente i pacchetticonda
epip
all'ambienteconda
base
sul cluster.
Proprietà cluster correlate a conda
dataproc:conda.env.config.uri
: il percorso assoluto di un file di configurazione YAML dell'ambiente conda situato in Cloud Storage. Questo file verrà utilizzato per creare e attivare un nuovo ambienteconda
sul cluster.Esempio:
Recupera o crea un file di configurazione conda
environment.yaml
. Puoi creare manualmente il file, utilizzare un file esistente o esportare un ambiente conda esistente) in un fileenvironment.yaml
come mostrato di seguito.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 diconda
pacchetti con versioni specifiche da installare nell'ambiente di base, formattato comepkg1==v1,pkg2==v2...
. Seconda
non 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.packages
edataproc:pip.packages
non 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 la proprietà del cluster Formattazione). 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 pacchettipip
con versioni specifiche da installare nell'ambiente di base, formattato comepkg1==v1,pkg2==v2...
. `pip eseguirà l'upgrade delle dipendenze esistenti solo se necessario. I conflitti possono causare incoerenze nell'ambiente.Note:
Le proprietà cluster
dataproc:pip.packages
edataproc:conda.packages
non possono essere utilizzate con la proprietà clusterdataproc:conda.env.config.uri
.Quando specifichi più pacchetti (separati da una virgola), devi specificare un carattere delimitatore alternativo (vedi la proprietà del cluster Formattazione). 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.packages
siadataproc:pip.packages
quando crei 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 ...