Apache Hadoop 3.2.1: Instalação e configuração de um cluster no Ubuntu 18.04 Multi Node

Leandro Gomes
12 min readMay 21, 2021

Neste tutorial vamos configurar u cluster 3 maquinas, que vão comunicar entre si.

Vamos usar o Ubuntu 18.04 e o java 8, para evitar problemas de compatibilidade com a versão do hadoop.

Nota:

Temos dois tipos de Hypervisors:

Tipo 1: Virtualização nativa ou bare-metal - Este tipo é o mais usado em datacenters, porque a camada do hypervisor assenta diretamente sobre o hardware e todos os SO (sistemas Operativos) são executados sobre essa camada, uma vez a estarem assentes no hardware consegue se um maior aproveitamento do hardware e um melhor desempenho. Como exemplos temos: Microsoft Hyper-V, VMware, Proxmos, entre outros.

Tipo 2: Virtualização com SO ou hosted hypervisor- Este tipo é implementado através de um SO ou seja, é executado um SO sobre o hardware e por sua vez a camada do Hypervisor é executada sobre esse SO. Como exemplos temos: VMware Workstation, VirtualBox, entre outros.

Requisitos necessários:

Um Hypervisor do tipo 2- Por exemplo a VirtualBox, onde vamos criar as VMs (Virtual Machines), para o nosso cluster.

Ubuntu 18.04

Aparte:

Na gíria diz-se, até aos dias de hoje para este tipo de cluster falamos em Master e Slaves, estes termos vem do inglês onde que nos EUA que no Reino Unido, que são os países que falam inglês têm uma historia feia no que diz respeito a escravidão e ao imperialismo, este foi o motivo que abriu a discussão entre usar os termos Master e Slaves e substitui-los por Primário e Secundários, assim sendo o Master passar a chamar-se Primário e os Slaves, Secundários.

Agora vamos configurar a nossa VM antes de proceder à instalação do Ubuntu, selecionando o ficheiro iso que transferimos, como mostra a imagem seguinte.

Na janela que abre clicamos em add, procuramos o ficheiro iso do Ubuntu e clicamos em choose e depois em ok.

Agora vamos instalar o Ubuntu selecionando a nossa VM e depois clicando em Start, ou clicando duas vezes na VM.

Selecionamos o idioma e clicamos em install Ubuntu.

Depois selecionamos o layout do teclado, para termos a certeza de que selecionamos o correto podemos escrever alguns caracteres especiais, onde diz “type here to test your keyboard”, depois de selecionado o layout correto, podemos clicar em continue.

Depois deixamos a seleção por default e clicamos em continue.

Agora também deixamos a seleção por default e clicamos em install Now.

Depois clicamos em continue para prosseguir com a instalação.

Agora selecionamos a nossa região e clicamos continue.

De seguida preenchemos os seguintes campos com o nosso nome, uma password, selecionamos para fazer login automaticamente e por fim clicamos em continue, como na imagem seguinte.

Depois vamos clicar em restart now, para reiniciar a nossa maquina.

De seguida clicamos em next.

Depois clicamos next.

Depois vai nos perguntar se queremos fazer o upgrade do ubuntu para uma nova versão, selecionamos Don’t Upgrade.

Depois clicamos ok.

Depois caso não queiramos aceitar enviar as informações do sistema, selecionamos no, don’t send system info e clicamos next.

Para finalizar clicamos em done.

Agora com o ubuntu instalado vamos clonar esta maquina para termos um backup e caso algo corra mal já não temos que reinstalar o ubuntu.

Vamos chamar ubuntu 18.04 hadoop primario à maquina que estamos a criar.

Caso não esteja selecionada, selecionamos a opção Full clone e clicamos em Clone.

Depois do clone feito e da nossa maquina criada vamos começar por Configurar a Network - Antes de ligarmos a VM temos que configurar a sua network, clicando na nossa VM Settings>Network>Adapter 2 e escolher as opções assinaladas na imagem seguinte.

Agora vamos ligar a VM, abrir a CMD (Linha de Comandos ou Terminal).

Instalação SSH

Vamos installar o ssh executando o seguinte comando:

sudo apt install ssh

Nota: Sempre que seja pedido a password devemos coloca-la

Instalação PDSH

Vamos instalar o pdsh executando o seguinte comando:

sudo apt install pdsh

Inicio das configurações

Começamos por abrir o ficheiro .bashrc executando o seguinte comando:

nano .bashrc

E no fim deste ficheiro adicionamos a seguinte linha de código:

export PDSH_RCMD_TYPE=ssh

Agora vamos criar uma nova chave publica de SSH, executando o seguinte comando:

ssh-keygen -t rsa -P ""

Depois copiamos a chave publica que geramos para o ficheiro das chaves autorizadas, executando o seguinte comando:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Para verificarmos a configuração do ssh vamos conectarnos ao localhost, executando o seguinte comando:

ssh localhost

Instalar o java 8

Como disse no inicio do tutorial vamos usar o java 8 por rasões de compatibilidade, em vez de uma versão mais recente, vamos instala-lo executando o seguinte comando:

sudo apt install openjdk-8-jdk

Para verificarmos se o java foi instalado corretamente, executamos o seguinte comando:

java -version

Download do Hadoop

Vamos fazer agora o download do hadoop 3.2.1 (link online 20/05/2021):

sudo wget -P /home/user/Desktop https://mirrors.sonic.net/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz

Instalar o Hadoop 3.2.1

Antes de instalrmos o hadoop 3.2.1 temos que descompactar o ficheiro que descarregamos no passo anterior, executando os seguintes comandos:

cd Desktop
tar xzf hadoop-3.2.1.tar.gz

Agora vamos renomear a pasta hadoop-3.2.1 para hadoop, para ser mais fácil o seu acesso através do terminal, para isso executamos o seguinte comando:

mv hadoop-3.2.1 hadoop

Agora vamos aceder ao ficheiro hadoop-env.sh, executando o seguinte comando:

nano hadoop/etc/hadoop/hadoop-env.sh

Vamos agora procurar no ficheiro o export JAVA_HOME, que esta comentado(#), tiramos o comentário e escrevemos o seguinte:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

Vamos mudar a pasta hadoop para o diretório /usr/local/hadoop, executando o seguinte comando:

sudo mv hadoop /usr/local/hadoop

Depois saímos do Desktop executando o seguinte comando: cd .

Vamos aceder ao ficheiro environment, usando o seguinte comando:

sudo nano /etc/environment

E vamos adicionar o que está a negrito no seguinte código:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/hadoop/bin:/usr/local/hadoop/sbin"
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/jre"

O próximo passo é:

Criar um novo utilizador

Vamos criar um utilizador, ao qual vamos chamar hadoopuser, para o criarmos executamos o comando seguinte:

sudo adduser hadoopuser

De seguida vamos executar os seguintes comandos:

sudo usermod -aG hadoopuser hadoopuser
sudo chown hadoopuser:root -R /usr/local/hadoop/
sudo chmod g+rwx -R /usr/local/hadoop/
sudo adduser hadoopuser sudo

Agora vamos ver qual é o ip da nossa maquina, executando ip addr no terminal.

Uma vez que o ip da nossa maquina é 192.168.56.132

Então a nossa rede de 3 maquinas vai ter a seguinte configuração:

  • primario: 192.168.56.132
  • secundario1: 192.168.133
  • secundario2: 192.168.134

Vamos aceder o ficheiro hsts, executando o seguinte comando:

sudo nano /etc/hosts

E vamos inserir a configuração da nossa rede.

Temos que ter em atenção aos nomes que demos as nossas maquinas, tem que ser os hostnames de cada uma das maquinas.

Criação dos Secundários

Agora vamos fechar o primario para o podermos criar os secundários, clonando o primario.

MUITO IMPORTATE: temos que garantir que quando criamos o clone selecionar “generate new MAC address for all network adapters” e fazer um “Full clone”

Depois de fazer os clones, vamos iniciar as três maquinas ao mesmo tempo.

Vamos agora em cada maquina, alterar o seu hostname para o respetivo nome que lhes demos na configuração da rede.

Acedemos ao ficheiro hostname, executando o seguinte comando:

sudo nano /etc/hostname

E colocamos o respetivo nome.

No fim de alterar o hostname temos que fazer o reboot, para que as alterações sejam aplicadas, para isso executamos o seguinte comando:

sudo reboot

Continuação da configuração do primario

Vamos mudar de utilizador, para o utilizador hadoopuser que criamos, executando o seguinte comando:

su hadoopuser
cd

Vamos gerar uma chave publica de SSH para este utilizador, executando o seguinte comando:

ssh-keygen -t rsa

Agora vamos copiar a chave para todos os utilizadores do cluster, executando o seguinte comando:

ssh-copy-id hadoopuser@primario
ssh-copy-id hadoopuser@secundario1
ssh-copy-id hadoopuser@secundario2

Vamos aceder ao ficheiro core-site.xml, executando o seguinte comando:

sudo nano /usr/local/hadoop/etc/hadoop/core-site.xml

E vamos acrescentar o seguinte código dentro da label <configuration>:

<property>
<name>fs.defaultFS</name>
<value>hdfs://primario:9000</value>
</property>

Agora acedemos ao ficheiro hdfs-site.xml, executando o seguinte comando:

sudo nano /usr/local/hadoop/etc/hadoop/hdfs-site.xml

E vamos acrescentar o seguinte código dentro da label <configuration>:

<configuration>
<property>
<name>dfs.namenode.name.dir</name><value>/usr/local/hadoop/data/nameNode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name><value>/usr/local/hadoop/data/dataNode</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

vamos aceder ao ficheiro workers, executando o comando seguinte:

sudo nano /usr/local/hadoop/etc/hadoop/workers

E vamos escrever nele o nome dos nos secundarios:

secundario1
secundario2

Agora vamos copiar as configurações que fizemos no primario, para os secundarios, executando os seguintes comandos:

scp /usr/local/hadoop/etc/hadoop/* secundario1:/usr/local/hadoop/etc/hadoop/
scp /usr/local/hadoop/etc/hadoop/* secundario2:/usr/local/hadoop/etc/hadoop/

Depois vamos aceder ao ficheiro .bashrc no hadoopuser, executando o seguinte comando:

nano .bashrc

E no fim do documento acrescentamos o seguinte código:

export PDSH_RCMD_TYPE=ssh

Agora vamos formatar o hdfs file system, executando o seguinte comando:

source .bashrc
hdfs namenode -format

Se executarmos o comando jps no o resultado será:

Depois vamos iniciar o dfs, executando o seguinte comando:

start-dfs.sh

Se executarmos o comando jps no o resultado será:

Agora vamos abrir o browser e inserir o seguinte url:primario:9870.

E vamos obter o seguinte resultado:

Como vimos na imagem anterior estão os dois secundarios a funcionar.

Falta nos agora configurar o yarn, para isso executamos os seguintes comandos:

expert HADOOP_HOME="/usr/local/hadoop"
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME

Agora em cada secundário editar o ficheiro yarn-site.xml, para isso executamos o seguinte comando como hadoopuser:

sudo nano /usr/local/hadoop/etc/hadoop/yarn-site.xml

E adicionamos o seguinte código na lable<property>

<property>
<name>yarn.resourcemanager.hostname</name>
<value>primario</value>
</property>

Agora no primario vamos iniciar o yarn, executando o seguinte comando:

start-yarn.sh

Para confirmarmos que tudo está a correr como devido, vamos executar o comando jps dentro do hadoopuser.

Agora no browser colocamos o seguinte url: primario:8088/cluster e o resultado será:

Como podemos ver na ultima imagem temos os dois nodes a funcionar, caso algum secundario se desligue ou reinicie por algum motivo é necessário fazer os seguintes comandos no primario:

start-dfs.sh
start-yarn.sh

Em vez disto podemos fazer apenas start-all.sh.

Chegando até aqui e com os mesmos resultados, significa que criamos um cluster multi-node com um primário e dois secundários com sucesso.

--

--

Leandro Gomes

Estudante de Engenharia Informática do Instituto Politécnico da Guarda.