Spark yarn-клиентский режим за балансировщиком нагрузки, который удаляет неактивные TCP-соединения

#apache-spark #tcp #hadoop-yarn #rpc

#apache-spark #tcp #hadoop-yarn #rpc

Вопрос:

Я запускаю Spark на YARN в режиме клиента. Драйвер отделен от ApplicationMaster балансировщиком нагрузки, который уничтожает неактивные TCP-соединения через 5 минут. Это убивает даже активные задания YARN через 5 минут.

Это происходит потому, что ApplicationMaster открывает RPC-соединение с драйвером и отправляет сообщение RegisterClusterManager. После этого он отправляет сообщения по этому соединению только в том случае, если количество исполнителей увеличивается или уменьшается. Это может происходить не каждые пять минут. Через пять минут после последнего RPC-вызова балансировщик нагрузки отключает RPC-соединение из-за неактивности, и для RPC-соединения вызывается метод OnDisconnected, прерывающий работу YARN.

Это корпоративная среда, и у меня нет возможности изменить поведение балансировщика нагрузки в отношении удаления неактивных TCP-сеансов. Я могу работать с тайм-аутом заданий YARN после того, как они неактивны в течение 5 минут, но выполнение заданий не должно завершаться.

Я подозреваю, что правильным способом было бы использовать TCP keepalive на уровне операционной системы для соединений. Однако версия Spark, которую я использую, пока не предлагает эту функцию.

Есть ли какой-либо способ решить эту проблему без запуска моей собственной версии Spark, которая вручную реализует механизм keepalive или heartbeat в этом сеансе RPC?

Ответ №1:

Я смог обойти эту проблему, направив трафик мимо балансировщика нагрузки.