Я думаю, что, возможно, наткнулся на ошибку и хотел узнать мнение других людей. Я запускаю приложение pyspark, используя Spark 2.2.0 в автономном режиме. Я делаю несколько тяжелые преобразования в python внутри flatMap, и драйвер продолжает убивать рабочих.
Вот что я вижу:
- Мастер после 60-х, не увидев ни одного сердцебиения от рабочих, распечатывает это сообщение в журнал:
Удаление работника [имя работника], потому что у нас не было сердцебиения в 60
секунд
Удаление работника [имя работника] на [IP]: [порт]
Рассказывает приложение
потерянный исполнитель: [номер исполнителя]
- Затем я вижу в журнале драйверов следующее сообщение:
Потерянный исполнитель [номер исполнителя] на [IP-адрес исполнителя]: работник потерян
- Затем рабочий останавливается, и я вижу это сообщение в его журнале:
Водитель приказал отключить
Я посмотрел исходный код Spark и, насколько я могу судить, пока исполнитель жив, он должен отправить сообщение пульса обратно, так как он использует ThreadUtils.newDaemonSingleThreadScheduledExecutor для этого.
Еще одна вещь, которую я заметил, когда работал на вершине на одном из рабочих, это то, что исполняющая JVM, кажется, приостановлена на протяжении всего этого процесса. Существует столько же процессов Python, сколько я указал в переменной env SPARK_WORKER_CORES, и каждый из них потребляет около 100% процессорного времени.
У кого-нибудь есть мысли по этому поводу?