Многосетевой искровой кластер

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

У меня есть 12 узлов в стойке с межстоечной сетью 100G infiniband с использованием ipoib и сетью управления 1G.

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

Все искровые узлы имеют файл hosts, указывающий на сеть infiniband, поскольку я хочу, чтобы они общались по этой сети. Мне пришлось установить SPARK_MASTER_HOST для главного узла на 0.0.0.0, чтобы иметь возможность подключаться к главному узлу с моей рабочей станции.

Теперь я могу создать SparkSession и выполнять операции, но он всегда зависает, и когда я смотрю журналы рабочих процессов, я вижу, что они получают ошибку «Нет маршрута к хосту». Кажется, что хотя маршрут по умолчанию на узле установлен в подсеть управления, он пытается подключиться обратно к клиенту, используя сеть infiniband. (Я должен отметить, что я могу пинговать свою рабочую станцию ​​со всех клиентов, поэтому я знаю, что сетевой маршрут в порядке. Также все брандмауэры в данный момент отключены)

В качестве примечания: из-за этой настройки веб-интерфейс мастера spark не работает очень хорошо, потому что все ссылки на рабочие процессы указывают на IP-адрес infiniband, поэтому он всегда терпит неудачу, но если вы просто измените IP-адрес вручную в адресная строка в нужную подсеть работает. Это тоже было бы неплохо исправить, но на самом деле это не так уж важно.

Я попытался просмотреть документацию по искрам, но на самом деле не нашел ничего полезного, я попытался поиграть с некоторыми сетевыми настройками, но мне не повезло. Мне трудно поверить, что spark не поддерживает частную сеть, но, возможно, это так.

Я ценю любую помощь или идеи, которые вы, ребята, можете мне дать.


person Pumices    schedule 17.09.2018    source источник


Ответы (1)


Раньше я постоянно сталкивался с этими проблемами (в том числе и в контексте InfiniBand) и не нашел правильного решения, а нашел лишь несколько обходных путей. Проблема в том, что Spark не позволяет клиентам‹->master и master‹->workers подключаться к разным сетям.

Обходной путь № 1: используйте режим кластера YARN. Ваше приложение будет работать в кластере YARN (который, как я полагаю, совпадает с вашим кластером Spark), таким образом, имея доступ к сети InfiniBand. В этом случае вам нужно будет убедиться, что задания могут быть отправлены в YARN через сеть управления. Затем YARN запустит процессы Spark, которые будут привязаны к сети InfiniBand.

Обходной путь № 2: прокси-сервер Другой вариант (который я не пробовал, но он должен работать) — настроить демон-прокси на главном узле Spark, который будет ретранслировать ваши сети управления‹->IB.

person Yuval Degani    schedule 17.09.2018
comment
Да, изначально я пытался избежать настройки кластера YARN, но похоже, что это, вероятно, лучший способ получить то, что я хочу. Спасибо за совет и подтверждение того, что Spark изначально не поддерживает то, что я хочу. - person Pumices; 18.09.2018