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

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

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

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

4 ответа

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

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

Кластеры Беовульфа - больше традиционного кластера. Если вы посмотрите на страницу Beowulf Wikipedia, там есть ссылки на альтернативы, а также на дистрибутивы Linux, ориентированные на такие кластеры, как Rocks.

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

Если вы хотите настроить традиционный кластер или сетку, вам просто нужен менеджер заданий, такой как Torque или Grid Engine. ROCKS - это быстрый способ начать работу с этим типом установки.

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

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

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

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

Обычно ваши задачи MPI будут распределяться узлами в кластере с использованием некоторой системы пакетной организации очередей, такой как Torque или Sun Grid Engine. Они становятся более полезными, если вы разделяете кластер среди нескольких пользователей и вам необходимо запланировать ресурсы кластера.

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

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

Другие вопросы по тегам