Запуск SBT (Scala) на нескольких (кластерных) машинах одновременно


Поэтому я уже некоторое время играю с актерами Akka и написал некоторый код, который может распределять вычисления между несколькими машинами в кластере. Перед запуском "основного" кода мне нужно иметь ActorSystem, ожидающий на каждой машине, которую я буду развертывать, и я обычно делаю это с помощью скрипта Python, который SSH входит во все машины и запускает процесс, делая что-то вроде cd /into/the/proper/folder/, а затем sbt 'run-main ActorSystemCode'.

Я запускаю этот скрипт Python на одной из машин (назовем ее "машина X"), поэтому я вы увидите выходные данные SSH'ING на всех других машинах в моей машине X SSH сессии. Всякий раз, когда я запускаю сценарий, кажется, что все машины заново компилируют весь код, прежде чем фактически запустить его, заставляя меня сидеть там в течение нескольких минут, прежде чем сделать что-то полезное.

Мой вопрос таков:

  1. Зачем им вообще нужна повторная компиляция? Один и тот же JVM доступен на всех машинах, так что не следует ли запустить его сразу же?

  2. Как мне обойти это? проблема заставить каждую машину компилировать "свою собственную копию"?

2 2

2 ответа:

Sbt - это инструмент сборки, а не средство запуска приложений. Используйте sbt-assembly для сборки all in one jar и поместите jar на каждую машину и запустите ее с помощью команды scala или java.

Обычно кластер имеет один раздел, смонтированный на каждом узле (через NFS или samba). Вам просто нужно скопировать артефакт в этот раздел, и они будут доступны непосредственно в каждом узле. Если это не так, вы должны попросить вашего системного администратора установить его.

Затем вам нужно будет запустить приложение. Опять же, большинство кластеров приходят с MPI. Инструменты mpirun (или mpiexec) не ограничены реальными MPI-приложениями и запускают любой сценарий, который вы хотите, на нескольких узлах.