Pesquisar este blog

segunda-feira, 14 de maio de 2018

Cluster Apache Spark

Neste post serão descritos os passos necessários para a instalação do apache spark em uma rede doméstica.
Aqui estamos assumindo que você já fez o download do spark, na sua página e já descompactou o arquivo em um diretório local.

Instalação no Master

O primeiro passo da instalação de um cluster Spark é definir quais máquinas farão parte do cluster e quais serão os seus nomes.
Definidas as máquinas deveremos adicionar os seus nomes no arquivo hosts de todas as máquinas, para que elas consigam se comunicar e isto é feito através do comando
sudo nano /etc/hosts
E neste arquivo iremos adicionar duas colunas de dados, na primeira, os ips e na segunda os nomes das máquinas, abaixo segue um exemplo de um arquivo de hosts para três máquinas.
MASTER-IP master
SLAVE01-IP slave01
SLAVE02-IP slave02

Configuração do acesso entre as máquinas

Para que as máquinas consigam se conectar entre elas, vamos configurar chaves de acesso ssh, para isso o primeiro passo é gerar estas chaves, o que pode ser feito através do comando:
ssh-keygen -t rsa -P ""
Este comando gera uma chave rsa em uma máquina e ao copiarmos este arquivo para outras máquinas, elas conseguem acessar, via ssh, a máquina onde foi gerada a chave, sem necessitar de senha.
Isso é feito ao copiarmos o conteúdo do arquivo gerado, na máquina onde foi criada a chave, que fica localizado:
/home/usuario/.ssh/id_rsa.pub
Para o arquivo
/home/usuario/.ssh/authorized_keys
 Isto pode ser feito tanto na mão, ou através do comando
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@host
Após copiar as chaves entre as máquinas, deveremos testar se é possível realizar um ssh sem senha, para fazer isto basta acessarmos cada uma das máquinas via ssh, o que no nosso exemplo, contando que voce esteja no master, pode ser feito com:
ssh usuario@slave01
ssh usuario@slave02
Caso o comando complete, sem pedir nenhuma senha, e você estiver acessando o shell das máquinas slave,  isso significa que a instalação das chaves foi feita com sucesso.
Agora deve-se editar o arquivo .bashrc, este arquivo é executado todas as vezes que você abre um shell na sua máquina, e aqui deveremos configurar onde está o java e o spark
export JAVA_HOME=<caminho da instalacao java> (eg: /usr/lib/jvm/java-8-oracle/)
export SPARK_HOME=<caminho da instalacao do spark> (eg: /home/unip/spark-2.1.3-bin-hadoop2.7/)
export PATH=$PATH:$SPARK_HOME/bin
O último comando, coloca o diretório dos executáveis do spark, no caminho de execução do linux e toda vez que você digitar um comando, ele irá procurar também, na pasta de executáveis do spark, se o programa existe e com isso poderemos executar o spark de qualquer lugar da máquina.
Após esta edição deveremos reiniciar o terminal, ou aplicarmos as modificações no terminal corrente, o que poderá ser feito com o seguinte comando:
source ~/.bashrc

Configuração do spark-env.sh

Dentro da pasta onde está instalado o spark, haverá uma pasta chamada conf, nesta pasta teremos um arquivo de exemplo chamado spark-env.sh.template, e neste passo será criado um arquivo de spark-env
cp spark-env.sh.template spark-env.sh
Dentro deste arquivo será adicionado as seguintes linhas
export JAVA_HOME=<caminho da instalacao java> (eg: /usr/lib/jvm/java-8-oracle/)
export SPARK_WORKER_CORES=4
Ainda na pasta de configuração será criado um arquivo chamado slaves através do comando
nano slaves
Dentro deste arquivo serão adicionados uma lista com todos os slaves do spark.
slave01
slave02
Todas as configurações acima deverão ser feitas em todos os slaves e para isso, a maneira mais fácil é compactar a pasta do spark e copiar este arquivo em todos os slaves.
 tar czf spark.tar.gz spark-2.1.3-bin-hadoop2.7
Isso irá criar um arquivo spark.tar.gz e ele deverá ser copiado para cada um dos slaves.
scp spark.tar.gz usuario@slave01:~
scp spark.tar.gz usuario@slave02:~ 
Em cada um dos slaves, deve-se extrair o conteúdo deste arquivo:
tar xzf spark.tar.gz 

Inicializando o Cluster

Para iniciar o cluster há um script, que fica dentro da pasta sbin da instalação do spark, chamado start-all.sh, este script deverá ser executado no master.
Para testar se o spark está rodando corretamente em cada uma das máquinas deve-se rodar o seguinte comando, em cada uma delas:
jps -lm 
Como saída, este comando apresentará algo do tipo:
spark git:(master) ✗ jps -lm
999 org.apache.spark.deploy.master.Master --ip master --port 7077 --webui-port 8080
397
669 org.jetbrains.idea.maven.server.RemoteMavenServer
1198 sun.tools.jps.Jps -lm
Pronto, agora o spark está rodando.