Como eu construo um cluster?


63

Houve alguns artigos circulando on-line nos últimos anos sobre a construção de um cluster de computadores em casa - aqui, por exemplo.

O Pi me parece uma boa plataforma para construir / testar esse tipo de coisa devido ao seu baixo custo; os guias "genéricos" como essa são transferidos para o Pi com muita facilidade ou há algo específico sobre o qual eu deveria estar ciente ao tentar um projeto desse tipo?



Eu adicionei a tag "bramble", pois é assim que eles são nomeados. Não posso dar uma resposta adequada além de "montar um monte e executar hadoop ou algo parecido" - de fato, eu preferi a questão de procurar respostas!
Winwaed

Outros usuários de Pi também não conhecem a palavra mágica "bramble"; pesquisar no fórum da Fundação pode ter ajudado, mas muitas vezes é lento para responder, para que eu não faça o voto negativo.
Mlp

4
Universidade de Southhampton produziram passos para fazer um cluster de 64 pi (ou "supercomputador"): southampton.ac.uk/~sjc/raspberrypi/...
Alex L

Respostas:


35

Sugiro olhar para Dispy - o módulo python de computação distribuída.

Para executar um programa em vários Raspberry Pi (nós) de um PC (servidor - suponha que IP seja 192.168.0.100):

  • Instale um sistema operacional em cada RasPi

  • Anexe cada RasPi à sua rede. Encontre o IP (se dinâmico) ou configure IPs estáticos.
    (Vamos supor que você tenha três nós e os respectivos IPs 192.168.0.50-52)

  • Configure o Python (se ainda não estiver), instale dispye execute dispynode.py -i 192.168.0.100em cada RasPi. Isso informará ao dispynode para receber informações do trabalho do servidor.

  • No PC (servidor), instale dispye execute o seguinte código 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'])

Você também pode substituir /some/programcom uma função de python - por exemplo compute.

Você também pode incluir dependências, como objetos, módulos e arquivos python (que dispyserão transferidos para cada nó) adicionandodepends=[ClassA, moduleB, 'file1']


8
Gostaria muito de saber se alguém fez isso. Deixe um comentário para saber se funciona!
Alex L

No meu caso (openelec + python 2.7), recebo este erro "Arquivo" ./Lib/multiprocessing/__init__.py ", linha 84, em <module>, ImportError: /usr/lib/python2.7/lib-dynload/ _multiprocessing.so: símbolo indefinido: SemLockType ".
Guido

Mas o dispy3-3.6 roda com o wheezy + python3! 2013-03-13 23: 01: 30,664 - dispynode - servindo 1 CPU em 192.168.1.34:51348. Quando você inicia uma tarefa (por exemplo, / bin / ls), o nó recebe a tarefa, move o executável para / tmp, mas algo dá errado "A execução de ['/ tmp / dispy / b7e04cb4a1e144e1 / ls'] falhou com (<class 'OSError '>, OSError (8,' Exec format error '), <objeto traceback em 0x16f2580>) "
Guido

10

Você deve estar ciente do trabalho que já foi realizado - há até um nome para um cluster de RasPi boxen. O Embedded Linux Wiki diz que um Bramble é definido como "um cluster Beowulf de dispositivos Raspberry Pi". O Raspberry Pi Homebrew tem vários posts sobre a Brambles , e veja também o fórum da Fundação .


14
Eu não acho que dizer a alguém para pesquisar no Google a resposta é boa para este site. É útil saber o nome, mas considere adicionar algum conteúdo e links de referência à sua resposta.
21412 Joe

Conteúdo e links adicionados, @Joe. Seria bom se os downvoters agora reavaliada suas opiniões ...
MLP

11
Eu se eu realmente downvoted você ...
Joe

Eu o expressei com muito cuidado para evitar insinuar que você tinha, Joe. Talvez eles não percebam que os votos aqui podem ser desfeitos clicando novamente no mesmo botão, e não apenas revertidos clicando no botão oposto.
MLP


6

É completamente possível, mas o maior problema é a atingibilidade. É uma idéia que eu não apenas consideraria viável, mas útil, como você poderia usar com a idéia de computação paralela portátil. Tanto quanto específico, linguagens de codificação como FORTRAN e C ++ farão melhor.

Veja beowulf.org para mais informações sobre computação em cluster


1

Esta é uma resposta ao post de Guido Garcia acima sobre 'dispy' - não consigo descobrir como responder ao seu post.

Quando um programa ('/ bin / ls') é distribuído com 'dispy' para execução paralela, esse programa na máquina cliente é transferido para cada um dos nós (para '/ tmp'). Isso é feito para que o programa desenvolvido pelo usuário na máquina cliente seja transferido sem o NFS ou algum diretório compartilhado. Isso funciona com programas binários somente quando nós e arquiteturas de cliente são compatíveis. No seu caso, acho que a arquitetura do cliente é diferente da arquitetura dos nós remotos e um nó não pode executar os binários '/ bin / ls' transferidos do cliente. Se você deseja executar / bin / ls em cada nó, pode ser mais fácil escrever uma função ou programa Python para imprimir o diretório (por exemplo, usando os.listdir) e distribuí-lo em vez de executável binário.


Você precisa de 50 reputação para deixar comentários sobre as respostas / perguntas de outras pessoas. Bem-vindo!
precisa saber é

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.