Configurare l'ambiente Python di Dataproc

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 il tuo variabile di ambiente 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 a 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.

Esistono due modi che si escludono a vicenda per personalizzare l'ambiente conda quando crei un cluster Dataproc:

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

  2. Utilizza i cluster dataproc:conda.packages e dataproc:pip.packages per aggiungere rispettivamente i pacchetti conda e pip all'elemento conda base encoder-decoder sul cluster.

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

    Esempio:

    1. 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 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 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 condapacchetti con versioni specifiche da installare nell'ambiente di base, formattate come pkg1==v1,pkg2==v2.... Se conda non riesce a risolvere il problema è in conflitto con pacchetti esistenti nell'ambiente di base, i pacchetti non verranno installati.

    Note:

    • dataproc:conda.packages e dataproc:pip.packages le proprietà del cluster non possono essere utilizzate con dataproc: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 di pip pacchetti con specifiche da installare nell'ambiente di base, formattate come pkg1==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 cluster dataproc:conda.packages non può essere utilizzato con dataproc: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 sia dataproc: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 ...