Hadoop

Criando um cluster Hadoop de nó único (single node cluster) e em modo Pseudo-distribuído (pseudo-distributed mode) no Linux (Ubuntu).

Passo a passo objetivo com comandos para copiar e colar. Ubuntu (Lubuntu) 22.04. Java OpenJDK 1.8.0_342 e Hadoop 3.3.4.

Cristiano de Magalhães
6 min readSep 3, 2022

--

Photo by Wolfgang Hasselmann on Unsplash

Referência

#tbd O roteiro a seguir foi integralmente feito baseado no roteiro de (#tbd), adaptado para versões mais novas e adicionando pouquíssimos comandos que são mencionados no texto mas não explicitados. O link para a referência é: https://medium.com/analytics-vidhya/hadoop-single-node-cluster-setup-b11b957681f2

Resumo (TL;DR)

TBD

Método

A instalação e configuração pode ser feita totalmente por meio da utilização do terminal (atalho para abrir o terminal no linux: CTRL + ALT + T).

Crie um novo usuário dedicado

  • Crie um grupo de usuários hadoop ;
sudo addgroup hadoop
  • Crie um novo usuário hdfsuser adicionando-o ao grupo de usuários hadoop ;
sudo adduser --ingroup hadoop hdfsuser
  • Abra o arquivo sudoers para adicionar uma linha a ele
sudo nano /etc/sudoers

O comando acima abrirá na tela um editor de arquivos. Certifique-se que após editá-lo você vai salvá-lo com o nome correto (detalhes abaixo). No editor que abrir copie e cole (para colar coisas no terminal do linux ou em qualquer aplicativo dentro do terminal, o atalho é SHIFT + CTRL + V) ou digite o comando do passo seguinte.

  • Adicione a seguinte linha ao arquivo
hdfsuser ALL=(ALL:ALL) ALL
  • Feche e salve o arquivo

Para fechar o editor de texto nano o atalho é CTRL + X;

Para confirmar o salvamento das alterações digite Y;

Em seguida verifique na parte debaixo da tela o nome de arquivo que será salvo ( /etc/sudoers ) e aperte o ENTER para confirmar;

  • Troque de usuário para o "hdfsuser"
su - hdfsuser

Instale o Java 8 OpenJDK

Comandos unificados

sudo apt-get update && sudo apt-get install openjdk-8-jre-headless openjdk-8-jdk

Comandos separados (se já utilizou o de cima, não precisa repetir estes)

sudo apt-get update
sudo apt-get install openjdk-8-jre-headless openjdk-8-jdk

Verifique se a instalação funcionou corretamente

java -version

Se você está seguindo este roteiro com as mesmas versões utilizadas, a saída que deverá ver no terminal é a seguinte (ou algo parecido):

  • Saída no terminal
openjdk version "1.8.0_342"
OpenJDK Runtime Environment (build 1.8.0_342-8u342-b07-0ubuntu1~22.04-b07)
OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode)

Configurando chaves SSH

Para funcionar, o ssh precisa estar configurado em um modo sem senha (passwordless).

sudo apt-get install ssh

Gerando as senhas

Comando unificado

ssh-keygen -t rsa && cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && chmod og-wx ~/.ssh/authorized_keys

Comandos separados (se já utilizou o de cima, não precisa repetir estes)

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod og-wx ~/.ssh/authorized_keys

Verifique a conexão ssh sem senha

ssh localhost

Termine a conexão com localhost

exit

Instalando Hadoop 3.3.4

Comando unificado

cd /usr/local && sudo wget https://dlcdn.apache.org/hadoop/common/stable/hadoop-3.3.4.tar.gz && sudo tar xvzf hadoop-3.3.4.tar.gz && sudo mv hadoop-3.3.4 hadoop

Comandos separados (se já utilizou o de cima, não precisa repetir estes)

cd /usr/local
sudo wget https://dlcdn.apache.org/hadoop/common/stable/hadoop-3.3.4.tar.gz
sudo tar xvzf hadoop-3.3.4.tar.gz
sudo mv hadoop-3.3.4 hadoop

Configurando em Modo Pseudo-distribuído (pseudo-distributed mode)

sudo chown -R hdfsuser:hadoop /usr/local/hadoop
sudo chmod -R 777 /usr/local/hadoop
sudo nano ~/.bashrc

No arquivo /home/hdfsuser/.bashrc que abrir, insira o texto abaixo perto do final do arquivo.

# HADOOP ENVIRONMENT
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_HDFS_HOME=/usr/local/hadoop
export YARN_HOME=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin
export PATH=$PATH:/usr/local/hadoop/sbin
# HADOOP NATIVE PATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS=-Djava.library.path=$HADOOP_PREFIX/lib.
  • Feche e salve o arquivo

Para fechar o editor de texto nano o atalho é CTRL + X;

Para confirmar o salvamento das alterações digite Y;

Em seguida verifique na parte debaixo da tela o nome de arquivo que será salvo ( /home/hdfsuser/.bashrc ) e aperte o ENTER para confirmar;

  • Ative o ~/.bashrc alterado:
source ~/.bashrc

Configurando o Hadoop

cd /usr/local/hadoop/etc/hadoop/sudo nano hadoop-env.sh

Insira o código abaixo ao final do arquivo hadoop-env.sh

export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export HADOOP_HOME_WARN_SUPPRESS="TRUE"
export HADOOP_ROOT_LOGGER="WARN,DRFA"
export HDFS_NAMENODE_USER="hdfsuser"
export HDFS_DATANODE_USER="hdfsuser"
export HDFS_SECONDARYNAMENODE_USER="hdfsuser"
export YARN_RESOURCEMANAGER_USER="hdfsuser"
export YARN_NODEMANAGER_USER="hdfsuser"
  • Feche e salve o arquivo

Para fechar o editor de texto nano o atalho é CTRL + X;

Para confirmar o salvamento das alterações digite Y;

Em seguida verifique na parte debaixo da tela o nome de arquivo que será salvo ( /usr/local/hadoop/etc/hadoop/hadoop-env.sh ) e aperte o ENTER para confirmar;

sudo nano yarn-site.xml

Insira o código abaixo ENTRE as tags de configuração ( <configuration> e </configuration> ) do arquivo yarn-site.xml

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
  • Feche e salve o arquivo

Para fechar o editor de texto nano o atalho é CTRL + X;

Para confirmar o salvamento das alterações digite Y;

Em seguida verifique na parte debaixo da tela o nome de arquivo que será salvo ( /usr/local/hadoop/etc/hadoop/yarn-site.xml ) e aperte o ENTER para confirmar;

sudo nano hdfs-site.xml

Insira o código abaixo ENTRE as tags de configuração ( <configuration> e </configuration> ) do arquivo hdfs-site.xml

<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/yarn_data/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/yarn_data/hdfs/datanode</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>localhost:50070</value>
</property>
  • Feche e salve o arquivo

Para fechar o editor de texto nano o atalho é CTRL + X;

Para confirmar o salvamento das alterações digite Y;

Em seguida verifique na parte debaixo da tela o nome de arquivo que será salvo ( /usr/local/hadoop/etc/hadoop/hdfs-site.xml ) e aperte o ENTER para confirmar;

sudo nano core-site.xml

Insira o código abaixo ENTRE as tags de configuração ( <configuration> e </configuration> ) do arquivo core-site.xml

<property>
<name>hadoop.tmp.dir</name>
<value>/bigdata/hadoop/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
  • Feche e salve o arquivo

Para fechar o editor de texto nano o atalho é CTRL + X;

Para confirmar o salvamento das alterações digite Y;

Em seguida verifique na parte debaixo da tela o nome de arquivo que será salvo ( /usr/local/hadoop/etc/hadoop/core-site.xml ) e aperte o ENTER para confirmar;

sudo nano mapred-site.xml

Insira o código abaixo ENTRE as tags de configuração ( <configuration> e </configuration> ) do arquivo mapred-site.xml

<property>
<name>mapred.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost:10020</value>
</property>
  • Feche e salve o arquivo

Para fechar o editor de texto nano o atalho é CTRL + X;

Para confirmar o salvamento das alterações digite Y;

Em seguida verifique na parte debaixo da tela o nome de arquivo que será salvo ( /usr/local/hadoop/etc/hadoop/mapred-site.xml ) e aperte o ENTER para confirmar;

Criando as pastas (diretórios ou folders, como preferir) para armazenar os dados

Comando unificado

sudo mkdir -p /bigdata/hadoop/tmp && sudo chown -R hdfsuser:hadoop /bigdata/hadoop/tmp && sudo chmod -R 777 /bigdata/hadoop/tmp && sudo mkdir -p /usr/local/hadoop/yarn_data/hdfs/namenode && sudo mkdir -p /usr/local/hadoop/yarn_data/hdfs/datanode && sudo chmod -R 777 /usr/local/hadoop/yarn_data/hdfs/namenode && sudo chmod -R 777 /usr/local/hadoop/yarn_data/hdfs/datanode && sudo chown -R hdfsuser:hadoop /usr/local/hadoop/yarn_data/hdfs/namenode && sudo chown -R hdfsuser:hadoop /usr/local/hadoop/yarn_data/hdfs/datanode

Comandos separados (se já utilizou o de cima, não precisa repetir estes)

sudo mkdir -p /bigdata/hadoop/tmpsudo chown -R hdfsuser:hadoop /bigdata/hadoop/tmpsudo chmod -R 777 /bigdata/hadoop/tmpsudo mkdir -p /usr/local/hadoop/yarn_data/hdfs/namenodesudo mkdir -p /usr/local/hadoop/yarn_data/hdfs/datanodesudo chmod -R 777 /usr/local/hadoop/yarn_data/hdfs/namenodesudo chmod -R 777 /usr/local/hadoop/yarn_data/hdfs/datanodesudo chown -R hdfsuser:hadoop /usr/local/hadoop/yarn_data/hdfs/namenodesudo chown -R hdfsuser:hadoop /usr/local/hadoop/yarn_data/hdfs/datanode

Limpando o cluster e formatando o NameNode

Precisamos limpar o cluster formatando o NameNode antes de iniciarmos os serviços principais do Hadoop sempre que for realizada alguma alteração na configuração do NameNode ou do DataNode.

hdfs namenode -format

Tudo prondo, agora basta iniciar os serviços do Hadoop.

Iniciando os serviços do Hadoop

Iniciando todos de uma vez só:

start-all.sh

ou iniciando um de cada vez:

start-dfs.shstart-yarn.sh

Para verificar se tudo correu como deveria e deu tudo certo, ainda no terminal, digite:

jps

Você deve ver uma resposta como a seguir no terminal (a ordem pode variar):

ResourceManager
DataNode
SecondaryNameNode
NodeManager
NameNode

No seu navegador de internet (ou browser) digite os endereços:

http://localhost:50070

e

http://localhost:8088

Ambos devem abrir páginas do Hadoop (o final 50070, uma página referente ao seu NameNode rodando e o final 8088, uma página para acessar o ResourceManager).

Comandos pós instalação

Parar tudo

stop-all.shexit

Voltar a utilizar depois que parou tudo

su - hdfsuserhdfs namenode -formatstart-all.sh

FIM

Agradecimentos e correções:

Obrigado ao colega de mestrado Gabriel José Costa Barros pela observação e correção em um dos comandos export do arquivo /home/hdfsuser/.bashrc.

Sign up to discover human stories that deepen your understanding of the world.

--

--

Cristiano de Magalhães
Cristiano de Magalhães

Written by Cristiano de Magalhães

Mestrando em Computação Aeronáutica no ITA | Especialista em Manufatura Avançada pelo ITA | Engenheiro Eletricista | Designer de Produtos | Empreendedor | Maker

No responses yet

Write a response