Я хочу настроить Spark для запуска различных алгоритмов MLlib в кластере. Для моего первого теста я попытался запустить кластеризацию K-средних с набором данных сверхбольшого размера на двух машинах, используя простой автономный режим Spark. Но, похоже, что только одна из машин выполняет какую-либо работу, а другая остается без работы.
Вот как я все настроил: я скачал последнюю версию (spark-2.3.0-bin-hadoop2.7) и распаковал ее на обеих машинах. Затем я скопировал набор данных в папку data / mllib. Затем я скопировал файл conf / spark-env.sh.template в conf / spark-env.sh и добавил следующие строки:
SPARK_HOME=</path/to/spark-2.3.0-bin-hadoop2.7>
SPARK_LOCAL_IP=<machine 1 address>/<machine 2 address>
SPARK_MASTER_HOST=<machine 1 address>
Затем я запустил кластер, выполнив следующие команды на компьютере 1 (master) внутри каталога Spark:
./sbin/start-master.sh
./sbin/start-slave.sh spark://<machine 1 address>:7077
И следующая строка на раб:
./sbin/start-slave.sh spark://<machine 1 address>:7077
Затем я запустил оболочку на мастере:
./bin/spark-shell --master spark://<machine 1 address>:7077
Впоследствии WebGUI (http://:8081/) показывает мне, что оба рабочих живы и все их ядра (всего 80) используются. Затем я выполнил следующий сценарий внутри оболочки spark:
import org.apache.spark.ml.clustering.KMeans
val dataset = spark.read.format("libsvm").load("data/mllib/superhuge_dataset.txt")
val kmeans = new KMeans().setK(2000).setSeed(1L)
val model = kmeans.fit(dataset)
Но когда я наблюдаю, как обе машины используют top , в то время как вычисления выполняются, только машина 1 (мастер) показывает мне использование процессора. Один процесс Java использует почти 4800% (машина имеет 48 ядер), в то время как другая машина (32 ядра) вообще не показывает загрузку процессора.
Согласно WebGUI и master-log обе машины подключены к master. Когда я выключаю (работающее) ведомое устройство на компьютере 1 и снова запускаю сценарий, второе ведомое устройство все еще остается бездействующим, и на оболочке появляется следующее предупреждение: «Первоначальное задание не приняло никаких ресурсов; проверьте пользовательский интерфейс кластера, чтобы убедиться, что рабочие зарегистрированы и имеют достаточные ресурсы "
Но, согласно веб-сайту, у меня осталось много ресурсов на оставшегося работника. Я пропустил какой-либо шаг в настройке или сценарий, необходимый для распределения вычислений на обеих машинах? Есть ли какая-то проблема с подключением, например другой порт кроме 7077 мне нужно открыть? Заранее большое спасибо!