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.
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árioshadoop
;
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
.