I job PySpark su Dataproc vengono eseguiti da un interprete Python sul in un cluster Kubernetes. Il codice del job deve essere compatibile in fase di runtime con la versione dell'interprete Python e dipendenze.
Controllare la versione e i moduli dell'interprete
Il seguente programma di esempio check_python_env.py
controlla l'utente Linux in esecuzione
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 immagine Dataproc
Le seguenti sezioni descrivono gli ambienti Python per le diverse Cluster di versione immagine Dataproc.
Immagine Dataproc versione 1.5
Miniconda3 è installato sui cluster Dataproc 1.5.
L'interprete predefinito è Python 3.7, che si trova sull'istanza VM all'indirizzo
/opt/conda/miniconda3/bin/python3.7
, rispettivamente. Python 2.7 è anche
disponibile all'indirizzo /usr/bin/python2.7
.
Puoi installare pacchetti conda
e pip
nell'ambiente base
oppure
configurare il tuo ambiente conda
nel cluster utilizzando
proprietà dei cluster correlati a conda.
Per utilizzare Python 2.7 come interprete predefinito sui cluster 1.5,
non utilizzare
Componente facoltativo Anaconda
durante la creazione del cluster. Utilizza invece
azione di inizializzazione conda
per installare Miniconda2 e utilizzare
proprietà dei cluster correlati a conda
per installare i pacchetti conda
e pip
nell'ambiente base
o configurare il tuo
il proprio 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'
Immagine Dataproc versione 2.x
conda sia installato su
di Dataproc 2.x. L'interprete Python3 predefinito si trova
sull'istanza VM in /opt/conda/default/bin
. Le pagine seguenti elencano
la versione Python inclusa nelle versioni immagine di Dataproc:
L'interprete Python non predefinito del sistema operativo è disponibile in /usr/bin/
.
Puoi installare pacchetti conda
e pip
nell'ambiente base
oppure configurare
il proprio ambiente conda
sul cluster utilizzando
proprietà dei cluster correlati 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 Dataproc. 2.0.
Scelta di 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 PYSPARK_PYTHON
per scegliere l'interprete Python predefinito per i tuoi dati PySpark
di lavoro. Se hai bisogno di un interprete Python non predefinito per un job PySpark, quando
di inviare il job al cluster, impostare spark.pyspark.python
spark.pyspark.driver.python
al numero di versione 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 accedi tramite SSH a un nodo del cluster in cui è installato Miniconda o Anaconda,
quando esegui sudo python --version
, la versione Python visualizzata può essere
diversa da quella visualizzata da python --version
.
Questa differenza di versione può verificarsi perché sudo
utilizza il sistema Python 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
in questo percorso Python. Ecco un esempio di cluster 1.5:
sudo env PATH=/opt/conda/default/bin:${PATH} python --version
Usa le proprietà dei cluster correlati a conda
Puoi personalizzare l'ambiente conda
durante la creazione del cluster utilizzando le
proprietà del cluster.
Esistono due modi che si escludono a vicenda per personalizzare l'ambiente conda quando crei un cluster Dataproc:
Usa la proprietà del cluster
dataproc:conda.env.config.uri
per creare e attivare un nuovo ambiente conda sul cluster. oUtilizza i cluster
dataproc:conda.packages
edataproc:pip.packages
per aggiungere rispettivamente i pacchetticonda
epip
all'elementoconda
base
encoder-decoder sul cluster.
proprietà dei cluster correlati a conda
dataproc:conda.env.config.uri
: il percorso assoluto a un del file di configurazione YAML dell'ambiente conda situato in Cloud Storage. Questo file verrà utilizzato per creare e attivare un nuovo ambienteconda
nel cluster.Esempio:
Ottieni o crea un file di configurazione di conda
environment.yaml
. Puoi crea manualmente file, utilizzare un file esistente oppure 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 punta 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, formattate comepkg1==v1,pkg2==v2...
. Seconda
non riesce a risolvere il problema è in conflitto con pacchetti esistenti nell'ambiente di base, i pacchetti non verranno installati.Note:
dataproc:conda.packages
edataproc:pip.packages
le proprietà del cluster non possono essere utilizzate condataproc:conda.env.config.uri
.Quando specifichi più pacchetti (separati da una virgola), devi specificare un valore carattere delimitatore alternativo (vedi la proprietà del cluster Formattazione). L'esempio seguente specifica "#" come carattere di delimitazione per passare più nomi di pacchetti, separati da virgole, nel
dataproc:conda.packages
proprietà.
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 dipip
pacchetti con specifiche da installare nell'ambiente di base, formattate comepkg1==v1,pkg2==v2...
. "pip eseguirà l'upgrade delle dipendenze esistenti solo se obbligatorio. I conflitti possono causare un'incoerenza dell'ambiente.Note:
Le
dataproc:pip.packages
e Proprietà del clusterdataproc:conda.packages
non può essere utilizzato condataproc:conda.env.config.uri
.Quando specifichi più pacchetti (separati da una virgola), devi specificare un valore carattere delimitatore alternativo (vedi la proprietà del cluster Formattazione). L'esempio seguente specifica "#" come carattere di delimitazione per passare più nomi di pacchetti, separati da virgole, nel
dataproc:pip.packages
proprietà.
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
durante 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 ...