Les tâches PySpark sur Dataproc sont exécutées par un interpréteur Python sur le cluster. Le code du job doit être compatible au moment de l'exécution avec la version de l'interpréteur Python et les 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.
Image Dataproc version 1.5
Miniconda3 est installé sur les clusters Dataproc 1.5.
L'interpréteur par défaut est Python 3.7, situé respectivement sur l'instance de VM sous /opt/conda/miniconda3/bin/python3.7
. Python 2.7 est également disponible à l'adresse /usr/bin/python2.7
.
Vous pouvez installer des 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 utiliser Python 2.7 comme interpréteur par défaut sur les clusters 1.5,
n'utilisez pas
Composant Anaconda facultatif
lors de la création du cluster. Utilisez plutôt la méthode
action d'initialisation conda
d'installer Miniconda2 et d'utiliser
propriétés de cluster liées à Conda
pour installer les packages conda
et pip
dans l'environnement base
ou configurer votre
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
Clusters Dataproc 2.x. L'interpréteur Python3 par défaut se trouve sur l'instance de VM sous /opt/conda/default/bin
. La liste des pages suivantes
la version de Python incluse dans les versions d'image Dataproc:
L'interpréteur Python non par défaut de l'OS 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 de
propriétés de cluster liées à Conda.
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
Utiliser les propriétés de cluster liées à Conda
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, deux méthodes mutuellement exclusives permettent de personnaliser l'environnement conda :
Utilisez la propriété de cluster
dataproc:conda.env.config.uri
pour créer et activer un nouvel environnement Conda sur le cluster. OuUtiliser les clusters
dataproc:conda.packages
etdataproc:pip.packages
des propriétés pour ajouter les packagesconda
etpip
, respectivement, aubase
conda
. sur le cluster.
Propriétés de cluster liées à Conda
dataproc:conda.env.config.uri
: chemin absolu vers un fichier de configuration YAML d'environnement Conda situé dans Cloud Storage. Ce fichier sera utilisé pour créer et activer un nouvel environnementconda
sur le cluster.Exemple :
Obtenez ou créez un fichier de configuration conda
environment.yaml
. Vous pouvez créer manuellement le fichier, utiliser un fichier existant ou exporter un environnement conda existant dans un fichierenvironment.yaml
comme indiqué ci-dessous.conda env export --name=env-name > environment.yaml
Copiez le fichier de configuration dans votre bucket Cloud Storage.
gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
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 desconda
packages avec des versions spécifiques à installer dans l'environnement de base, au format suivant :pkg1==v1,pkg2==v2...
Siconda
ne parvient pas à résoudre les conflits avec les packages existants dans l'environnement de base, les packages en conflit ne sont pas installés.Remarques :
Les propriétés de cluster
dataproc:conda.packages
etdataproc:pip.packages
ne peuvent pas être utilisées avec la propriété de clusterdataproc: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 de packagespip
avec des valeurs versions à installer dans l'environnement de base, au format suivant :pkg1==v1,pkg2==v2...
`pip ne met à niveau les dépendances existantes que si cela est 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
etdataproc:conda.packages
ne peuvent pas être utilisées avec la propriété de clusterdataproc: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
etdataproc: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 ...