Configurar o ambiente Python

Os jobs do PySpark no Serviço Gerenciado para Apache Spark são executados por um interpretador do Python no cluster. O código do job precisa ser compatível no ambiente de execução com a versão e as dependências do interpretador do Python.

Verificar a versão e os módulos do intérprete

O programa de amostra check_python_env.py a seguir verifica o usuário do Linux que executa o job, o interpretador do Python e os módulos disponíveis.

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))

Execute o programa

REGION=region
gcloud dataproc jobs submit pyspark check_python_env.py \
    --cluster=my-cluster \
    --region=${REGION} \
    -- pandas scipy

Exemplo de saída

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))

Ambientes Python de imagem do Serviço Gerenciado para Apache Spark

As seções a seguir descrevem os ambientes Python para diferentes clusters de versão de imagem do Serviço Gerenciado para Apache Spark.

Versão de imagem 1.5 do Serviço Gerenciado para Apache Spark

O Miniconda3 está instalado em clusters do Serviço Gerenciado para Apache Spark 1.5. O interpretador padrão é o Python 3.7, localizado na instância de VM em /opt/conda/miniconda3/bin/python3.7, respectivamente. O Python 2.7 também está disponível em /usr/bin/python2.7.

É possível instalar pacotes conda e pip no ambiente base ou configurar seu próprio ambiente conda no cluster usando propriedades de cluster relacionadas ao conda.

Para usar o Python 2.7 como interpretador padrão nos clusters 1.5, não use o componente opcional Anaconda ao criar o cluster. Em vez disso, use a ação de inicialização conda para instalar o Miniconda2 e use propriedades de cluster relacionadas ao conda para instalar os pacotes conda e pip no ambiente base ou configure seu próprio ambiente conda no cluster.

Exemplo

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'

Versão 2.x da imagem do Serviço Gerenciado para Apache Spark

O conda está instalado em clusters do Serviço Gerenciado para Apache Spark 2.x. O interpretador padrão do Python3 está localizado na instância de VM em /opt/conda/default/bin. As páginas a seguir listam a versão do Python incluída nas versões de imagem do Serviço Gerenciado para Apache Spark:

O interpretador Python não padrão do SO está disponível em /usr/bin/.

É possível instalar pacotes conda e pip no ambiente base ou configurar seu próprio ambiente conda no cluster usando propriedades de cluster relacionadas ao conda.

Exemplo

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'

Observação:o Anaconda não está disponível para clusters do Serviço Gerenciado para Apache Spark 2.0.

Evitar problemas de download de pacotes

Os nós de cluster do Serviço Gerenciado para Apache Spark baixam pacotes de repositórios públicos externos do Python ao instalar pacotes personalizados conda e pip. Consulte propriedades do cluster relacionadas ao conda. Para evitar falhas na criação de clusters devido à indisponibilidade de repositórios públicos do Python, crie uma imagem personalizada do Serviço Gerenciado para Apache Spark ou faça upload das dependências para um bucket do Cloud Storage. Consulte Fazer o download de dependências com clusters somente de IP interno.

Escolher um intérprete do Python para um job

Se vários interpretadores do Python estiverem instalados no cluster, o sistema executará /etc/profile.d/effective-python.sh, que exporta a variável de ambiente PYSPARK_PYTHON para escolher o interpretador padrão do Python para os jobs do PySpark. Se você precisar de um interpretador Python não padrão para um job PySpark, ao enviar o job para o cluster, defina as propriedades spark.pyspark.python e spark.pyspark.driver.python com o número de versão necessário do Python (por exemplo, "python2.7" ou "python3.6").

Exemplo

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 com sudo

Se você se conectar a um nó de cluster que tenha o Miniconda ou o Anaconda instalado usando SSH, quando você executar sudo python --version, a versão do Python exibida poderá ser diferente da versão exibida pelo python --version. Essa diferença de versão pode ocorrer porque o sudo usa o sistema Python padrão /usr/bin/python e não executa /etc/profile.d/effective-python.sh para inicializar o ambiente Python. Para uma experiência consistente ao usar sudo, localize o caminho do Python definido em /etc/profile.d/effective-python.sh e execute o comando env para definir o PATH como esse caminho do Python. Veja um exemplo de cluster 1.5:

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

É possível personalizar o ambiente conda durante a criação do cluster usando as propriedades de cluster relacionadas ao conda.

Há duas maneiras mutuamente excludentes de personalizar o ambiente conda ao criar um cluster do Serviço Gerenciado para Apache Spark:

  1. Use a propriedade de cluster dataproc:conda.env.config.uri para criar e ativar um novo ambiente conda no cluster. ou

  2. Use as propriedades de cluster dataproc:conda.packages e dataproc:pip.packages para adicionar pacotes conda e pip, respectivamente, ao ambiente conda base no cluster.

  • dataproc:conda.env.config.uri:o caminho absoluto para um arquivo de configuração YAML do ambiente Conda, localizado no Cloud Storage. Esse arquivo será usado para criar e ativar um novo ambiente conda no cluster.

    Exemplo:

    1. Receba ou crie um arquivo de configuração environment.yaml do conda. É possível criar manualmente o arquivo, usar um arquivo atual ou exportar um ambiente conda para um arquivo environment.yaml usando o seguinte comando:

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

    2. Copie o arquivo de configuração para o bucket do Cloud Storage.

      gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
      

    3. Crie o cluster e aponte para o arquivo de configuração do ambiente no 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:uma lista de pacotes conda com versões específicas a serem instaladas no ambiente de base, formatadas como pkg1==v1,pkg2==v2.... Se o conda não resolver conflitos com pacotes atuais no ambiente base, os pacotes conflitantes não serão instalados.

    Observações:

    • As propriedades de cluster dataproc:conda.packages e dataproc:pip.packages não podem ser usadas com a propriedade de cluster dataproc:conda.env.config.uri.

    • Ao especificar vários pacotes (separados por vírgula), você precisa especificar um caractere delimitador alternativo. Veja a propriedade Formatação do cluster. O exemplo a seguir especifica "#" como o caractere delimitador para transmitir vários nomes de pacotes separados por vírgulas para a propriedade dataproc:conda.packages.

    Exemplo:

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:uma lista de pacotes pip com versões específicas a serem instaladas no ambiente de base, formatadas como pkg1==v1,pkg2==v2.... `pip will upgrade existing dependencies only if required. Os conflitos podem tornar o ambiente inconsistente.

    Observações:

    • As propriedades de cluster dataproc:pip.packages e dataproc:conda.packages não podem ser usadas com a propriedade de cluster dataproc:conda.env.config.uri.

    • Ao especificar vários pacotes (separados por vírgula), você precisa especificar um caractere delimitador alternativo. Veja a propriedade Formatação do cluster. O exemplo a seguir especifica "#" como o caractere delimitador para transmitir vários nomes de pacotes separados por vírgulas para a propriedade dataproc:pip.packages.

    Exemplo:

REGION=region
gcloud dataproc clusters create cluster-name \
    --region=${REGION} \
    --properties='^#^dataproc:pip.packages=tokenizers==0.10.1,datasets==1.4.1' \
    ... other flags ...
  • É possível usar dataproc:conda.packages e dataproc:pip.packages ao criar um cluster.

    Exemplo:

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 ...