Почему я получаю «Удаление работника, потому что у нас нет сердцебиения за 60 секунд» на Spark Master - PullRequest
0 голосов
/ 12 мая 2018

Я думаю, что, возможно, наткнулся на ошибку и хотел узнать мнение других людей. Я запускаю приложение pyspark, используя Spark 2.2.0 в автономном режиме. Я делаю несколько тяжелые преобразования в python внутри flatMap, и драйвер продолжает убивать рабочих.

Вот что я вижу:

  1. Мастер после 60-х, не увидев ни одного сердцебиения от рабочих, распечатывает это сообщение в журнал:

Удаление работника [имя работника], потому что у нас не было сердцебиения в 60 секунд

Удаление работника [имя работника] на [IP]: [порт]

Рассказывает приложение потерянный исполнитель: [номер исполнителя]

  1. Затем я вижу в журнале драйверов следующее сообщение:

Потерянный исполнитель [номер исполнителя] на [IP-адрес исполнителя]: работник потерян

  1. Затем рабочий останавливается, и я вижу это сообщение в его журнале:

Водитель приказал отключить

Я посмотрел исходный код Spark и, насколько я могу судить, пока исполнитель жив, он должен отправить сообщение пульса обратно, так как он использует ThreadUtils.newDaemonSingleThreadScheduledExecutor для этого.

Еще одна вещь, которую я заметил, когда работал на вершине на одном из рабочих, это то, что исполняющая JVM, кажется, приостановлена ​​на протяжении всего этого процесса. Существует столько же процессов Python, сколько я указал в переменной env SPARK_WORKER_CORES, и каждый из них потребляет около 100% процессорного времени.

У кого-нибудь есть мысли по этому поводу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...