Un intérprete de Python en el clúster ejecuta los trabajos de PySpark en Managed Service para Apache Spark. 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 la imagen de Managed Service para Apache Spark
En las siguientes secciones, se describen los entornos de Python para diferentes clústeres de versiones de imágenes de Managed Service para Apache Spark.
Versión 1.5 de la imagen de Managed Service para Apache Spark
Miniconda3 se instala en los clústeres de Managed Service para Apache Spark 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 paquetes de conda y pip en el entorno base o
configurar tu propio entorno de conda en el clúster mediante
las propiedades de clúster relacionadas con conda.
Para usar Python 2.7 como 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 de conda
para instalar Miniconda2 y usa
propiedades de clúster relacionadas con conda
para instalar 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 Managed Service para Apache Spark
conda se instala en los clústeres de
Managed Service para Apache Spark 2.x. El intérprete predeterminado de Python3 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 de imágenes de Managed Service para Apache Spark:
El intérprete de Python no predeterminado del SO está disponible en /usr/bin/.
Puedes instalar paquetes de conda y pip en el entorno base o configurar tu
propio entorno de 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 Managed Service para Apache Spark 2.0.
Evita problemas de descarga de paquetes
Los nodos del clúster de Managed Service para Apache Spark descargan paquetes de repositorios externos de
Python públicos cuando instalan paquetes conda y pip personalizados (consulta las
propiedades de clúster relacionadas con conda).
Para evitar fallas en la creación del clúster debido a la falta de disponibilidad de los repositorios públicos de
Python, considera crear una imagen personalizada de Managed Service para Apache Spark
o subir las dependencias a un bucket de Cloud Storage (consulta
Descarga dependencias con clústeres solo con IP interna).
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 te conectas a un nodo de clúster que tiene Miniconda o Anaconda instalados con SSH,
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. Este es un ejemplo de clúster 1.5:
sudo env PATH=/opt/conda/default/bin:${PATH} python --version
Usa propiedades del clúster relacionadas con conda
Puedes personalizar el entorno conda durante la creación del clúster mediante las propiedades del clúster relacionadas con conda
.
Hay dos formas mutuamente excluyentes de personalizar el entorno conda cuando creas un clúster de Managed Service para Apache Spark:
Usa la propiedad del clúster
dataproc:conda.env.config.uripara crear y activar un entorno de conda nuevo en el clúster. oUsa las propiedades del clúster
dataproc:conda.packagesydataproc:pip.packagespara agregar paquetescondaypip, respectivamente, al entornocondabaseen el clúster.
Propiedades del clúster relacionadas con conda
dataproc:conda.env.config.uri: La ruta de acceso absoluta al archivo de configuración YAML del entorno de conda ubicado en Cloud Storage. Este archivo se usará para crear y activar un entornocondanuevo en el clúster.Ejemplo:
Obtén o crea un archivo de configuración de conda
environment.yaml. Puedes crear el archivo, usar un archivo existente o exportar un entorno de conda existente) a un archivoenvironment.yamlcon el siguiente comando:conda env export --name=env-name > environment.yaml
Copia el archivo de configuración en tu bucket de Cloud Storage.
gcloud storage 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: Una lista decondapaquetes con versiones específicas que se instalarán en el entorno base, con el formatopkg1==v1,pkg2==v2.... Sicondano logra resolver los conflictos con los paquetes existentes en el entorno base, los paquetes en conflicto no se instalarán.Notas:
Las propiedades del clúster
dataproc:conda.packagesydataproc:pip.packagesno 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: Una lista de paquetes depipcon 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.packagesydataproc:conda.packagesno 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.packagesydataproc:pip.packagescuando 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 ...