Проблема при отправке заданий Pyspark из драйвера Windows в Ubuntu Spark Cluster - PullRequest
0 голосов
/ 28 мая 2019

У меня проблемы с отправкой задания Pyspark со своего компьютера с драйвером Windows (Win 10) на простой кластер Spark, работающий в Ubuntu.Уже есть несколько постов, которые пытаются ответить на этот вопрос, особенно этот от ThatDataGuy здесь , но ни один из них не помог.

Каждый раз, когда я пытаюсь представить простой пример wordcount.pyна мой удаленный мастер из окна Windows я получаю следующую ошибку:

Cannot run program 'C:\apps\Python\3.6.6\python.exe': error=2, No such file or directory

Это Java IOException, сгенерированный jar Py4J.Мой кластер Spark - это простая настройка Master, 1 Worker в настройке VirtualBox через Vagrant.Все машины (мой ноутбук с драйвером Spark и 2 виртуальные машины (Master / Worker) имеют идентичные Spark 2.4.2, Python 3.6.6 и Scala 12.8. Обратите внимание, что программы Scala, использующие spark-submit против удаленного кластера, работают нормально., а также все, что запускается в локальном режиме. Кроме того, примеры кода работают нормально при непосредственном запуске на узлах Master или Worker. Это только когда я пытаюсь использовать свой ноутбук с Windows в качестве драйвера Spark в Pyspark, противКластер Ubuntu Spark, в котором возникает эта проблема. Он всегда возвращает вышеуказанную ошибку.

Кажется, что Py4j пытается использовать или создать экземпляр Python из пути python моего драйвера Windows, который, конечно, мой кластер Linux не может увидетьЯ уже установил для пути Pyspark Python другое значение в узлах кластера. Я установил оба значения PYSPARK_PYTHON и PYSPARK_DRIVER_PYTHON в переменных среды узлов (через .bashrc), в spark-defaults.conf, ANDв файлах spark-env.sh. Все значения указывают на / usr / local / bin / python3, так как именно там Python 3.6.6 установлен на узле Master и Workeres.

Я также (просто как догадка) наложил псевдоним "python", чтобы он указывал на / usr / local / bin / python3 в узлах, а затем изменил мой ярлык на Python для Windows, чтобы вызвать ту же версию Python,Не повезло, но я хватался за соломинку.; / Ошибка просто изменилась на:

Cannot run program 'python': error=2, No such file or directory

Я видел статью, в которой библиотека Py4J 0.10.7 не поддерживает Python 3.7, поэтому я вынужден был перейти к Python 3.6.После этого ошибка осталась прежней.

Единственное, что я не сделал, это попытался настроить дополнительную общую / синхронизированную папку в Vagrant для моей установки Windows Python, а затем использовать / vagrant / shared / python/ что угодно в моих настройках удаленного PYSPARK.Не знаю, сработает ли это, хотя, учитывая, что я имею дело с версиями Python для Windows и Linux (все 3.6.6).Тьфу.: /

Есть идеи?У меня есть машина с Windows 10, и мне нравится заниматься разработкой на Python.У меня также есть 64 ГБ оперативной памяти, поэтому я хотел бы использовать его.Пожалуйста, не заставляй меня переключаться на Scala!;)

- Pyspark работает нормально на локальном

spark-submit C:\apps\Spark\spark-2.4.2\examples\src\main\python\wordcount.py C:\Users\sitex\Desktop\p_and_p_ch1.txt

- Pyspark завершается ошибкой при вызове мастера с IOException

spark-submit --master spark://XXX.XX.XXX.XXX:7077 C:\apps\Spark\spark-2.4.2\examples\src\main\python\wordcount.py C:\Users\sitex\Desktop\p_and_p_ch1.txt

ОБНОВЛЕНИЕ: Хорошо, так чтоПохоже, мой обходной путь - притвориться, что мой Драйвер (ноутбук с Windows) знает путь Python в Linux, который Worker должен использовать.К счастью для меня, я делаю это, поскольку вся эта установка выполняется на моем ноутбуке.Вот код, который помогает мне справиться с ошибкой:

spark-submit --conf spark.pyspark.driver.python=python --conf spark.pyspark.python=/usr/local/bin/python3 --master spark://172.28.128.150:7077 C:\apps\Spark\spark-2.4.2\examples\src\main\python\wordcount.py /vagrant/shared/p_and_p_ch1.txt

Теперь я должен добавить, что это НЕ запускает wordcount.py, поскольку я быстро понял, что мой кластер не может определитьПути в окне и моя попытка использовать синхронизированную / общую папку Vagrant приводит к тому, что файл не найден в файле p_and_p_ch1.txt.Но это помогает мне преодолеть мою ужасную ошибку.Я могу выяснить, как спрятать мои файлы в сетевой папке / S3 / et как-нибудь в другой день.

Это возлагает большую ответственность на Spark Driver, точно зная, какой путь Python должен использовать кластер.К счастью, я знаю эти настройки, так как установка полностью выполняется на моем ноутбуке, но разве не весь смысл в том, что я должен отправлять задания Spark в кластер без того, чтобы Драйвер (я) знал настройки, такие как путь Python рабочих узлов?Мне интересно, это просто причуды Windows + Linux?

...