Come si crea un cluster?


63

Ci sono stati alcuni articoli online negli ultimi anni sulla costruzione di un cluster di computer a casa - qui per esempio.

Il Pi mi sembra una buona piattaforma per costruire / testare questo genere di cose a causa del loro basso costo; le guide "generiche" come questo possono essere trasferite al Pi abbastanza facilmente, o c'è qualcosa di cui dovrei essere consapevole quando tento di realizzare un progetto del genere?



Ho aggiunto il tag "rovo" poiché è così che vengono chiamati. Non posso dare una risposta adeguata al di là di "mettere insieme un gruppo e gestire hadoop o qualcosa del genere" - in effetti, ho preferito la domanda di cercare le risposte da solo!
vinto il

Anche altri utenti Pi non conoscono la parola magica "rovo"; la ricerca nel forum della Fondazione potrebbe aver aiutato, ma spesso è lento a rispondere, quindi non ti voterò in negativo.
mlp,

4
La University of SouthHampton ha prodotto dei passaggi per creare un cluster da 64 pi (o "supercomputer"): southampton.ac.uk/~sjc/raspberrypi/…
Alex L

Risposte:


35

Suggerisco di guardare Dispy , il modulo di calcolo distribuito python.

Per eseguire un programma su un numero di Raspberry Pi (nodi) da un PC (server - supponiamo che IP sia 192.168.0.100):

  • Installa un sistema operativo su ciascun RasPi

  • Collega ogni RasPi alla tua rete. Trova l'IP (se dinamico) o imposta IP statici.
    (Supponiamo che tu abbia tre nodi e i loro IP siano 192.168.0.50-52)

  • Imposta Python (se non già), installa dispy, quindi esegui dispynode.py -i 192.168.0.100su ogni RasPi. Questo dirà a dispynode di ricevere le informazioni sul lavoro dal server.

  • Sul PC (il server), installa dispy, quindi esegui il seguente codice 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'])

Puoi anche sostituire /some/programcon una funzione Python - ad es compute.

È inoltre possibile includere dipendenze come oggetti, moduli e file Python (che dispyverranno trasferiti su ciascun nodo) aggiungendodepends=[ClassA, moduleB, 'file1']


8
Mi piacerebbe sapere se qualcuno ha fatto questo - per favore lascia un commento per farmi sapere se funziona!
Alex L

Nel mio caso (openelec + python 2.7) viene visualizzato l'errore "File" ./Lib/multiprocessing/__init__.py ", riga 84, in <modulo>, ImportError: /usr/lib/python2.7/lib-dynload/ _multiprocessing.so: simbolo indefinito: SemLockType ".
Guido,

Dispy3-3.6 funziona con wheezy + python3! 13-03-2013 23: 01: 30.664 - dispynode - porzione di 1 cpus a 192.168.1.34:51348. Quando si avvia un'attività (es. / Bin / ls) il nodo riceve l'attività, sposta l'eseguibile in / tmp, ma qualcosa va storto "L'esecuzione di ['/ tmp / dispy / b7e04cb4a1e144e1 / ls'] non è riuscita con (<class 'OSError '>, OSError (8,' Errore formato Exec '), <oggetto traceback a 0x16f2580>) "
Guido

10

Dovresti essere consapevole del lavoro che è già stato fatto - c'è persino un nome per un cluster di box RasPi. Il Wiki Linux incorporato afferma che un Rovo è definito come "un cluster Beowulf di dispositivi Raspberry Pi". Raspberry Pi Homebrew ha molti post su Brambles e vedi anche il forum della Fondazione .


14
Non credo che dire a qualcuno di Google la risposta sia positiva per questo sito. È utile conoscere il nome ma prendere in considerazione l'aggiunta di alcuni contenuti e collegamenti di riferimento alla risposta.
Joe,

Contenuto e collegamenti aggiunti, @Joe. Sarebbe bello se i downvoters ora rivalutassero le loro opinioni ...
mlp,

1
Vorrei se ti avessi effettivamente sottovalutato ...
Joe

L'ho espresso con molta attenzione per evitare di insinuarti, Joe. Forse non si rendono conto che i voti qui possono essere annullati facendo nuovamente clic sullo stesso pulsante, non solo invertendo facendo clic sul pulsante opposto.
mlp,


6

È completamente possibile, ma il problema più grande è la raggiungibilità. È un'idea che non solo riterrei praticabile, ma utile come si potrebbe andare con l'idea del calcolo parallelo portatile. Per quanto riguarda i dettagli, i linguaggi di codifica come FORTRAN e C ++ faranno meglio.

Guarda beowulf.org per ulteriori informazioni sul cluster computing


1

Questa è la risposta al precedente post di Guido Garcia riguardante "dispiaci" - non riesco a capire come rispondere al suo post.

Quando un programma ('/ bin / ls') viene distribuito con 'dispy' per l'esecuzione parallela, quel programma sulla macchina client viene trasferito su ciascuno dei nodi (su '/ tmp'). In questo modo il programma sviluppato dall'utente sul computer client viene trasferito senza NFS o una directory condivisa. Funziona con programmi binari solo quando nodi e architetture client sono compatibili. Nel tuo caso, immagino che l'architettura client sia diversa da quella dei nodi remoti e che un nodo non possa eseguire il binario '/ bin / ls' trasferito dal client. Se si desidera eseguire / bin / ls su ciascun nodo, potrebbe essere più semplice scrivere una funzione o un programma Python per stampare la directory (ad es. Usando os.listdir) e distribuirla invece dell'eseguibile binario.


Hai bisogno di 50 reputazione per lasciare commenti sulle risposte / domande di altre persone. Benvenuto però!
Impulss

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.