Os jobs do PySpark no Dataproc 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 Dataproc
As seções a seguir descrevem os ambientes Python para diferentes clusters de versões de imagem do Dataproc.
Versão de imagem do Dataproc 1.5
O Miniconda3 está instalado em clusters do Dataproc 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 as
propriedades de cluster relacionadas ao Conda.
Para usar o Python 2.7 como intérprete padrão em clusters 1.5,
não use o
componente opcional Anaconda
ao criar o cluster. Em vez disso, use a
ação de inicialização do conda
para instalar o Miniconda2 e as
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 de imagem do Dataproc 2.x
O conda está instalado em
clusters do Dataproc 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 Dataproc:
O interpretador do 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 as
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 Dataproc 2.0.
Como 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ê fizer SSH em um nó de cluster que tenha o Miniconda ou o Anaconda instalado, quando você executa sudo python --version
, a versão do Python exibida pode 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. Confira um exemplo de cluster 1.5:
sudo env PATH=/opt/conda/default/bin:${PATH} python --version
Usar propriedades de cluster relacionadas ao Conda
É possível personalizar o ambiente conda
durante a criação do cluster usando as propriedades de cluster relacionadas ao Conda.
Há duas maneiras mutuamente exclusivas de personalizar o ambiente da Conda ao criar um cluster do Dataproc:
Use a propriedade de cluster
dataproc:conda.env.config.uri
para criar e ativar um novo ambiente do Conda no cluster. ouUse as propriedades de cluster
dataproc:conda.packages
edataproc:pip.packages
para adicionar pacotesconda
epip
, respectivamente, ao ambienteconda
base
no cluster.
propriedades de cluster relacionadas ao Conda
dataproc:conda.env.config.uri
:o caminho absoluto para um arquivo de configuração YAML do ambiente Conda localizado no Cloud Storage. Esse arquivo é usado para criar e ativar um novo ambienteconda
no cluster.Exemplo:
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 arquivoenvironment.yaml
, conforme mostrado abaixo.conda env export --name=env-name > environment.yaml
Copie o arquivo de configuração para o bucket do Cloud Storage.
gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
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 pacotesconda
com versões específicas a serem instaladas no ambiente de base, formatadas comopkg1==v1,pkg2==v2...
. Se oconda
não resolver conflitos com pacotes atuais no ambiente de base, os pacotes em conflito não serão instalados.Observações:
As propriedades de cluster
dataproc:conda.packages
edataproc:pip.packages
não podem ser usadas com a propriedade de clusterdataproc: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 pacotespip
com versões específicas a serem instaladas no ambiente de base, formatadas comopkg1==v1,pkg2==v2...
. O pip atualiza as dependências atuais apenas se for necessário. Os conflitos podem tornar o ambiente inconsistente.Observações:
As propriedades de cluster
dataproc:pip.packages
edataproc:conda.packages
não podem ser usadas com a propriedade de clusterdataproc: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
edataproc: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 ...