Un intérprete de Python en el clúster ejecuta los trabajos de PySpark en Dataproc. El código del trabajo debe ser compatible en el entorno de ejecución con las dependencias y la versión del intérprete de Python.
Cómo verificar la versión y los módulos del intérprete
El siguiente programa de ejemplo check_python_env.py
verifica que el usuario de Linux ejecute el trabajo, el intérprete de Python y los módulos 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))
Ejecuta el programa
REGION=region gcloud dataproc jobs submit pyspark check_python_env.py \ --cluster=my-cluster \ --region=${REGION} \ -- pandas scipy
Resultado de muestra
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))
Entornos de Python de imagen de Dataproc
En las siguientes secciones, se describen los entornos de Python para diferentes clústeres de versiones de imágenes de Dataproc.
Versión 1.5 de la imagen de Dataproc
Miniconda3 está instalado en los clústeres de Dataproc 1.5.
El intérprete predeterminado es Python 3.7, que se encuentra en la instancia de VM en /opt/conda/miniconda3/bin/python3.7
, respectivamente. Python 2.7 también está disponible en /usr/bin/python2.7
.
Puedes instalar los paquetes conda
y pip
en el entorno base
o configurar tu propio entorno conda
en el clúster mediante las propiedades de clúster relacionadas con conda.
Para instalar Anaconda3 en lugar de Miniconda3, elige el componente opcional de Anaconda y, luego, instala los paquetes conda
y pip
en el entorno de base
o configura tu propio entorno conda
en el clúster mediante las propiedades de clúster relacionadas con conda.
Ejemplo
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'
Cuando instalas el componente opcional de Anaconda3, Miniconda3 se quita del clúster y /opt/conda/anaconda3/bin/python3.6
se convierte en el intérprete de Python predeterminado para los trabajos de PySpark. No puedes cambiar la versión de intérprete de Python del componente opcional.
Para usar Python 2.7 como el intérprete predeterminado en los clústeres 1.5, no uses el componente opcional Anaconda cuando crees el clúster. En su lugar, usa la acción de inicialización conda para instalar Miniconda2 y las propiedades de clúster relacionadas con Conda a fin de instalar los paquetes conda
y pip
en el entorno base
o configurar tu propio entorno conda
en el clúster.
Ejemplo
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'
Versión 2.x de la imagen de Dataproc
conda está instalado en clústeres de Dataproc 2.x. El intérprete de Python3 predeterminado se encuentra en la instancia de VM, en /opt/conda/default/bin
. En las siguientes páginas, se muestra la versión de Python incluida en las versiones con imágenes de Dataproc:
El intérprete de Python no predeterminado del SO está disponible en /usr/bin/
.
Puedes instalar los paquetes conda
y pip
en el entorno base
o configurar tu propio entorno conda
en el clúster mediante las propiedades de clúster relacionadas con conda.
Ejemplo
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 no está disponible para los clústeres de Dataproc 2.0.
Elige un intérprete de Python para un trabajo
Si hay varios intérpretes de Python instalados en tu clúster, el sistema ejecuta /etc/profile.d/effective-python.sh
, que exporta la variable de entorno PYSPARK_PYTHON
a fin de elegir el intérprete de Python predeterminado para tus trabajos de PySpark. Si necesitas un intérprete de Python no predeterminado para un trabajo de PySpark, cuando envíes el trabajo a tu clúster, configura las propiedades spark.pyspark.python
y spark.pyspark.driver.python
con el número de versión de Python requerido (por ejemplo, “python2.7” o “python3.6”).
Ejemplo
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
Si estableces una conexión SSH a un nodo de clúster que tiene Miniconda o Anaconda instalados, cuando ejecutas sudo python --version
, la versión de Python que se muestra puede ser diferente de la versión que muestra python --version
.
Esta diferencia de versión puede ocurrir porque sudo
usa el sistema de Python predeterminado /usr/bin/python
y no ejecuta /etc/profile.d/effective-python.sh
para inicializar el entorno de Python.
Para obtener una experiencia coherente cuando uses sudo
, ubica la ruta de acceso de Python establecida en /etc/profile.d/effective-python.sh
y, luego, ejecuta el comando env
a fin de establecer PATH
en esta ruta de Python. A continuación, se muestra un ejemplo de clúster 1.5:
sudo env PATH=/opt/conda/default/bin:${PATH} python --version
Usa propiedades de clúster relacionadas con Conda
Puedes personalizar el entorno de conda
durante la creación del clúster con las propiedades del clúster relacionadas con conda.
Hay dos formas mutuamente excluyentes de personalizar el entorno conda cuando creas un clúster de Dataproc:
Usa la propiedad
dataproc:conda.env.config.uri
para crear y activar un entorno conda nuevo en el clúster.Usa las propiedades del clúster
dataproc:conda.packages
ydataproc:pip.packages
para agregar los paquetesconda
ypip
, respectivamente, al entornoconda
base
en el clúster.
Propiedades del clúster relacionadas con conda
dataproc:conda.env.config.uri
: Es la ruta de acceso absoluta a un archivo de configuración YAML del entorno conda ubicado en Cloud Storage. Este archivo se usará para crear y activar un entornoconda
nuevo en el clúster.Ejemplo:
Obtén o crea un archivo de configuración conda
environment.yaml
. Puedes crear el archivo de forma manual, usar uno existente o exportar un entorno conda existente) a un archivoenvironment.yaml
, como se muestra a continuación.conda env export --name=env-name > environment.yaml
Copia el archivo de configuración en tu bucket de Cloud Storage.
gsutil cp environment.yaml gs://bucket-name/environment.yaml
Crea el clúster y apunta el archivo de configuración de entorno en 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
: Es una lista de losconda
paquetes con versiones específicas que se instalarán en el entorno base, con el formatopkg1==v1,pkg2==v2...
. Siconda
no resuelve los conflictos con los paquetes existentes en el entorno base, estos no se instalarán.Notas:
Las propiedades del clúster
dataproc:conda.packages
ydataproc:pip.packages
no se pueden usar con la propiedad del clústerdataproc:conda.env.config.uri
.Cuando especificas varios paquetes (separados por una coma), debes especificar un carácter delimitador alternativo (consulta la propiedad de clúster Formato). En el siguiente ejemplo, se especifica “#” como carácter delimitador para pasar varios nombres de paquetes separados por comas a la propiedad
dataproc:conda.packages
.
Ejemplo:
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
: Es una lista de paquetespip
con versiones específicas que se instalarán en el entorno base, con el formatopkg1==v1,pkg2==v2...
. “pip actualizará las dependencias existentes solo si es necesario. Los conflictos pueden hacer que el entorno sea incoherente.Notas:
Las propiedades del clúster
dataproc:pip.packages
ydataproc:conda.packages
no se pueden usar con la propiedad del clústerdataproc:conda.env.config.uri
.Cuando especificas varios paquetes (separados por una coma), debes especificar un carácter delimitador alternativo (consulta la propiedad de clúster Formato). En el siguiente ejemplo, se especifica “#” como carácter delimitador para pasar varios nombres de paquetes separados por comas a la propiedad
dataproc:pip.packages
.
Ejemplo:
REGION=region gcloud dataproc clusters create cluster-name \ --region=${REGION} \ --properties='^#^dataproc:pip.packages=tokenizers==0.10.1,datasets==1.4.1' \ ... other flags ...
Puedes usar
dataproc:conda.packages
ydataproc:pip.packages
cuando creas un clúster.Ejemplo:
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 ...