Configura el entorno Python del clúster

Un intérprete de Python en el clúster ejecuta los trabajos de PySpark en Dataproc. El código de trabajo debe ser compatible en tiempo 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

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 imagen de Python en Dataproc

Versiones de imágenes 1.0, 1.1 y 1.2 de Dataproc

En los clústeres de versiones de imágenes 1.0, 1.1 y 1.2, el intérprete de Python predeterminado es Python 2.7, ubicado en la instancia de VM en /usr/bin/python2.7. Puedes instalar paquetes de Python a través de la acción de inicialización de pip (la especificación de las versiones del paquete, como se muestra en el siguiente ejemplo, es opcional, pero se recomienda).

Ejemplo

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.2 \
    --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 usar la acción de inicialización conda para instalar Miniconda con los paquetes Conda y PIP.

Ejemplo

Con el siguiente comando, se crea un clúster de Dataproc con la versión de la imagen 1.2 y, luego, se instala la versión más reciente de Miniconda3 con los paquetes Conda y PIP:

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.2 \
    --region=${REGION} \
    --metadata='MINICONDA_VARIANT=3' \
    --metadata='MINICONDA_VERSION=latest' \
    --metadata='CONDA_PACKAGES=scipy=1.0.0 tensorflow' \
    --metadata='PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/conda/bootstrap-conda.sh,gs://goog-dataproc-initialization-actions-${REGION}/conda/install-conda-env.sh

Versión 1.3 de la imagen de Dataproc.

En los clústeres de versiones de 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 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 Anaconda y usar la acción de inicialización de instalación de PIP para instalar paquetes Conda y PIP.

Ejemplo

Con el siguiente comando, se crea un clúster de versión de imagen 1.3 y, luego, se instalan los paquetes Anaconda2, Conda y PIP:

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

Cuando se instala el componente opcional Anaconda, el intérprete de Python predeterminado 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 de 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

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,gs://goog-dataproc-initialization-actions-${REGION}/conda/install-conda-env.sh

Versión 1.4+ de la imagen de Dataproc.

Miniconda3 está instalado en clústeres de Dataproc 1.4 o superiores. El intérprete de Python predeterminado 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 paquetes de Conda y PIP con la acción de inicialización de conda y la acción de inicialización de instalación de PIP.

Ejemplo

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

Para instalar Anaconda3 en lugar de Miniconda3, elige el componente opcional de Anaconda y, luego, instala los paquetes Conda y PIP con la acción de inicialización de conda y la acción de inicialización de PIP.

Ejemplo

REGION=region
gcloud beta dataproc clusters create my-cluster \
    --image-version=1.4 \
    --region=${REGION} \
    --optional-components=ANACONDA \
    --metadata='CONDA_PACKAGES=scipy=1.1.0 tensorflow' \
    --metadata='PIP_PACKAGES=pandas==0.23.0 scipy==1.1.0' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/python/conda-install.sh,gs://goog-dataproc-initialization-actions-${REGION}/python/pip-install.sh

Cuando instalas el componente opcional Anaconda3, se quita Miniconda3 del clúster, y /opt/conda/anaconda3/bin/python3.6 se convierte en el intérprete de Python predeterminado para trabajos de PySpark. No puedes cambiar la versión del intérprete de Python del componente opcional.

Para usar Python 2.7 como intérprete predeterminado en un clúster 1.4 o superior, no uses el componente opcional de Anaconda cuando crees el clúster. En su lugar, usa la acción de inicialización conda para instalar Minida2 y los paquetes Conda y PIP 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' \
    --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,gs://goog-dataproc-initialization-actions-${REGION}/conda/install-conda-env.sh

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

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 tenga instalado Miniconda o Anaconda, cuando ejecutes 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 predeterminado de Python /usr/bin/python y no ejecuta /etc/profile.d/effective-python.sh para inicializar el entorno de Python. Para una experiencia coherente cuando uses sudo, ubica la ruta de Python establecida en /etc/profile.d/effective-python.sh y, luego, ejecuta el comando env para configurar PATH en 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