Как мне построить кластер?


63

За последние несколько лет в Интернете было несколько статей о создании кластера компьютеров дома - например, здесь .

Pi кажется мне хорошей платформой для создания / тестирования подобных вещей из-за их низкой стоимости; Должны ли "общие" руководства, такие как эта передача, довольно легко переноситься на Pi или есть что-то конкретное, о чем я должен знать при попытке такого проекта?


3
Связанная ветка форума: raspberrypi.org/phpBB3/viewtopic.php?p=18356#p18356
finnw

Я добавил тег «Брамбл», так как они названы. Не могу дать правильный ответ, кроме как «собери кучу вместе и запусти hadoop или что-то в этом роде» - действительно, я предпочел вопрос, чтобы сам искать ответы!
winwaed

Другие пользователи Pi также не знают о волшебном слове «брамбл»; поиск по форуму Фонда мог бы помочь, но он часто реагирует медленно, поэтому я не буду вас голосовать.
млп

4
Университет Саут-Хэмптона разработал шаги для создания кластера размером 64 пи (или «суперкомпьютера»): southampton.ac.uk/~sjc/raspberrypi/…
Alex L

Ответы:


35

Я предлагаю взглянуть на Dispy - модуль Python для распределенных вычислений.

Чтобы запустить программу на нескольких Raspberry Pi (узлах) с ПК (сервер - предположим, что IP есть 192.168.0.100):

  • Установите операционную систему на каждый RasPi

  • Подключите каждый RasPi к вашей сети. Найдите IP-адрес (если он динамический) или настройте статический IP-адрес.
    (Давайте предположим, что у вас есть три узла, и их IP-адреса 192.168.0.50-52)

  • Установите Python (если еще нет), установите dispy, а затем запустите dispynode.py -i 192.168.0.100на каждом RasPi. Это сообщит dispynode о получении информации о задании с сервера.

  • На ПК (сервере) установите dispyи запустите следующий код Python:

#!/usr/bin/env python
import dispy
cluster = dispy.JobCluster('/some/program', nodes=['192.168.0.50', '192.168.0.51', '192.168.0.52'])

Вы также можете заменить /some/programна функцию Python - например compute.

Вы также можете включить зависимости, такие как объекты Python, модули и файлы (которые dispyбудут передаваться на каждый узел), добавивdepends=[ClassA, moduleB, 'file1']


8
Я хотел бы услышать, если кто-то сделал это - пожалуйста, оставьте комментарий, дающий мне знать, если это работает!
Алекс Л

В моем случае (openelec + python 2.7) я получаю эту ошибку «Файл» ./Lib/multiprocessing/__init__.py », строка 84, в <module>, ImportError: /usr/lib/python2.7/lib-dynload/ _multiprocessing.so: неопределенный символ: SemLockType ".
Гвидо

Но dispy3-3.6 работает с wheezy + python3! 2013-03-13 23: 01: 30,664 - dispynode - отбывает 1 процессор в 192.168.1.34:51348. Когда вы запускаете задачу (например, / bin / ls), узел получает задачу, перемещает исполняемый файл в / tmp, но что-то идет не так "Выполнение ['/ tmp / dispy / b7e04cb4a1e144e1 / ls'] завершилось неудачно с (<class 'OSError '>, OSError (8,' Ошибка формата Exec '), <объект трассировки в 0x16f2580>) "
Гвидо

10

Вы должны знать о проделанной работе - даже есть название кластера RasPi boxen. Embedded Linux Wiki говорит Bramble определяется как « кластер Beowulf устройств Raspberry Pi». Raspberry Pi Homebrew имеет ряд сообщений о Брамблсе , и видеть также Фонд собственного форума «s.


14
Я не думаю, что говорить кому-то в Google ответ хорошо для этого сайта. Полезно знать имя, но подумайте над добавлением некоторого контента и ссылочных ссылок в ваш ответ.
Джо

Контент и ссылки добавлены, @Joe. Было бы хорошо, если бы downvoters теперь пересмотрели свое мнение ...
mlp

1
Я бы, если бы я фактически проголосовал против тебя ...
Джо

Я сформулировал это очень осторожно, чтобы избежать намеков на то, что у тебя было, Джо. Возможно, они не понимают, что голоса здесь можно отменить, повторно щелкнув ту же кнопку, а не просто поменять местами, нажав противоположную кнопку.
млп

10

Некоторые ребята из Southampton Uni собрали кластер и написали подробный обзор своей работы на http://www.southampton.ac.uk/~sjc/raspberrypi/ .



На самом деле, есть чему поучиться у этого проекта с использованием MPI. Я строю свои эксперименты на основе работ этого парня. Я бы рекомендовал пометить этот ответ правильным ответом на вопрос.
Benqus

6

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

Посмотрите на beowulf.org больше о кластерных вычислениях


1

Это ответ на пост Гвидо Гарсии выше относительно «диспи» - я не могу понять, как ответить на его пост.

Когда программа ('/ bin / ls') распространяется с 'dispy' для параллельного выполнения, эта программа на клиентском компьютере передается на каждый из узлов (в '/ tmp'). Это так, что разработанная пользователем программа на клиентском компьютере передается без NFS или какой-либо общей директории. Это работает с двоичными программами, только когда узлы и клиентские архитектуры совместимы. В вашем случае, я предполагаю, что клиентская архитектура отличается от архитектуры удаленных узлов, и узел не может выполнять двоичные файлы '/ bin / ls', переданные от клиента. Если вы хотите выполнить / bin / ls на каждом узле, может быть проще написать функцию или программу Python для печати каталога (например, с использованием os.listdir) и распространить его вместо двоичного исполняемого файла.


Вам нужно 50 репутации, чтобы оставлять комментарии на ответы / вопросы других людей. Добро пожаловать, хотя!
Импульс

1

Там также http://pi.interworx.com, если вы хотите полнофункциональную панель управления с ним. На этой странице есть инструкции по репликации, но вам придется набраться терпения, так как этот поддомен работает из кластера Rasberry Pi. Вот фото на случай, если оно упадет:

http://www.facebook.com/photo.php?fbid=596262440393836&set=a.244167858936631.60071.170159826337435&type=1

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.