¿Cómo construyo un clúster?


63

En los últimos años, han aparecido algunos artículos en línea sobre la construcción de un grupo de computadoras en el hogar, por ejemplo , aquí .

El Pi me parece una buena plataforma para construir / probar este tipo de cosas debido a su bajo costo; ¿deberían las guías "genéricas" como esta transferirse al Pi con bastante facilidad, o hay algo específicamente que debería tener en cuenta al intentar un proyecto de este tipo?



He agregado la etiqueta "zarza", ya que así se llama. No puedo dar una respuesta adecuada más allá de "juntar un montón y ejecutar hadoop o algo así", de hecho, ¡he preferido la pregunta para buscar respuestas yo mismo!
winwaed

Otros usuarios de Pi tampoco conocen la palabra mágica "zarza"; buscar en el foro de la Fundación podría haber ayudado, pero a menudo es lento para responder, por lo que no le votaré.
mlp

44
University of SouthHampton ha producido pasos para crear un clúster de 64 pi (o "supercomputadora"): southampton.ac.uk/~sjc/raspberrypi/…
Alex L

Respuestas:


35

Sugiero mirar Dispy , el módulo de cálculo distribuido de Python.

Para ejecutar un programa en una cantidad de Raspberry Pi (nodos) desde una PC (servidor: suponga que IP es 192.168.0.100):

  • Instale un sistema operativo en cada RasPi

  • Adjunte cada RasPi a su red. Encuentre la IP (si es dinámica) o configure IP estáticas.
    (Supongamos que tiene tres nodos y sus IP son 192.168.0.50-52)

  • Configure Python (si aún no lo está), instálelo dispyy luego ejecútelo dispynode.py -i 192.168.0.100en cada RasPi. Esto le indicará a dispynode que reciba información del trabajo del servidor.

  • En la PC (el servidor), instale dispy, luego ejecute el siguiente código de 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'])

También puede reemplazar /some/programcon una función de Python, por ejemplo compute.

También puede incluir dependencias como objetos, módulos y archivos de Python (que dispyse transferirán a cada nodo) agregandodepends=[ClassA, moduleB, 'file1']


8
Me encantaría saber si alguien ha hecho esto. ¡Por favor, deja un comentario para saber si funciona!
Alex L

En mi caso (openelec + python 2.7) me sale este error "Archivo" ./Lib/multiprocessing/__init__.py ", línea 84, en <module>, ImportError: /usr/lib/python2.7/lib-dynload/ _multiprocessing.so: símbolo indefinido: SemLockType ".
Guido

¡Pero dispy3-3.6 se ejecuta con wheezy + python3! 2013-03-13 23: 01: 30,664 - dispynode - que sirve 1 cpus en 192.168.1.34:51348. Cuando inicia una tarea (es decir, / bin / ls), el nodo recibe la tarea, mueve el ejecutable a / tmp, pero algo sale mal "Ejecutando ['/ tmp / dispy / b7e04cb4a1e144e1 / ls'] falló con (<clase 'OSError '>, OSError (8,' Error de formato de ejecución '), <objeto de rastreo en 0x16f2580>) "
Guido

10

Debe tener en cuenta el trabajo que ya se ha realizado: incluso hay un nombre para un grupo de RasPi boxen. El Linux Wiki Embedded dice una zarza se define como "un conglomerado Beowulf de dispositivos de Frambuesa Pi". Raspberry Pi Homebrew tiene varias publicaciones sobre Brambles , y también puede ver el foro de la Fundación .


14
No creo que decirle a alguien que busque en Google la respuesta es bueno para este sitio. Es útil conocer el nombre, pero considere agregar algunos contenidos y enlaces de referencia a su respuesta.
Joe

Contenido y enlaces agregados, @Joe. Sería bueno si los
votantes negativos

1
Lo haría si realmente te hubiera rechazado ...
Joe

Lo expresé con mucho cuidado para evitar insinuar que tenías, Joe. Tal vez no se den cuenta de que los votos aquí se pueden deshacer al volver a hacer clic en el mismo botón, no solo revertirlo haciendo clic en el botón opuesto.
mlp


6

Es completamente posible, pero el mayor problema es la accesibilidad. Es una idea que no solo pensaría viable, sino útil, ya que podría ir con la idea de la computación paralela portátil. En cuanto a los detalles, los lenguajes de codificación como FORTRAN y C ++ funcionarán mejor.

Mire beowulf.org para más información sobre computación en clúster


1

Esta es la respuesta a la publicación anterior de Guido García con respecto a 'dispy': no ​​puedo encontrar la manera de responder a su publicación.

Cuando un programa ('/ bin / ls') se distribuye con 'dispy' para ejecución paralela, ese programa en la máquina cliente se transfiere a cada uno de los nodos (a '/ tmp'). Esto es para que el programa desarrollado por el usuario en la máquina del cliente se transfiera sin tener NFS o algún directorio compartido. Esto funciona con programas binarios solo cuando los nodos y las arquitecturas del cliente son compatibles. En su caso, supongo que la arquitectura del cliente es diferente de la de los nodos remotos y que un nodo no puede ejecutar el '/ bin / ls' binario transferido desde el cliente. Si desea ejecutar / bin / ls en cada nodo, puede ser más fácil escribir una función o programa de Python para imprimir el directorio (por ejemplo, usando os.listdir) y distribuirlo en lugar del ejecutable binario.


Necesita 50 reputación para dejar comentarios sobre las respuestas / preguntas de otras personas. Bienvenido, aunque!
Impulso

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.