Tutorial de Instalação do Hadoop no Windows - WSL

Profa. Emilia Colonese


A instalação do Hadoop será feita no modo Single Node Cluster. Esta instalação simula um cluster com 2 máquinas virtuais em um desktop: uma atuará como servidor e a outra como estação de trabalho.

A instalação do Hadoop num cluster real, onde existem várias máquinas conectadas a um switch, uma das máquinas funcionará como servidor e as demais como estação de trabalho.

1. Pré-requisitos

  • Requisitos de hardware para um bom funcionamento:
            - RAM: mínimo 8 GB.
            - CPU: mínimo Quad Core, com pelo menos 1,80 GHz
  • Instalar o WSL, a partir do terminal como administrador: 

  wsl --install

    (referência: https://learn.microsoft.com/pt-br/windows/wsl/basic-commands?source=recommendations

  •  Em caso de erro no WSL, executar no PowerShell como administrador:
     netsh winsock reset
     wsl -e bash
          
          Reiniciar o Windows.

            A partir da agora todos os comandos devem ser executados no terminal Ubuntu (WSL)

  • Instalar desktop utils no WSL:

$ sudo apt install desktop-file-utils

  • Instalar o Java Development Kit 11 

$ sudo apt-get update

$ sudo apt-get install openjdk-11-jdk

sudo apt-get update && sudo apt-get upgrade

  • Verificar a instalação:
            $ sudo update-alternatives --list java

  • Para definir corretamente o Java padrão (se houver outro java instalado) digitar:
$ sudo update-alternatives --config javac

·         Checar a versão instalada:


$ java -version

Deve listar o seguinte:

openjdk version "11.0.28" 2025-07-15

OpenJDK Runtime Environment (build 11.0.28+6-post-Ubuntu-1ubuntu124.04.1)

OpenJDK 64-Bit Server VM (build 11.0.28+6-post-Ubuntu-1ubuntu124.04.1, mixed mode, sharing)

 

Onde, nesta instalação, 11.0.28 é a versão mais recente.


  • Dê previlégios de admistrador ao seu usuário. Edite o arquivo /etc/sudoers:
$ sudo adduser <seu_usuário> admin
      $ sudo adduser <seu_usuário> sudo

  • Incluir na sessão "User privilege specification" após o usuário root, o seu usuário:
           # User privilege specification
          root    ALL=(ALL:ALL) ALL
          <seu_usuário>  ALL=(ALL:ALL) ALL
  • Use qualquer uma versão STABLE do Hadoop. 
        Estaremos usando a versão mais recente na data da criação deste tutorial - Hadoop 3.4.2.
        O download do arquivo compactado do Hadoop foi feito pela URL no seu diretório home do linux:          
    $ cd
    $ wget https://dlcdn.apache.org/hadoop/common/hadoop-3.4.2/hadoop-3.4.2.tar.gz

        Caso ocorra erro, é porque o link para download mudou. Pesquise na 
        URL https://dlcdn.apache.org/hadoop/common qual a versão STABLE mais recente substitua o 
        link para download. Também troque a referência da versão nos comandos que a utilizem.


2. Instalação do Hadoop

 Devemos organizar nossa instalação do Hadoop, podemos criar uma pasta e mover o arquivo extraído final nela. 

  • Crie a pasta Hadoop no diretório /opt. para isso digite os seguintes comandos:
$ cd /opt
      $ ls
      $ sudo tar -xvzf /home/emilia/hadoop-3.4.2.tar.gz
      $ cd /opt

** Substituir emilia pelo seu usuário. Verifique o caminho do arquivo!!


Cuidado com o caracter '-' ao copiar e colar. Pode ser desconfigurado, logo reescreva-o no comando copiado para o terminal.

 

  • Ignore os erros listados.
  • Renomeie a pasta descompactada para hadoop.

      $ sudo mv hadoop-3.4.2 hadoop

  • Troque a permissão do diretório hadoop:

$ sudo chmod 777 -R hadoop

 


3. Criação de Diretórios

  • Precisamos criar uma pasta data no diretório do hadoop e 2 subpastas namenode e datanode.
    $ mkdir -p /opt/hadoop/data
    $ sudo chmod 777 -R /opt/hadoop/data
    $ mkdir -p /opt/hadoop/data/namenode
    $ sudo chmod 777 -R /opt/hadoop/data/namenode
    $ mkdir -p /opt/hadoop/data/datanode
    $ sudo chmod 777 -R /opt/hadoop/data/datanode
Essas pastas são importantes porque os arquivos no HDFS residem dentro do datanode e são controlados dentro do namenode.

  • Crie as pastas tmp e logs no diretório do hadoop que foi descompactado no diretório /opt/hadoop.

Exemplo:

    $ mkdir -p /opt/hadoop/tmp
    $ sudo chmod 777 -R /opt/hadoop/tmp
    $ mkdir -p /opt/hadoop/logs
    $ sudo chmod 777 -R /opt/hadoop/tmp
    $ sudo chmod 777 -R /tmp

 

4. Alterar os arquivos de configuração do Hadoop

 Altere os seguintes arquivos do Hadoop para configurá-lo: (Neste exemplo esses arquivos estão no /opt/hadoop/etc/hadoop)

* hadoop-env.sh

Inserir ao final:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
export HADOOP_HOME=/opt/hadoop
export HADOOP_PREFIX=/opt/hadoop
export YARN_CONF_DIR=/opt/hadoop/etc/hadoop
export HADOOP_LOG_DIR=/opt/hadoop/logs
export HADOOP_PID_DIR=/opt/hadoop/tmp
export HADOOP_SECURE_DN_PID_DIR=/opt/hadoop/tmp
export HADOOP_IDENT_STRING=$USER

 * core-site.xml

Inserir as seguintes linhas:

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:8020</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>emilia</value>
</property>
<property>
<name>hadoop.user.group.static.mapping.overrides</name>
<value>emilia=supergroup</value>
</property>
</configuration>

 Nota: Substituir emilia pelo seu usuário no seu sistema.

 * hdfs-site.xml

Inserir as seguintes linhas:

<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>0.0.0.0:9870</value>
</property>
<property>
<name>dfs.datanode.http-address</name>
<value>0.0.0.0:9864</value>
</property>
<property>           
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/data/namenode</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/data/datanode</value>
<final>true</final>
</property>
</configuration>

 * mapred-site.xml

Inserir as seguintes linhas:

<configuration>
<property>
<name>mapreduce.job.user.name</name>
<value>emilia</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.apps.stagingDir</name>
<value>/home/emilia/staging</value>
</property>
<property>
<name>mapreduce.jobtracker.address</name>
<value>localhost:54311</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
</property>
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>hdfs://localhost:8020/tmp</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1638m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx3278m</value>
</property>
</configuration>

 Nota: Substituir emilia pelo seu usuário no seu sistema.

 * yarn-site.xml

Inserir as seguintes linhas:

<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>
/opt/hadoop/ect/hadoop/*,
/opt/hadoop/share/hadoop/common/*,
/opt/hadoop/share/hadoop/common/lib/*,
/opt/hadoop/share/hadoop/hdfs/*,
/opt/hadoop/share/hadoop/hdfs/lib/*,
/opt/hadoop/share/hadoop/mapreduce/*,
/opt/hadoop/share/hadoop/yarn/*,
/opt/hadoop/share/hadoop/yarn/lib/*,
/opt/hadoop/lib/*
</value>
</property>
<property>
<name>yarn.resourcemanager.bind-host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>yarn.nodemanager.bind-host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>yarn.server.nodemanager.address</name>
<value>0.0.0.0:45454</value>
</property>
<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>
<property>
<name>yarn.server.nodemanager.remote-app-log-dir</name>
<value>/logs</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>file:/opt/hadoop/logs</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
</configuration>

  

5. Inicialize as Variáveis de Ambiente

Configure o seu ambiente inserindo as variáveis de ambiente no arquivo .bashrc localizado em seu diretório home (/home/<seu_usuário>).

$ cd
$ nano .bashrc

Se a instalação do Java e do Hadoop foram realizadas nos diretórios /usr/lib/jvm/java-1.8.0-openjdk-amd64 e/opt/hadoop respectivamente (se diferentes, escrever os diretórios da sua instalação), inserir as seguintes linhas no final do arquivo:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:usr/lib/jvm/java-11-openjdk-amd64/lib:$HADOOP_HOME/lib/native
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$HADOOP_HOME/lib/native/*:$JAVA_HOME/lib:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/tools/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/yarn/lib/*
export HADOOP_HOME=/opt/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin
export HADOOP_LOG_DIR=/opt/hadoop/logs
export HADOOP_PID_DIR=/opt/hadoop/tmp
export HADOOP_HOME_WARN_SUPPRESS=1
export HADOOP_ROOT_LOGGER=WARN,DRFA
 

Após modificar o arquivo .bashrc, execute o arquivo no terminal:

$ exec bash

Execute:

$ hadoop version

Se mostrar a versão do Hadoop, este foi instalado e configurado com sucesso!

 

6. SSH

Para a conexão do master com o(s) worker(s), a comunicação deve ser direta sem requisição de senhas.

Execute:

$ sudo apt install ssh
$ sudo service ssh start
$ ssh localhost
$ exit

Se ao chamar ssh para localhost o sistema pedir uma senha, execute os seguintes comandos:


$ cd
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0640 ~/.ssh/authorized_keys

Tente novamente:

$ ssh localhost
$ exit

NOTA: Sempre saia do host que vc entrou, mesmo que seja o localhost, com o comando exit. Se estiver instalando em um cluster real, o comando ssh deve ser feito em todas as máquinas para todas as outras, ou seja, todas as máquinas (master-workers, workers-master e workers-workers) devem ter uma comunicação direta entre eles.

 

7. Formatar o Namenode

Antes de iniciar o Hadoop, precisamos formatar o namenode para isso, devemos digitar o comando abaixo.

$ hdfs namenode -format

Se estiver no cluster real, este comando é executado somente na máquina eleita como master.

  

8. Iniciando o Hadoop

Execute o comando na máquina eleita como master:

$ start-dfs.sh

Nota: Lembre-se sempre de executá-lo como usuário já com privilégios de administrador para evitar problemas de permissão!

Teste se o Hadoop está em operação:

$ jps

Na instalação tipo Single Node Cluster, a saída deve parecer com a seguinte:

1812 Jps
1479 DataNode
1676 SecondaryNameNode
1325 NameNode

Criar os diretórios no hdfs (se em cluster real, criar em todas as máquinas):

$ hdfs dfs -mkdir -p /tmp
$ hdfs dfs -chmod -R 777 /tmp
$ hdfs dfs -mkdir -p /logs
$ hdfs dfs -chmod -R 777 /logs
$ hdfs dfs -mkdir -p /user
$ hdfs dfs -chmod -R 777 /user
$ hdfs dfs -mkdir -p /var
$ hdfs dfs -chmod -R 777 /var

9. Iniciando o Yarn

Na máquina eleita como master, execute:

$ start-yarn.sh

 

10. Verificando a execução do Hadoop via Web


10.1 Namenode

Abra a URL localhost:9870 em uma guia do seu navegador para verificar a integridade do namenode.



10.2 Resource Manager

Abra a URL localhost:8088 em uma guia do seu navegador para verificar os detalhes do resource manager.



10.3 Datanode

Abra a URL localhost:9864 em uma guia do seu navegador para verificar o datanode.




10.4. Execute no master um exemplo de MapReduce:

$ yarn jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.4.2.jar pi 2 4

 

Deve mostrar o resultado parecido com o seguinte:

WARNING: YARN_CONF_DIR has been replaced by HADOOP_CONF_DIR. Using value of YARN_CONF_DIR.
Number of Maps  = 2
Samples per Map = 4
Wrote input for Map #0
Wrote input for Map #1
Starting Job
Job Finished in 16.294 seconds
Estimated value of Pi is 3.50000000000000000000

 

11. Shutdown YARN & HDFS

Não precisamos ter os serviços do Hadoop no ar o tempo todo. Para parar a execução dos serviços, execute o seguinte comando:

$ start-yarn.sh
$ start-dfs.sh