Configurer l'environnement Dataproc Python

Les tâches PySpark sur Dataproc sont exécutées par un interpréteur Python sur le cluster. Le code de job doit être compatible au moment de l'exécution avec la version de l'interpréteur Python et ses dépendances.

Vérifier la version et les modules de l'interpréteur

L'exemple de programme check_python_env.py suivant vérifie l'utilisateur Linux qui exécute la tâche, l'interpréteur Python et les modules disponibles.

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))

Exécutez le programme

REGION=region
gcloud dataproc jobs submit pyspark check_python_env.py \
    --cluster=my-cluster \
    --region=${REGION} \
    -- pandas scipy

Exemple de résultat

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))

Environnements Python d'image Dataproc

Les sections suivantes décrivent les environnements Python pour différents clusters de version d'image Dataproc.

Version d'image 1.5 de Dataproc

Miniconda3 est installé sur les clusters Dataproc 1.5. L'interpréteur par défaut est Python 3.7. Il se trouve respectivement sur l'instance de VM à l'emplacement /opt/conda/miniconda3/bin/python3.7. Python 2.7 est également disponible à l'adresse /usr/bin/python2.7.

Vous pouvez installer les packages conda et pip dans l'environnement base ou configurer votre propre environnement conda sur le cluster à l'aide des propriétés de cluster liées à Conda.

Pour installer Anaconda3 au lieu de Miniconda3, choisissez le composant facultatif Anaconda, puis installez les packages conda et pip dans l'environnement base, ou configurez votre propre environnement conda sur le cluster à l'aide des propriétés de cluster liées à Cona.

Exemple

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'

Lorsque vous installez le composant Anaconda3 facultatif, Miniconda3 est supprimé du cluster et /opt/conda/anaconda3/bin/python3.6 devient l'interpréteur Python par défaut des tâches PySpark. Vous ne pouvez pas modifier la version de l'interpréteur Python du composant facultatif.

Pour utiliser Python 2.7 comme interpréteur par défaut sur les clusters 1.5, n'utilisez pas le composant facultatif Anaconda lors de la création du cluster. Utilisez plutôt l'action d'initialisation de Conda pour installer Miniconda2, et utilisez les propriétés de cluster liées à Conda pour installer les packages conda et pip dans l'environnement base, ou configurez votre propre environnement conda sur le cluster.

Exemple

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'

Image Dataproc version 2.x

conda est installé sur les clusters Dataproc 2.x. L'interpréteur Python3 par défaut se trouve sur l'instance de VM sous /opt/conda/default/bin. Les pages suivantes répertorient la version Python incluse dans les versions d'image Dataproc:

L'interpréteur Python autre que celui par défaut du système d'exploitation est disponible sous /usr/bin/.

Vous pouvez installer les packages conda et pip dans l'environnement base ou configurer votre propre environnement conda sur le cluster à l'aide des propriétés de cluster liées à Cona.

Exemple

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'

Remarque : Anaconda n'est pas disponible pour les clusters Dataproc 2.0.

Choisir un interpréteur Python pour une tâche

Si plusieurs interpréteurs Python sont installés sur votre cluster, le système exécute /etc/profile.d/effective-python.sh, qui exporte la variable d'environnement PYSPARK_PYTHON afin de choisir l'interpréteur Python par défaut pour vos tâches PySpark. Si vous avez besoin d'un interpréteur Python autre que celui par défaut pour une tâche PySpark, définissez les propriétés spark.pyspark.python et spark.pyspark.driver.python sur le numéro de version Python requis (par exemple, "python2.7" ou "python3.6").

Exemple

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 avec sudo

Si vous vous connectez en SSH à un nœud de cluster sur lequel Miniconda ou Anaconda sont installés, lorsque vous exécutez sudo python --version, la version Python affichée peut différer de celle affichée par python --version. Cette différence de version peut se produire parce que sudo utilise le système Python par défaut /usr/bin/python, mais n'exécute pas /etc/profile.d/effective-python.sh pour initialiser l'environnement Python. Pour bénéficier d'une expérience cohérente lors de l'utilisation de sudo, recherchez le chemin d'accès Python défini dans /etc/profile.d/effective-python.sh, puis exécutez la commande env pour définir PATH sur ce chemin d'accès Python. Voici un exemple de cluster 1.5:

sudo env PATH=/opt/conda/default/bin:${PATH} python --version

Vous pouvez personnaliser l'environnement conda lors de la création du cluster à l'aide des propriétés de cluster liées à Conda.

Lorsque vous créez un cluster Dataproc, vous pouvez personnaliser l'environnement Conda de deux manières qui s'excluent mutuellement:

  1. Utilisez la propriété de cluster dataproc:conda.env.config.uri pour créer et activer un environnement Conda sur le cluster. ou

  2. Utilisez les propriétés de cluster dataproc:conda.packages et dataproc:pip.packages pour ajouter respectivement les packages conda et pip à l'environnement base conda sur le cluster.

  • dataproc:conda.env.config.uri:chemin d'accès absolu à un fichier de configuration YAML de l'environnement Conda situé dans Cloud Storage. Ce fichier sera utilisé pour créer et activer un environnement conda sur le cluster.

    Exemple :

    1. Obtenez ou créez un fichier de configuration environment.yaml Conda. Vous pouvez créer manuellement le fichier, utiliser un fichier existant ou exporter un environnement Conda existant) dans un fichier environment.yaml, comme indiqué ci-dessous.

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

    2. Copiez le fichier de configuration dans votre bucket Cloud Storage.

      gsutil cp environment.yaml gs://bucket-name/environment.yaml
      

    3. Créez le cluster et pointez vers le fichier de configuration de votre environnement dans 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:liste des packages conda avec des versions spécifiques à installer dans l'environnement de base, au format pkg1==v1,pkg2==v2.... Si conda ne parvient pas à résoudre les conflits avec les packages existants de l'environnement de base, les packages en conflit ne seront pas installés.

    Remarques :

    • Les propriétés de cluster dataproc:conda.packages et dataproc:pip.packages ne peuvent pas être utilisées avec la propriété de cluster dataproc:conda.env.config.uri.

    • Lorsque vous spécifiez plusieurs packages (séparés par une virgule), vous devez spécifier un autre caractère de délimitation (consultez la section Mise en forme de la propriété de cluster). L'exemple suivant spécifie "#" comme caractère de délimitation pour transmettre plusieurs noms de package séparés par une virgule à la propriété dataproc:conda.packages.

    Exemple :

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:liste des packages pip avec des versions spécifiques à installer dans l'environnement de base, au format pkg1==v1,pkg2==v2.... pip ne met à niveau les dépendances existantes que si nécessaire. Les conflits peuvent entraîner une incohérence au sein de l'environnement.

    Notes :

    • Les propriétés de cluster dataproc:pip.packages et dataproc:conda.packages ne peuvent pas être utilisées avec la propriété de cluster dataproc:conda.env.config.uri.

    • Lorsque vous spécifiez plusieurs packages (séparés par une virgule), vous devez spécifier un autre caractère de délimitation (consultez la section Mise en forme de la propriété de cluster). L'exemple suivant spécifie "#" comme caractère de délimitation pour transmettre plusieurs noms de package séparés par une virgule à la propriété dataproc:pip.packages.

    Exemple :

REGION=region
gcloud dataproc clusters create cluster-name \
    --region=${REGION} \
    --properties='^#^dataproc:pip.packages=tokenizers==0.10.1,datasets==1.4.1' \
    ... other flags ...
  • Vous pouvez utiliser dataproc:conda.packages et dataproc:pip.packages lors de la création d'un cluster.

    Exemple :

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 ...