Vamos transformar os seus Raspberry PI num cluster (Parte 2)
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 mostrarmos como fazer a instalação num único Raspberry, hoje vamos mostrar como adicionar duas máquinas ao cluster.
Pré-Requisitos
Para este tutorial vamos considerar 3 Raspberry PI. Um dos equipamentos vai funcionar como master e os outros dois 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. Nos passos seguintes vamos incluir todas as configurações do master e do slave. Caso já tenham realizado o tutorial anterior, provavelmente haverão alguns passos que já não são necessários.
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 “” |
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)
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 |
Passo 5) Definir nós do cluster no ficheiro hosts
nano –w /etc/hosts |
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) Configurar serviços do Hadoop
Nota 5: Nesta fase deverá ter já o Hadoop instalado. Veja aqui como o fazer. Depois de ter toda a estrutura do hadoop, deve proceder às seguintes alterações:
Editar o ficheiro hdfs-site.xml
nano –w /usr/local/hadoop/etc/hadoop/hdfs-site.xml |
Dentro do ficheiro, alterar o valor do dfs.replication para 3.
Vamos agora criar um directório com o nome namenode dentro do directório /usr/local/hadoop e definir como dono e grupo o hadoop.
mkdir -p /usr/local/hadoop/hadoopdata/hdfs/namenode sudo chown -R hadoop:hadoop /usr/local/hadoop/ |
De seguida vamos editar o ficheiro /usr/local/hadoop/etc/hadoop/yarn-site.xml e definir a seguinte estrutura
O próximo passo é editar o ficheiro /usr/local/hadoop/etc/hadoop/core-site.xml e verificar se o hostname está bem definido.
Por fim, no Raspberry PI master, vamos criar dois ficheiros que vão ter a informação do nome do master e dos slaves.
[slaves]
nano –w /usr/local/hadoop/etc/hadoop/slaves |
[masters]
nano –w /usr/local/hadoop/etc/hadoop/masters |
Até aqui temos a configuração do nó master concluída. Devem agora passar para o slave1 e slave2. Neste tutorial vamos apenas mostrar a configuração no slave1 pois a configuração será idêntica no slave2.
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 |
Passo 2) Criar o user/group “hadoop”
addgroup 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
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
Para verem se está a correr podem usar o comando jps
No slave1 podem também usar o comando jps para ver se o NodeManager e o DataNode estão activos.
Através do master podem ainda aceder à interface gráfica de gestão para verificar a informação sobre os slaves.
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.
Este artigo tem mais de um ano
Pessoal, algum SBC ARM que corra Linux (não Android, Linux Ubuntu ou Debian), e que tenha Gigabit ethernet, até 50€?
Banana Pi
posso usar este poder computacional noutro pc, com windows ou linux ?
O objectivo não é usar num único PC mas sim em vários.
A resposta é sim.
O exemplo que foi apresentado é com raspberrys porque é relativamente barato construir um cluster com máquinas destas, mas é possível usar máquinas “normais”.
Na prática isto significa que a carga de CPU, RAM etc é dividida pelos nós?
É possivel montar um servidor web em cima disto? Como garantir sincronismo de BD e data do website?
Boa pergunta, tenho interesse no mesmo e ja agora se podemos fazer o mesmo para NAS.
Se o que queres fazer é usar o hadoop para criar um cluster de webservers então a resposta é não.
O objectivo do hadoop é processar grandes volumes de dados de forma rápida, dividindo esse volume em blocos mais pequenos e fazendo com que cada máquina processe um desses blocos.
Um exemplo prático em que se pode usar hadoop é na área de Business Intelligence, em que os dados de uma base de dados são analisados para inferir estatísticas.
Penso que seria interessante no futuro criarem um tutorial com um exemplo simples onde se possa usar o hadoop, só para as pessoas terem uma ideia de como funciona.
Boa ideia. O próprio Hadoop traz alguns exemplos, vou fazer um próximo artigo.
já agora, se não for pedir muito, um artigo sobre “cluster de webservers”
No texto inicial, diz entre parêntesis, “usando modelos de programação simples”. É o Hadoop que usa, ou para usarmos, temos de programar numa “linguagem de programação simples”? Se sim, qual?
O Hadoop tem uma API de Java que pode ser utilizada. Contudo, o próprio Hadoop já se encontra um pouco “obsoleto”. Existem alternativas, como o Apache Spark, com níveis de performance muito superiores.