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
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 excludentes de personalizar o ambiente conda ao criar um cluster do Serviço Gerenciado para Apache Spark:
Use a propriedade de cluster
dataproc:conda.env.config.uripara criar e ativar um novo ambiente conda no cluster. ouUse as propriedades de cluster
dataproc:conda.packagesedataproc:pip.packagespara adicionar pacotescondaepip, respectivamente, ao ambientecondabaseno 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 será usado para criar e ativar um novo ambientecondano cluster.Exemplo:
Receba ou crie um arquivo de configuração
environment.yamldo conda. É possível criar manualmente o arquivo, usar um arquivo atual ou exportar um ambiente conda para um arquivoenvironment.yamlusando o seguinte comando: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 pacotescondacom versões específicas a serem instaladas no ambiente de base, formatadas comopkg1==v1,pkg2==v2.... Se ocondanã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.packagesedataproc:pip.packagesnã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 pacotespipcom versões específicas a serem instaladas no ambiente de base, formatadas comopkg1==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.packagesedataproc:conda.packagesnã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.packagesedataproc:pip.packagesao 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 ...