Configurar el entorno de Python de Dataproc

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 la versión y las dependencias del intérprete de Python.

Verifica 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 imágenes de Dataproc

Versión 1.3 de la imagen de Dataproc.

En los clústeres de versiones con imágenes 1.3, el intérprete de Python predeterminado es Python 2.7, instalado en la instancia de VM en /usr/bin/python2.7. Puedes instalar paquetes de Python con la acción de inicialización de instalación de PIP.

Ejemplo

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.3 \
    --region=${REGION} \
    --metadata='PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/python/pip-install.sh

Si necesitas un intérprete de Python diferente, puedes crear un clúster con el componente opcional de Anaconda y usar propiedades del clúster relacionadas con Conda{101. } para instalar paquetes de Conda y PIP en el entorno base o configurar tu propio entorno Conda en el clúster.

Ejemplo

El siguiente comando crea un clúster de la versión de imagen de 1.3 y, luego, instala los paquetes Anaconda2 y Conda y PIP:

REGION=region
gcloud beta dataproc clusters create my-cluster \
    --image-version=1.3 \
    --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 se instala el componente opcional de Anaconda, el intérprete predeterminado de Python para los trabajos de PySpark es /opt/conda/anaconda/bin/python2.7.

Para usar Python 3 como intérprete predeterminado en un clúster 1.3, no uses el componente opcional Anaconda cuando crees el clúster. En su lugar, usa la acción de inicialización de Conda para instalar Miniconda3 y los paquetes Conda y PIP en el clúster.

Ejemplo

wget https://storage.googleapis.com/compute-image-tools/release/linux/daisy
REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.3 \
    --region=${REGION} \
    --metadata='MINICONDA_VARIANT=3' \
    --metadata='MINICONDA_VERSION=latest' \
    --metadata='CONDA_PACKAGES=scipy=1.0.0 tensorflow=1.12.0' \
    --metadata='PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/conda/bootstrap-conda.sh

Versión 1.4 y 1.5 de la imagen de Dataproc

Miniconda3 se instala en los clústeres de Dataproc 1.4 y 1.5. El intérprete predeterminado de Python es Python 3.6 para Dataproc 1.4 y Python 3.7 para Dataproc 1.5, ubicado en la instancia de VM en /opt/conda/miniconda3/bin/python3.6 y /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 de Conda en el clúster mediante las propiedades del clúster relacionadas con Conda.

Para instalar Anaconda3 en lugar de Miniconda3, elige el componente opcional Anaconda y, luego, instala los paquetes Conda y PIP en el entorno base o configura tu propio entorno Conda. el clúster mediante las propiedades del clúster relacionadas con Conda.

Ejemplo

REGION=region
gcloud beta dataproc clusters create my-cluster \
    --image-version=1.4 \
    --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, se quita Miniconda3 del clúster y /opt/conda/anaconda3/bin/python3.6 se convierte en el intérprete predeterminado de Python para los trabajos de PySpark No puedes cambiar la versión del intérprete de Python del componente opcional.

Para usar Python 2.7 como el intérprete predeterminado en los clústeres 1.4 y 1.5, no uses el componente opcional Anaconda cuando crees el clúster. En su lugar, usa la acción de inicialización de Conda para instalar Miniconda2 y las propiedades del clúster relacionadas con Conda a fin de instalar los paquetes Conda y PIP. el entorno de base o configura tu propio entorno de Conda en el clúster.

Ejemplo

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.4 \
    --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.0 de la imagen de Dataproc

Miniconda3 está instalado en clústeres de Dataproc 2.0. El intérprete predeterminado de Python es Python 3.8, ubicado en la instancia de VM en /opt/conda/miniconda3/bin/python3.8. 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 de Conda en el clúster mediante las propiedades del 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 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 instalados Miniconda o Anaconda, cuando ejecutas sudo python --version, la versión de Python que se muestra puede ser diferente de la que muestra python --version. Esta diferencia de versión puede ocurrir porque sudo usa el sistema predeterminado Python /usr/bin/python y no ejecuta /etc/profile.d/effective-python.sh para inicializar el entorno de Python. Para obtener una experiencia coherente cuando usas 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 configurar PATH para esta ruta de Python. A continuación, se muestra un ejemplo de clúster 1.4:

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

Puedes personalizar el entorno de Conda durante la creación del clúster mediante las propiedades del clúster relacionadas con Conda.

Existen dos maneras mutuamente excluyentes de personalizar el entorno de Conda cuando creas un clúster de Dataproc:

  1. Usa la propiedad de clúster dataproc:conda.env.config.uri para crear y activar un entorno Conda nuevo en el clúster. o

  2. Usa las propiedades del clúster dataproc:conda.packages y dataproc:pip.packages para agregar paquetes Conda y PIP, respectivamente, al entorno base de Conda en el clúster.

  • dataproc:conda.env.config.uri: La ruta de acceso absoluta a un archivo de configuración YAML del entorno de Conda ubicado en Cloud Storage. Este archivo se usará para crear y activar un nuevo entorno de Conda en el clúster.

    Ejemplo:

    1. Obtener o crear un archivo de configuración environment.yaml de Conda. Puedes crear el archivo de forma manual, usar un archivo existente o exportar un entorno de Conda existente) a una environment.yaml como se muestra a continuación.

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

    2. Copia el archivo de configuración en tu bucket de Cloud Storage.

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

    3. Crea el clúster y apunta al archivo de configuración de tu 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: Una lista de paquetes Conda con versiones específicas para instalar en el entorno base, con el formato pkg1==v1,pkg2==v2... Si Conda no puede resolver conflictos con paquetes existentes en el entorno base, los paquetes en conflicto no se instalarán.

    Notas:

    • Las propiedades del clúster dataproc:conda.packages y dataproc:pip.packages no se pueden usar con la propiedad dataproc:conda.env.config.uri.

    • Cuando especificas varios paquetes (separados por una coma), debes especificar un carácter delimitador alternativo (consulta Formato de la propiedad de clúster). En el siguiente ejemplo, se especifica “#” como el 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: Una lista de paquetes pip con versiones específicas para instalar en el entorno base, con el formato pkg1==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 y dataproc:conda.packages no se pueden usar con la propiedad dataproc:conda.env.config.uri.

    • Cuando especificas varios paquetes (separados por una coma), debes especificar un carácter delimitador alternativo (consulta Formato de la propiedad de clúster). En el siguiente ejemplo, se especifica “#” como el 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 ...
  • Cuando creas un clúster, puedes usar dataproc:conda.packages y dataproc:pip.packages.

    Ejemplo:

REGION=region
gcloud dataproc clusters create cluster-name \
    --region=${REGION} \
    --properties='^#^dataproc:conda.packages=pytorch==1.7.1,coverage==5.5' \
    --properties='^#^dataproc:pip.packages=tokenizers==0.10.1,datasets==1.4.1' \
    ... other flags ...