Как установить версию драйвера python в искровом режиме?
Я использую искру 1.4.0-rc2, поэтому я могу использовать python 3 с искрой. Если я добавлю export PYSPARK_PYTHON=python3
в мой .bashrc файл, я могу запустить искру интерактивно с python 3. Однако, если я хочу запустить автономную программу в локальном режиме, я получаю сообщение об ошибке:
Exception: Python in worker has different version 3.4 than that in driver 2.7, PySpark cannot run with different minor versions
Как я могу указать версию python для драйвера? Установка export PYSPARK_DRIVER_PYTHON=python3
не работает.
Ответы
Ответ 1
Вам нужно убедиться, что автономный проект, который вы запускаете, запускается с Python 3. Если вы отправляете свою автономную программу через spark-submit, тогда она должна работать нормально, но если вы запускаете ее с помощью python, убедитесь, что вы используете python3 для запуска ваше приложение.
Кроме того, убедитесь, что вы установили переменные env в ./conf/spark-env.sh
(если он не существует, вы можете использовать spark-env.sh.template
в качестве базы.)
Ответ 2
Установка PYSPARK_PYTHON=python3
и PYSPARK_DRIVER_PYTHON=python3
для python3 работает для меня. Я сделал это, используя экспорт в моем.bashrc. В конце концов, это переменные, которые я создаю:
export SPARK_HOME="$HOME/Downloads/spark-1.4.0-bin-hadoop2.4"
export IPYTHON=1
export PYSPARK_PYTHON=/usr/bin/python3
export PYSPARK_DRIVER_PYTHON=ipython3
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"
Я также следовал этому руководству, чтобы он работал из ноутбука Ipython3: http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/
Ответ 3
Помог в моем случае:
import os
os.environ["SPARK_HOME"] = "/usr/local/Cellar/apache-spark/1.5.1/"
os.environ["PYSPARK_PYTHON"]="/usr/local/bin/python3"
Ответ 4
Вы можете указать версию Python для драйвера, установив соответствующие переменные среды в файле ./conf/spark-env.sh
. Если он еще не существует, вы можете использовать предоставленный spark-env.sh.template
файл, который также включает в себя множество других переменных.
Вот простой пример файла spark-env.sh
для установки соответствующих переменных среды Python:
#!/usr/bin/env bash
# This file is sourced when running various Spark programs.
export PYSPARK_PYTHON=/usr/bin/python3
export PYSPARK_DRIVER_PYTHON=/usr/bin/ipython
В этом случае он устанавливает версию Python, используемую рабочими/исполнителями для Python3, и версию драйвера Python для iPython для более приятной оболочки, чтобы работать.
Если у вас еще нет файла spark-env.sh
и вам не нужно устанавливать какие-либо другие переменные, этот должен делать то, что вы хотите, считая, что пути к соответствующим бинарным файлам python верны (проверьте с помощью which
). У меня была аналогичная проблема, и это исправило это.
Ответ 5
Я просто столкнулся с той же проблемой, и это шаги, которые я выполняю, чтобы предоставить версию Python. Я хотел запустить мои задания PySpark с помощью Python 2.7 вместо 2.6.
-
Перейдите в папку, $SPARK_HOME
указывает $SPARK_HOME
(в моем случае это /home/cloudera/spark-2.1.0-bin-hadoop2.7/
)
-
В папке conf
есть файл с именем spark-env.sh
. Если у вас есть файл с именем spark-env.sh.template
вам нужно будет скопировать файл в новый файл с именем spark-env.sh
.
-
Отредактируйте файл и напишите следующие три строки
экспорт PYSPARK_PYTHON =/usr/local/bin/python2.7
экспорт PYSPARK_DRIVER_PYTHON =/usr/local/bin/python2.7
export SPARK_YARN_USER_ENV = "PYSPARK_PYTHON =/usr/local/bin/python2.7"
-
Сохраните его и запустите приложение снова :)
Таким образом, если вы загружаете новую автономную версию Spark, вы можете установить версию Python, к которой вы хотите запустить PySpark.
Ответ 6
Я запускал его в IPython (как описано в этой ссылке Jacek Wasilewski) и получал это исключение; Добавлен PYSPARK_PYTHON
в файл ядра IPython и используется jupyter notebook для запуска и начал работать.
vi ~/.ipython/kernels/pyspark/kernel.json
{
"display_name": "pySpark (Spark 1.4.0)",
"language": "python",
"argv": [
"/usr/bin/python2",
"-m",
"IPython.kernel",
"--profile=pyspark",
"-f",
"{connection_file}"
],
"env": {
"SPARK_HOME": "/usr/local/spark-1.6.1-bin-hadoop2.6/",
"PYTHONPATH": "/usr/local/spark-1.6.1-bin-hadoop2.6/python/:/usr/local/spark-1
.6.1-bin-hadoop2.6/python/lib/py4j-0.8.2.1-src.zip",
"PYTHONSTARTUP": "/usr/local/spark-1.6.1-bin-hadoop2.6/python/pyspark/shell.py
",
"PYSPARK_SUBMIT_ARGS": "--master spark://127.0.0.1:7077 pyspark-shell",
"PYSPARK_DRIVER_PYTHON":"ipython2",
"PYSPARK_PYTHON": "python2"
}
Ответ 7
Если вы используете Spark в более крупной организации и не можете обновить файл /spark-env.sh, экспорт переменных среды может не работать.
Вы можете добавить определенные параметры искры через параметр --conf
при отправке задания во время выполнения.
pyspark --master yarn --[other settings]\
--conf "spark.pyspark.python=/your/python/loc/bin/python"\
--conf "spark.pyspark.driver.python=/your/python/loc/bin/python"
Ответ 8
ошибка
"Исключение: у Python у рабочего есть другая версия 2.6, чем у драйвера 2.7, PySpark не может работать с разными второстепенными версиями".
Исправить (для среды Cloudera)
-
Редактировать этот файл: /opt/cloudera/parcels/cdh5.5.4.p0.9/lib/spark/conf/spark-env.sh
-
Добавьте следующие строки:
export PYSPARK_PYTHON=/usr/bin/python
export PYSPARK_DRIVER_PYTHON=python
Ответ 9
Я использую следующую среду
? python --version; ipython --version; jupyter --version
Python 3.5.2+
5.3.0
5.0.0
и следующие псевдонимы хорошо работают для меня
alias pyspark="PYSPARK_PYTHON=/usr/local/bin/python3 PYSPARK_DRIVER_PYTHON=ipython ~/spark-2.1.1-bin-hadoop2.7/bin/pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11"
alias pysparknotebook="PYSPARK_PYTHON=/usr/bin/python3 PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS='notebook' ~/spark-2.1.1-bin-hadoop2.7/bin/pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11"
В записной книжке я настроил среду следующим образом
from pyspark.context import SparkContext
sc = SparkContext.getOrCreate()
Ответ 10
Если вы хотите изменить версию python для текущей задачи, вы можете использовать следующую команду запуска pyspark:
PYSPARK_DRIVER_PYTHON=/home/user1/anaconda2/bin/python PYSPARK_PYTHON=/usr/local/anaconda2/bin/python pyspark --master ..
Ответ 11
Я столкнулся с тем же сообщением об ошибке, и я попробовал три способа, упомянутых выше. Я перечислил результаты в качестве дополнительной ссылки на другие.
- Изменить значение
PYTHON_SPARK
и PYTHON_DRIVER_SPARK
в spark-env.sh
не работает для меня.
- Измените значение внутри python script с помощью
os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5"
os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"
не работает для меня.
- Изменить значение в
~/.bashrc
работает как заклинание ~
Ответ 12
Выйдя на это сегодня на работе. Администратор счел разумным использовать жесткий код Python 2.7 как PYSPARK_PYTHON
и PYSPARK_DRIVER_PYTHON
в $SPARK_HOME/conf/spark-env.sh
. Излишне говорить, что это сломало все наши рабочие места, которые используют любые другие версии или среды python (что составляет> 90% наших рабочих мест). @PhillipStich правильно указывает, что у вас могут не всегда быть разрешения на запись для этого файла, как и в нашем случае. Хотя настройка конфигурации в вызове spark-submit
является опцией, другой альтернативой (при запуске в режиме пряжи/кластера) является установка SPARK_CONF_DIR
среды SPARK_CONF_DIR
для указания на другой сценарий конфигурации. Там вы можете установить PYSPARK_PYTHON и любые другие параметры, которые могут вам понадобиться. Шаблон можно найти в исходном коде spark-env.sh на github.
Ответ 13
У меня такая же проблема на автономной искре в окнах. Моя версия исправления выглядит так: у меня были настройки переменных среды, как показано ниже.
PYSPARK_SUBMIT_ARGS="pyspark-shell"
PYSPARK_DRIVER_PYTHON=jupyter
PYSPARK_DRIVER_PYTHON_OPTS='notebook' pyspark
С этим параметром я выполнил действие на pyspark и получил следующее исключение:
Python in worker has different version 3.6 than that in driver 3.5, PySpark cannot run with different minor versions.
Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.
Чтобы проверить, с какой версией python работает мой искровой рабочий, введите в командной строке cmd следующее.
python --version
Python 3.6.3
который показал мне Python 3.6.3. Так ясно, что мой искровой рабочий использует системный питон, который является v3.6.3.
Теперь, когда я установил свой искровой драйвер для запуска jupyter, установив PYSPARK_DRIVER_PYTHON=jupyter
поэтому мне нужно проверить версию python, используемую jupyter.
Чтобы сделать это, откройте Anaconda Prompt и нажмите
python --version
Python 3.5.X :: Anaconda, Inc.
Здесь получил jupyter python, используя v3.5.x. Вы можете проверить эту версию и в любом ноутбуке (Help-> О программе).
Теперь мне нужно обновить jupyter python до версии v3.6.6. Для этого откройте Anaconda Prompt и нажмите
Конда поиск python
Это даст вам список доступных версий python в Anaconda. Установите желаемый
conda install python = 3.6.3
Теперь у меня есть и установка Python той же версии 3.6.3. Искра не должна соответствовать, и это не произошло, когда я запускал Action on Spark-driver. Исключение ушло. Счастливое кодирование...