I job PySpark su Dataproc vengono eseguiti da un interprete Python sul cluster. Il codice del job deve essere compatibile al runtime con la versione dell'interprete Python e le dipendenze.
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))
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 Dataproc
Le seguenti sezioni descrivono gli ambienti Python per diversi cluster di versioni di immagini 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 in
/opt/conda/miniconda3/bin/python3.7
. Python 2.7 è disponibile anche all'indirizzo /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 utilizza 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
nell'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.
Evitare problemi di download dei pacchetti
I nodi del cluster Dataproc scaricano i pacchetti da repository Python pubblici esterni durante l'installazione di pacchetti conda
e pip
personalizzati (vedi proprietà del cluster correlate a conda).
Per evitare errori di creazione del cluster dovuti alla mancata disponibilità di repository Python pubblici, valuta la possibilità di creare un'immagine personalizzata Dataproc o di caricare le dipendenze in un bucket Cloud Storage (vedi Scaricare le dipendenze con cluster solo con IP interno).
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 in 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 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 correlate a conda.
Esistono due modi reciprocamente esclusivi per personalizzare l'ambiente conda quando crei un cluster Dataproc:
Utilizza la proprietà del cluster
dataproc:conda.env.config.uri
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 che si trova 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
utilizzando 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 indica il 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 di pacchetticonda
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 Formatting). 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 will upgrade existing dependencies only if required. I conflitti possono causare l'incoerenza dell'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 Formatting). 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 ...