I job PySpark su Dataproc sono eseguiti da un interprete Python sul cluster. Il codice del job deve essere compatibile in fase di runtime con la versione e le dipendenze dell'interprete Python.
Controllo della versione e dei moduli dell'interprete in corso
Il seguente programma di esempio check_python_env.py
verifica 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 immagine Dataproc
Immagine Dataproc versione 1.5
Miniconda3 è installato sui cluster Dataproc 1.5.
L'interprete predefinito è Python 3.7, che si trova rispettivamente sull'istanza VM in /opt/conda/miniconda3/bin/python3.7
. Python 2.7 è disponibile anche su /usr/bin/python2.7
.
Puoi installare pacchetti Conda e PIP nell'ambiente base
o configurare il tuo ambiente Conda sul cluster utilizzando le proprietà del cluster relative a Conda.
Per installare Anaconda3 anziché Miniconda3, scegli il componente facoltativo Anaconda e installa i pacchetti Conda e PIP nell'ambiente base
oppure configura il tuo ambiente Conda sul cluster utilizzando le proprietà del cluster relative a Conda.
Esempio
REGION=region gcloud beta dataproc clusters create my-cluster \ --image-version=1.5 \ --region=${REGION} \ --optional-components=ANACONDA \ --properties=^#^dataproc:conda.packages='pytorch==1.0.1,visions==0.7.1'#dataproc:pip.packages='tokenizers==0.10.1,datasets==1.5.0'
Quando installi il componente facoltativo Anaconda3, Miniconda3 viene rimosso dal cluster e /opt/conda/anaconda3/bin/python3.6
diventa l'interprete Python predefinito per i job PySpark. Non puoi cambiare la versione dell'interpreter Python del componente facoltativo.
Per utilizzare Python 2.7 come interprete predefinito su 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 relative a Conda per installare i pacchetti Conda e PIP nell'ambiente base
, oppure per configurare il tuo ambiente Conda nel 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.0 o successiva
Miniconda3 è installato sui cluster Dataproc 2.0 e versioni successive.
L'interprete Python3 predefinito si trova sull'istanza VM in /opt/conda/miniconda3/bin/
. Le pagine seguenti elencano la versione Python inclusa nelle versioni immagine Dataproc:
L'interprete Python non predefinito del sistema operativo è disponibile in /usr/bin/
.
Puoi installare pacchetti Conda e PIP nell'ambiente base
o configurare il tuo ambiente Conda sul cluster utilizzando le proprietà del cluster relative 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 sul cluster sono installati più interpreti Python, il sistema esegue /etc/profile.d/effective-python.sh
, in modo da esportare la variabile di ambiente PYSPARK_PYTHON
per scegliere l'interprete Python predefinito per i job PySpark. Se ti serve 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 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 cluster in cui sono installati Miniconda o Anaconda,
quando esegui sudo python --version
, la versione Python visualizzata può essere
diversa da quella mostrata da python --version
.
Questa differenza di versione può verificarsi perché sudo
utilizza il sistema predefinito Python
/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
Utilizzo delle proprietà dei cluster relative a Conda
Puoi personalizzare l'ambiente Conda durante la creazione del cluster utilizzando le proprietà cluster correlate a Conda.
Esistono due modi che si escludono a vicenda 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. oppureUtilizza le proprietà dei cluster
dataproc:conda.packages
edataproc:pip.packages
per aggiungere, rispettivamente, i pacchetti Conda e PIP all'ambiente Condabase
sul cluster.
Proprietà dei cluster correlate a Conda
dataproc:conda.env.config.uri
: il percorso assoluto a un file di configurazione YAML dell'ambiente Conda situato in Cloud Storage. Questo file verrà utilizzato per creare e attivare un nuovo ambiente Conda nel cluster.Esempio:
Ottieni o crea un file di configurazione
environment.yaml
Conda. 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.
gsutil 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 di pacchetti Conda con versioni specifiche da installare nell'ambiente di base, con il formatopkg1==v1,pkg2==v2...
. Se Conda non riesce a risolvere i conflitti con i pacchetti esistenti nell'ambiente di base, i pacchetti in conflitto non verranno installati.Note:
Le proprietà dei 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 di delimitazione alternativo (vedi la proprietà del cluster Formattazione). L'esempio seguente specifica "#" come carattere di delimitazione per passare più nomi di pacchetto 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 pacchetti pip con versioni specifiche da installare nell'ambiente di base, con il formatopkg1==v1,pkg2==v2...
. Pip eseguirà l'upgrade delle dipendenze esistenti solo se necessario. I conflitti possono causare un'incoerenza dell'ambiente.Note:
Le proprietà dei cluster
dataproc:pip.packages
edataproc:conda.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 di delimitazione alternativo (vedi la proprietà del cluster Formattazione). L'esempio seguente specifica "#" come carattere di delimitazione per passare più nomi di pacchetto 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
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 ...