Spark-кластер, полный тайм-аутов сердечного ритма, исполнители, выходящие самостоятельно

В моем Apache Spark-кластере запущено приложение, которое дает мне много тайм-аутов исполнителя:

10:23:30,761 ERROR ~ Lost executor 5 on slave2.cluster: Executor heartbeat timed out after 177005 ms
10:23:30,806 ERROR ~ Lost executor 1 on slave4.cluster: Executor heartbeat timed out after 176991 ms
10:23:30,812 ERROR ~ Lost executor 4 on slave6.cluster: Executor heartbeat timed out after 176981 ms
10:23:30,816 ERROR ~ Lost executor 6 on slave3.cluster: Executor heartbeat timed out after 176984 ms
10:23:30,820 ERROR ~ Lost executor 0 on slave5.cluster: Executor heartbeat timed out after 177004 ms
10:23:30,835 ERROR ~ Lost executor 3 on slave7.cluster: Executor heartbeat timed out after 176982 ms

Тем не менее, в моей конфигурации я могу подтвердить, что я успешно увеличил интервал между битами приемника: введите описание изображения здесь

Когда я посещаю журналы исполнителей, отмеченных как EXITED (т.е. драйвер удалил их, когда он не мог получить биение), кажется, что исполнители убили себя, потому что они не получили никаких заданий от драйвера:

16/05/16 10:11:26 ERROR TransportChannelHandler: Connection to /10.0.0.4:35328 has been quiet for 120000 ms while there are outstanding requests. Assuming connection is dead; please adjust spark.network.timeout if this is wrong.
16/05/16 10:11:26 ERROR CoarseGrainedExecutorBackend: Cannot register with driver: spark://[email protected]:35328

Как я могу отключить пульс и/или не дать исполнителям отключиться?

Ответы

Ответ 1

Ответ был довольно простым. В моем spark-defaults.conf я установил spark.network.timeout в более высокое значение. Интервал сердцебиения был несколько неуместен для проблемы (хотя настройка удобна).

При использовании spark-submit я также мог установить таймаут следующим образом:

$SPARK_HOME/bin/spark-submit --conf spark.network.timeout 10000000 --class myclass.neuralnet.TrainNetSpark --master spark://master.cluster:7077 --driver-memory 30G --executor-memory 14G --num-executors 7 --executor-cores 8 --conf spark.driver.maxResultSize=4g --conf spark.executor.heartbeatInterval=10000000 path/to/my.jar

Ответ 2

Отсутствие сердечных сокращений и исполнителей, убитых YARN, почти всегда связано с OOM. Вы должны проверять журналы на отдельных исполнителях (смотрите текст, "выходящий за пределы физической памяти" ). Если у вас много исполнителей, и найти громоздкое для проверки всех журналов вручную, я рекомендую отслеживать вашу работу в интерфейсе Spark при ее запуске. Как только задача выйдет из строя, она сообщит о причине в пользовательском интерфейсе, поэтому ее легко увидеть. Обратите внимание, что некоторые задачи сообщают об ошибке из-за отсутствия исполнителей, которые уже были убиты, поэтому убедитесь, что вы смотрите на причины для каждой из отдельных сбоев.

Обратите также внимание на то, что большинство проблем с OOM можно быстро решить, просто перераспределив ваши данные в соответствующих местах вашего кода (снова посмотрите на интерфейс Spark для подсказок о том, где может возникнуть необходимость в вызове repartition). В противном случае вы можете масштабировать свои компьютеры, чтобы удовлетворить потребность в памяти.