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

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

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

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

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

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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам