Я создал базовый c EMR кластер в AWS, и я пытаюсь использовать ноутбуки Jupyter, предоставляемые через консоль AWS. Кажется, что запуск ноутбуков работает нормально, и я также могу запускать базовый c python код в ноутбуках, запущенных с ядром pyspark
. В записной книжке установлены две переменные: spark
- это экземпляр SparkSession
, а sc
- это экземпляр SparkContext
. Отображение sc
выходов <SparkContext master=yarn appName=livy-session-0>
(результат, конечно, может незначительно отличаться в зависимости от сеанса).
Проблема возникает, когда я выполняю операции, которые на самом деле поражают искровое оборудование. Например:
sc.parallelize(list(range(10))).map(lambda x: x**2).collect()
Я не эксперт по искрам, но я считаю, что этот код должен распределять целые числа от 0 до 9 по кластеру, возводить их в квадрат и возвращать результаты в виде списка. Вместо этого я получаю длинную трассировку стека, в основном от JVM, но также и от некоторых python компонентов. Я считаю, что центральная часть трассировки стека выглядит следующим образом:
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 4.0 failed 4 times, most recent failure: Lost task 0.3 in stage 4.0 (TID 116, ip-XXXXXXXXXXXXX.eu-west-1.compute.internal, executor 17): java.lang.RuntimeException: Failed to run command: /usr/bin/virtualenv -p python3 --system-site-packages virtualenv_application_1586243436143_0002_0
Полная трассировка стека здесь .
Немного копания в AWS Портал привел меня к журналу вывода с узлов. стандартный вывод с одного из узлов включает в себя следующее:
The path python3 (from --python=python3) does not exist
Я попытался запустить команду /usr/bin/virtualenv
на главном узле вручную (после входа в систему), и это работало нормально, но ошибка, конечно, все еще присутствует после того, как я это сделал.
Хотя эта ошибка возникает большую часть времени, я смог заставить ее работать за один сеанс, где я мог выполнить несколько операций с искровым кластером, как Я ожидал.
Техническая информация о настройке кластера:
emr-6.0.0
- Установленные приложения: "Ganglia 3.7.2, Spark 2.4.4, Zeppelin" 0.9.0, Livy 0.6.0, JupyterHub 1.0.0, Hive 3.1.2 ". Если бы oop также было включено.
- 3 узла (один из них как мастер), все
r5a.2xlarge
.
Есть идеи, что я делаю неправильно? Обратите внимание, что я совершенно новичок в EMR и Spark.
Редактировать: добавлен журнал stdout и информация о ручном запуске команды virtualenv на главном узле через s sh.