Я настроил небольшую среду Spark на двух машинах. Один запускает мастер и рабочий, а другой - только рабочий. Я могу использовать этот кластер с помощью Spark Shell, например:
spark-shell --master spark://mymaster.example.internal:7077
Я могу выполнять там вычисления, которые правильно распределяются по узлам, поэтому все работает нормально.
Однако у меня возникают проблемы при использовании сервера spark-job.
Первая попытка состояла в том, чтобы запустить контейнер Docker (с переменной среды SPARK_MASTER
, указывающей на правильный основной URL-адрес). Когда задание было запущено, работник, к которому оно было передано, пожаловался, что не может подключиться обратно к 172.18.x.y:nnnn
. Это было понятно, потому что это был внутренний IP-адрес контейнера Docker, в котором работал сервер заданий.
Итак, я снова запустил контейнер сервера заданий с --network host
, чтобы он подключился к хост-сети. Однако запуск задания снова привел к отказу в соединении, на этот раз с сообщением о невозможности подключения к 172.30.10.10:nnnn
. 172.30.10.10
— это IP-адрес хоста, на котором я хочу запустить сервер заданий, и он доступен как с рабочих, так и с главных узлов (экземпляры Spark также работают в контейнерах Docker, но они также подключены к сети хоста).
Копнув глубже, я попытался запустить контейнер Docker, в котором есть только JVM и Spark, запустил его также с --network host
и запустил задание Spark изнутри. Это сработало.
Что я могу упустить?