Configura l'ambiente Python di Dataproc

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

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:

  1. Utilizza la proprietàdataproc:conda.env.config.uri cluster per creare e attivare un nuovo ambiente conda sul cluster. o

  2. Utilizza le proprietà del cluster dataproc:conda.packages e dataproc:pip.packages per aggiungere rispettivamente i pacchetti conda e pip all'ambiente conda base sul cluster.

  • 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 ambiente conda sul cluster.

    Esempio:

    1. 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 file environment.yaml come mostrato di seguito.

      conda env export --name=env-name > environment.yaml
      

    2. Copia il file di configurazione nel bucket Cloud Storage.

      gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
      

    3. 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 di condapacchetti con versioni specifiche da installare nell'ambiente di base, formattato come pkg1==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à del cluster dataproc:conda.packages e dataproc:pip.packages non possono essere utilizzate con la proprietà del cluster dataproc: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 pacchetti pip con versioni specifiche da installare nell'ambiente di base, formattato come pkg1==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 e dataproc:conda.packages non possono essere utilizzate con la proprietà cluster dataproc: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 sia dataproc: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 ...