Я установил кластер Spark. У него 4 узла, но когда я запускаю пример SparkPi в кластере, работает только один узел. Как мне это решить?
Почему задача spark выполняется на одном узле?
Ответы (1)
Возможно, вы запускаете пример в локальном режиме. То есть в примере кластер вообще не используется. В этом легко убедиться: остановите мастер Spark и посмотрите, работает ли еще пример.
http://spark.apache.org/docs/latest/submitting-applications.html описывает, как запустить пример.
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local \
/path/to/examples.jar \
100
Вам нужно заменить local
чем-то вроде spark://spark-master.example.com:7077
.
Другим объяснением может быть то, что по какой-то причине к мастеру подключился только один рабочий процесс. Или мастер по какой-то причине назначает приложению только ограниченные ресурсы. Вы можете проверить оба из них в главном пользовательском интерфейсе. (http://spark-master.example.com:8080/
)
Наконец, может случиться так, что ваши данные разбиты на слишком мало разделов, и все они извлекаются одной машиной. В приведенном выше примере 100
— это количество разделов. Если вы опустите его, по умолчанию будет 2
. Если у ваших воркеров 2 и более ядер, велика вероятность, что один из них подхватит оба раздела. Вы можете увидеть, так ли это, когда посмотрите на выполненные этапы в пользовательском интерфейсе приложения. (http://localhost:4040/stages
) Решение состоит в том, чтобы увеличить количество разделов.