Назад | Перейти на главную страницу

как использовать несколько компьютеров как кластер?

У меня есть 7 компьютеров под управлением Gentoo Linux с четырехъядерными процессорами, и я хочу иметь возможность распределять выполнение программы на все эти машины. У меня есть несколько многопоточных программ, и я хотел использовать все 28 доступных процессоров в моем кластере вместо запуска 7 копий программы на каждом узле.

это похоже на идею distcc: У меня есть проект C / C ++, и если я скомпилирую исходники с distcc вместо того gcc, он распространит процесс компиляции на несколько компьютеров, и мне не нужно ничего менять даже в Makefile.

для кластера было бы лучше, если бы мне не пришлось ничего менять в исходном коде моей программы (хотя я думаю, что это невозможно). но при необходимости я могу изменить программу для использования внешнего API.

Есть несколько способов сделать это, но я сомневаюсь, что какой-либо из них позволит вам запустить код как есть.

Hadoop кажется хорошим вариантом для определенных типов рабочих нагрузок и широко используется и поддерживается Yahoo и другими.

Беовульф кластеры - это больше традиционный кластер. Если вы посмотрите на Страница Беовульфа в Википедии есть ссылки на альтернативы, а также на дистрибутивы Linux, которые ориентированы на кластеры, такие как Горные породы.

Судя по вашему вопросу, похоже, что вы хотите, чтобы все ваши машины волшебным образом объединились в один большой компьютер, на котором вы можете входить и запускать программы. Эта магия называется SSI (единый образ системы) и есть ряд пакетов кластеризации, которые это делают. Попробуйте любой из перечисленных на страница википедии.

Если вы хотите настроить традиционный кластер или сетку, вам просто понадобится менеджер заданий, например Крутящий момент или Grid Engine. ГОРНЫЕ ПОРОДЫ это быстрый способ начать работу с этим типом настройки.

Ответ на это очень конкретное приложение. 3dinfluence уже упоминал о возможности Hadoop, что отлично, если ваше приложение не работает с моделью выполнения Map-Reduce.

Если вы планируете распределить свою рабочую нагрузку на несколько узлов, но все же хотите иметь только один экземпляр вашего приложения в потоковой модели выполнения, вам необходимо обратиться к некоторой форме MPI.

MPI - это стандарт с общим интерфейсом, но существует несколько его реализаций, например OpenMPI и MPICH. По сути, вы разрабатываете свое приложение для создания нескольких копий, которые передают сообщения друг другу. Затем MPI абстрагируется от фактического метода связи. Вместо этого он предоставляет ряд примитивных функций, таких как отправка, получение и широковещательная передача, которые вы используете в дизайне своего приложения. Фактическая связь затем обрабатывается модулем в выбранном вами стеке MPI.

OpenMPI включает множество транспортов, включая разделяемую память, TCP / IP, InfiniBand, Myrinet Express и многие другие. Какие из них вы используете и как вы их настраиваете, снова сильно зависит от приложения.

Обычно ваши задачи MPI распределяются по узлам в кластере с использованием какой-либо системы пакетной очереди, такой как Крутящий момент или Sun Grid Engine. Они становятся более полезными, если вы разделяете свой кластер среди нескольких пользователей и вам нужно запланировать ресурсы кластера.

Я предлагаю вам проверить Проект Gentoo Cluster site и просмотрите некоторые из связанных ресурсов. Это поможет вам лучше понять, как работают приложения в кластерной среде, и поможет сузить круг вопросов, в которых вам требуется дополнительная помощь.

Вы можете проверить эту идею с помощью дистрибутива LiveCD, например Cluster Knoppix.