Как запустить python3 в pysproc Google DataProc
Я хочу запустить задание pyspark через dataproc Google Cloud Platform, но не могу понять, как настроить pyspark для запуска python3 вместо 2.7 по умолчанию.
Лучшее, что я смог найти, это добавить эти команды инициализации
Однако, когда я ssh в кластере, то
(А) python
команда все еще python2,
(б) моя работа не выполняется из-за несовместимости с python 2.
Я пытался удалить Python2, а также псевдонимы alias python='python3'
в моем скрипте init.sh, но, увы, безуспешно. Псевдоним, кажется, не придерживается.
Я создаю кластер, как это
cluster_config = {
"projectId": self.project_id,
"clusterName": cluster_name,
"config": {
"gceClusterConfig": gce_cluster_config,
"masterConfig": master_config,
"workerConfig": worker_config,
"initializationActions": [
[{
"executableFile": executable_file_uri,
"executionTimeout": execution_timeout,
}]
],
}
}
credentials = GoogleCredentials.get_application_default()
api = build('dataproc', 'v1', credentials=credentials)
response = api.projects().regions().clusters().create(
projectId=self.project_id,
region=self.region, body=cluster_config
).execute()
мой executable_file_uri
это сидит в хранилище Google; init.sh
:
apt-get -y update
apt-get install -y python-dev
wget -O /root/get-pip.py https://bootstrap.pypa.io/get-pip.py
python /root/get-pip.py
apt-get install -y python-pip
pip install --upgrade pip
pip install --upgrade six
pip install --upgrade gcloud
pip install --upgrade requests
pip install numpy
4 ответа
Я нашел ответ на этот вопрос так, что мой скрипт инициализации теперь выглядит так:
#!/bin/bash
# Install tools
apt-get -y install python3 python-dev build-essential python3-pip
easy_install3 -U pip
# Install requirements
pip3 install --upgrade google-cloud==0.27.0
pip3 install --upgrade google-api-python-client==1.6.2
pip3 install --upgrade pytz==2013.7
# Setup python3 for Dataproc
echo "export PYSPARK_PYTHON=python3" | tee -a /etc/profile.d/spark_config.sh /etc/*bashrc /usr/lib/spark/conf/spark-env.sh
echo "export PYTHONHASHSEED=0" | tee -a /etc/profile.d/spark_config.sh /etc/*bashrc /usr/lib/spark/conf/spark-env.sh
echo "spark.executorEnv.PYTHONHASHSEED=0" >> /etc/spark/conf/spark-defaults.conf
Настройка среды Python кластера Dataproc объяснила это подробно. По сути, вам нужны действия инициализации до 1.4, так как 1.4 по умолчанию является Python3 от Miniconda3.
Вы также можете использовать действие инициализации Conda для настройки Python 3 и при необходимости установить пакеты pip/conda: https://github.com/GoogleCloudPlatform/dataproc-initialization-actions/tree/master/conda.
Что-то вроде:
gcloud dataproc clusters create foo --initialization-actions \
gs://dataproc-initialization-actions/conda/bootstrap-conda.sh,gs://dataproc-initialization-actions/conda/install-conda-env.sh
Есть несколько способов выбрать интерпретатор Python для pyspark.
1. Если вы хотите установить python3 по умолчанию, установите
export PYSPARK_PYTHON=python3
при создании кластера dataproc. Я добавил пару кодов в сценарии инициализации.
sudo echo "export PYSPARK_PYTHON=python3" | sudo tee -a /etc/profile.d/effective-python.sh
source /etc/profile.d/effective-python.sh
2. В противном случае также можно указать версию python через
--properties
для использования при отправке задания pyspark в кластер dataproc. Версия python может быть передана следующим образом:
--properties spark.pyspark.python=python3.7,spark.pyspark.driver=python3.7