Aprenda a criar um “supercomputador” com vários Raspberry PI

18 Comentários

O Apache Hadoop é uma Framework/Plataforma desenvolvida em Java, para computação distribuída, usada para processamento de grandes quantidades de informação (usando modelos de programação simples).

Depois de termos apresentado a parte 1 e 2 da instalação do Apache Hadoop no Raspberry PI hoje deixamos o tutorial completo, passo a passo.

rpi_cluster


Pré-Requisitos

Para este tutorial vamos considerar 3 Raspberry PI. Um dos equipamentos vai funcionar como master e os outros dois como slave (mas no futuro podem adicionar mais máquinas a funcionar como slave). Em termos de configuração de rede vamos considerar o seguinte:

  • master: 10.10.10.1
  • slave1: 10.10.10.2
  • slave2: 10.10.10.3

Devem ainda ter instalado em todas as máquinas o JAVA.

Nota: A configuração do slave2 é semelhante à do slave1, por isso basta replicar e ajustar.

Configuração Master

Façam login como root e procedam à seguinte configuração

Passo 1) Instalar o Java
apt-get install openjdk-7-jdk
Passo 2) Criar o user/group “hadoop”
adduser hadoop

Para adicionar o user hadoop ao grupo sudo

sudo adduser hadoop sudo
Passo 3) Gerar chaves SSH e activar acesso
su hadoop
cd ~
ssh-keygen –t rsa –P “”

master_08

Para activar o acesso use o seguinte comando

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

Verificação: (pode experimentar ligar-se ao localhost sem autenticação)

master_09

Vamos agora definir permissões de leitura e escrita para o user hadoop, para o ficheiro autorized_keys

chmod 600 $HOME/.ssh/authorized_keys
Passo 4) Definir hostname para  Raspberry PI master
nano –w /etc/hostname

master_00

Passo 5) Definir nós do cluster no ficheiro hosts
nano –w /etc/hosts

master_01

Passo 6) Copiar chave SSH para slave

Para copiar a chave SSH para o slave1 basta que execute o seguinte comando:

ssh-copy-id --i ~/.ssh/id_rsa.pub slave1

Nota 4: Para saber se o ficheiro foi copiado pode, através do master, ligar-se ao slave usando o comando ssh slave1.

Passo 7) Instalar e Configurar serviços do Hadoop
wget https://www.apache.org/dist/hadoop/core/hadoop-2.7.0/hadoop-2.7.0.tar.gz
tar xzf hadoop-2.7.0.tar.gz
cp -rv  hadoop-2.7.0 /usr/local/hadoop

Definir permissões

sudo chown -R hadoop /usr/local/hadoop/
Passo 8) Definir variáveis de ambiente

Abrir o ficheiro ~/.bashrc usando o comando nano -w ~/.bashrc

e acrescentar as seguintes variáveis:

export HADOOP_PREFIX=/usr/local/hadoop
export PATH=$PATH:$HADOOP_PREFIX/bin
Passo 9) Definir JAVA_HOME

Vamos agora editar o ficheiro $HADOOP_PREFIX/etc/hadoop/hadoop-env.sh e definir a variável de ambiente JAVA_HOME.

Para editar o ficheiro basta que usem o comando nano -w $HADOOP_PREFIX/etc/hadoop/hadoop-env.sh

hadoop_003

Nota: Quando executarem o cluster e caso tenham um erro no JAVA_HOME, definam esta variável também no ~/.bashrc. Ou simplesmente executem o comando export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64. No caso de sistemas a 32 bits, devem mudar amd64 por i386.

O Apache Hadoop tem muitos ficheiros de configuração. Este ficheiros permitem as mais diversas configurações, de acordo com as necessidades de cada utilizador. Hoje vamos configurar um simples nó de um cluster para isso devem aceder a $HADOOP_HOME/etc/hadoop e alterar os seguintes ficheiros.

core-site.xml

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

hdfs-site.xml

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hadoopdata/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hadoopdata/hdfs/datanode</value>
</property>
</configuration>

mapred-site.xml

Nota: Caso não tenham este ficheiro, verifiquem se existe o ficheiro mapred-site.xml.template. Neste caso devem mudar o nome mapred-site.xml.template para mapred-site.xml.

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

yarn-site.xml

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

Feitas as configurações nos ficheiros anteriores, vamos formatar o namenode usando o seguinte comando:

hdfs namenode –format

Por fim vamos agora iniciar todos os serviços (com privilégios root) associados ao hadoop. Para tal basta que executem os seguintes comandos:

cd $HADOOP_PREFIX/sbin/
./start-dfs.sh
./start-yarn.sh

Para verificar se todos os serviços iniciaram correctamente, devem usar o comando jps e visualizar um output do tipo:

5536 DataNode
5693 SecondaryNameNode
5899 ResourceManager
6494 Jps
5408 NameNode
6026 NodeManager

Aceder ao Apache Hadoop

Para aceder à interface de gestão do Apache Hadoop basta que abram um browser e introduzam o endereço http://localhost:8088

hadoop_004

Para visualizar informações sobre o cluster basta que abram um browser e introduzam o endereço http://localhost:50070

hadoop_005

Configuração slave

Passo 1) Download e instalação do Apache Hadoop
sudo su
wget https://www.apache.org/dist/hadoop/core/hadoop-2.7.0/hadoop-2.7.0.tar.gz
tar xzf hadoop-2.7.0.tar.gz
cp -rv  hadoop-2.7.0 /usr/local/hadoop

Definir permissões

sudo chown -R hadoop /usr/local/hadoop/
Passo 2) Criar o user/group “hadoop”
adduser hadoop

Para que este utilizador possa recorrer ao sudo, deverá executar o seguinte comando:

sudo adduser hadoop sudo
Passo 3) Copiar estrutura do master para slave

Nota 5: Os próximos passos são realizados no master

Por fim, devem voltar a ligar-se ao master e copiar parte da estrutura do hadoop para os slave. Para isso devem posicionar-se na pasta /usr/local/hadoop/etc/hadoop e copiar todos os ficheiros *.site.xml para o slave. Para simplificar a tarefa podemos usar o comando scp.

scp *-site.xml hadoop@10.10.10.2:/usr/local/hadoop/etc/hadoop

E está feito. Agora, a partir do master, vamos arranjar o serviço associado ao cluster. Para isso devem ir para o directório /usr/local/hadoop/sbin e executar o comando ./start.all.sh

master_10

Para verem se está a correr podem usar o comando jps

master_11

No slave1 podem também usar o comando jps para ver se o NodeManager e o DataNode estão activos.

slave1

Através do master podem ainda aceder à interface gráfica de gestão para verificar a informação sobre os slaves.

master_12

E está tudo operacional. Não se esqueçam de agora replicar as configurações do slave1 para o slave2. De referir ainda que nesta fase podem adicionar quantos slaves pretenderem… o que significa que, quantos mais Raspberry Pi tiverem mais poder computacional terá o cluster.

Comentários

18

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de a
    a

    Artigo porreiro, agora esperemos pelo proximo onde apresentas um pequeno exemplo do seu uso.

    1. Avatar de Ruben Bernardo
      Ruben Bernardo

      +1

  2. Avatar de Redin
    Redin

    Boa tarde. Depois de ler todo o arquivo e atendendo de que não “pesco” nada sobre Linux, o que é que se poderá fazer com este cluster? Servidor de ficheiros? Todo este “presumível potencial em processamento” poderá ser utilizado em quê? Obrigado.

    1. Avatar de Emagon
      Emagon

      Boa tarde,

      Pode ser usado para processamento de dados, como por exemplo para efectuar uma grande cálculos muito mais rapidamente do que com apenas 1 raspberry.

      Algumas das áreas que estes sistemas são mais utilizadas são a área da medicina ou cientifica, onde a quantidade de dados são gigantescas e os cálculos “astronómicos”.

      As empresas também podem ter vantagens neste tipo de arquitectura pois as suas aplicações podem processar e analisar uma grande quantidade de dados mais rapidamente, o que se traduz numa vantagem competitiva.

      Para um utilizador comum, não terá grande vantagens.

    2. Avatar de Pedro Pinto

      Redin tens logo no primeiro paragrafo 🙂

      O Apache Hadoop é uma Framework/Plataforma desenvolvida em Java, para computação distribuída, usada para processamento de grandes quantidades de informação (usando modelos de programação simples).

      1. Avatar de Redin
        Redin

        Obrigado Pinto.
        Sem retirar o devido esforço e apreço pela resposta, eu também li esse parágrafo, mas na prática não me respondia à minha curiosidade.
        Assim, acabei por perceber o que o @Emagon deixou escrito.
        Resumindo, não vejo qualquer interesse nem vantagens para o comum utilizador.
        Em computação distribuída, tenho participado em alguns projetos que utilizam os PCs em “horas mortas” para processar pequeníssimos blocos de dados tal como acontece no projeto SETI@home.

  3. Avatar de Joao Torres
    Joao Torres

    Tenho um pc (windows) para edição de video e imagem, com um sistema destes posso ficar com o pc com melhor prestação ?

  4. Avatar de cc
    cc

    O overhead da comunicação n irá reduzir mto a capacidade de processamento do cluster?

  5. Avatar de Modus Operandi
    Modus Operandi

    Para o comum mortal isto deve servir para bitcoin mining digo eu..

    1. Avatar de Rui
      Rui

      nem isso, pois cada um deles faz uns meros khs quando a rede com miners em Terahashs já pouco ou nenhum lucro dão para pagar a electricidade, mesmo outro algoritmo diferente do bitcoin, como o scrypt do Litecoin e do nosso Cryptoescudo, no Litecoin para fazer uma moeda seriam anos, no Cryptoescudo uns dias que a rede tem pouca dificuldade.

  6. Avatar de Pedro
    Pedro

    Boa noite, gostaria de saber se seria possivel jogar gta v com varios raspberry, visto que agora é possivel correr com openGL. Achas isso credivel?

    1. Avatar de Pedro Ferreira
      Pedro Ferreira

      Não

  7. Avatar de sakura
    sakura

    se quiser calcular um array de antenas wifi um intel i7 leva dias a fazer o calculo…. por ex.
    na cloud, 5min. video enc./dec. , crack pass….
    em teoria
    https://hub.docker.com/

  8. Avatar de pedro
    pedro

    posso fazer com 3 raspberry pi deferente , (raspberry pi 1 b + raspberry pi 2 + raspberry pi 3)

    1. Avatar de antonio
      antonio

      Nao sou da área, acredito que de sim mas a eficiência vai ficar sempre pelo mais fraco, é mais fácil comprar 3 raspbarry pi 1

  9. Avatar de Filipe Almeida
    Filipe Almeida

    Dá para usar o apache hadoop, como servidor samba? tipo, criar um servidor com vários discos ntsc para uma rede caseira?

  10. Avatar de Fernando
    Fernando

    Depois de criar essa estrutura, aonde que minha aplicação irá rodar? No raspberry master? posso usar docker pra processar minhas imagens?

  11. Avatar de Leonardo
    Leonardo

    Bom dia.
    Algumas coisas não ficaram claras:

    1) É necessário um roteador para ligar todos os equipamentos, mas também é possível usar apenas dois?

    2) Todos os Raspberry pi farão o processamento ou só os slaves, sendo o master apenas o controlador do cluster?

    3) É possível usar um PC como master e dois ou mais Raspberry pi?

    4) Independentemente da estrutura, posso usar o cluster para processar imagens e videos?

    5) Os slaves podem receber hd/ssd, para eventual armazenamento, e outros periféricos ou só o master fica responsável pelo armazenamento, periféricos, acesso à rede doméstica (via wi-fi ou cabo)?

    Obrigado.