As tarefas do PySpark no Dataproc são executadas por um intérprete Python no cluster. O código de tarefa tem de ser compatível no tempo de execução com a versão do interpretador Python e as dependências.
Verifique a versão e os módulos do intérprete
O seguinte programa de exemplo check_python_env.py
verifica o utilizador do Linux que executa a tarefa, o intérprete 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 imagens do Dataproc
As secções seguintes descrevem os ambientes Python para diferentes clusters de versão de imagem do Dataproc.
Versão 1.5 da imagem do Dataproc
O Miniconda3 está instalado em clusters do Dataproc 1.5.
O intérprete predefinido é o Python 3.7, que está localizado na instância de VM em
/opt/conda/miniconda3/bin/python3.7
, respetivamente. O Python 2.7 também está
disponível em /usr/bin/python2.7
.
Pode instalar pacotes conda
e pip
no ambiente base
ou
configurar o seu próprio ambiente conda
no cluster através das
propriedades do cluster relacionadas com o conda.
Para usar o Python 2.7 como o intérprete predefinido em clusters 1.5,
não use o
componente opcional Anaconda
ao criar o cluster. Em alternativa, use a
ação de inicialização do conda
para instalar o Miniconda2 e use as
propriedades do cluster relacionadas com o conda
para instalar os pacotes conda
e pip
no ambiente base
ou configurar o 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 Dataproc
O conda está instalado em clusters do Dataproc 2.x. O intérprete Python3 predefinido encontra-se na instância de VM em /opt/conda/default/bin
. As páginas seguintes listam a versão do Python incluída nas versões de imagens do Dataproc:
O intérprete Python não predefinido do SO está disponível em /usr/bin/
.
Pode instalar pacotes conda
e pip
no ambiente base
ou configurar o seu próprio ambiente conda
no cluster através de propriedades do cluster relacionadas com o 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'
Nota: o Anaconda não está disponível para clusters do Dataproc 2.0.
Escolha um intérprete Python para uma tarefa
Se tiver vários intérpretes Python instalados no cluster, o sistema executa /etc/profile.d/effective-python.sh
, que exporta a variável de ambiente PYSPARK_PYTHON
para escolher o intérprete Python predefinido para as tarefas do PySpark. Se precisar de um intérprete Python não predefinido para uma tarefa PySpark, quando
enviar a tarefa para o cluster, defina as propriedades spark.pyspark.python
e
spark.pyspark.driver.python
para o número da versão do Python necessário
(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 usar SSH para aceder a um nó do cluster com o Miniconda ou o Anaconda instalado, quando executar sudo python --version
, a versão do Python apresentada pode ser diferente da versão apresentada por python --version
.
Esta diferença de versão pode ocorrer porque o sudo
usa o Python do sistema predefinido/usr/bin/python
e não executa o comando /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, em seguida, execute o comando env
para definir o PATH
para este caminho do Python. Segue-se um exemplo de um cluster de 1,5:
sudo env PATH=/opt/conda/default/bin:${PATH} python --version
Use propriedades de cluster relacionadas com o conda
Pode personalizar o ambiente conda
durante a criação do cluster através de propriedades do cluster relacionadas com o conda.
Existem duas formas mutuamente exclusivas de personalizar o ambiente conda quando cria um cluster do Dataproc:
Use a propriedade
dataproc:conda.env.config.uri
cluster para criar e ativar um novo ambiente conda no cluster. ouUse as propriedades
dataproc:conda.packages
edataproc:pip.packages
do cluster para adicionar, respetivamente, pacotesconda
epip
ao ambienteconda
base
no cluster.
propriedades do cluster relacionadas com o conda
dataproc:conda.env.config.uri
: o caminho absoluto para um ficheiro de configuração YAML do ambiente conda localizado no Cloud Storage. Este ficheiro vai ser usado para criar e ativar um novo ambienteconda
no cluster.Exemplo:
Obtenha ou crie um ficheiro de configuração do conda
environment.yaml
. Pode criar manualmente o ficheiro, usar um ficheiro existente ou exportar um ambiente conda existente para um ficheiroenvironment.yaml
, conforme mostrado abaixo.conda env export --name=env-name > environment.yaml
Copie o ficheiro de configuração para o seu contentor do Cloud Storage.
gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
Crie o cluster e aponte para o ficheiro 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 deconda
pacotes com versões específicas a instalar no ambiente base, formatada comopkg1==v1,pkg2==v2...
. Seconda
não conseguir resolver os conflitos com os pacotes existentes no ambiente base, os pacotes em conflito não são instalados.Notas:
Não é possível usar as propriedades
dataproc:conda.packages
edataproc:pip.packages
de cluster com a propriedade de clusterdataproc:conda.env.config.uri
.Quando especificar vários pacotes (separados por uma vírgula), tem de especificar um carácter delimitador alternativo (consulte a propriedade do cluster Formatação). O exemplo seguinte especifica "#" como o caráter delimitador para transmitir vários nomes de pacotes separados por vírgulas à 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 instalar no ambiente base, formatada comopkg1==v1,pkg2==v2...
. `pip will upgrade existing dependencies only if required. Os conflitos podem fazer com que o ambiente seja inconsistente.Notas:
Não é possível usar as propriedades de cluster
dataproc:pip.packages
edataproc:conda.packages
com a propriedade de clusterdataproc:conda.env.config.uri
.Quando especificar vários pacotes (separados por uma vírgula), tem de especificar um carácter delimitador alternativo (consulte a propriedade do cluster Formatação). O exemplo seguinte especifica "#" como o caráter delimitador para transmitir vários nomes de pacotes separados por vírgulas à 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 ...
Pode usar
dataproc:conda.packages
edataproc:pip.packages
quando cria 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 ...