Instalação Hadoop: Configurando um Single Node Cluster
O Apache 
Hadoop é uma estrutura de código aberto para armazenamento distribuído de Big Data e processamento de dados em clusters de computadores.
O projeto é baseado nos seguintes componentes:
-  Hadoop Common - Contém as bibliotecas e utilitários Java necessários para outros módulos do Hadoop.
-  HDFS - Hadoop Distributed File System - Um sistema de arquivos escalável baseado em Java, distribuído entre vários nós.
-  MapReduce - Estrutura do YARN para processamento paralelo de Big Data.
-  Hadoop YARN - Um framework para gerenciamento de recursos de cluster.
Existem duas maneiras de instalar o Hadoop, Single Node (Nó Único) e Multi Node (Nó Múltiplo).
O Single Node Cluster, significa apenas um DataNode em execução e a configuração de todos os NameNode, DataNode, ResourceManager e NodeManager em uma única máquina, na maioria dos casos, é utilizado para estudos e testes.
Para testar se os Jobs do Oozie (sistema de agendamento de fluxo de trabalho baseado em servidor para gerenciar trabalhos do Hadoop) agendaram todos os processos, como coletar, agregar, armazenar e processar os dados em uma sequência adequada, usamos o Single Node Cluster. Ele pode testar com facilidade e eficiência o fluxo de trabalho sequencial em um ambiente menor em comparação com ambientes grandes que contêm terabytes de dados distribuídos em centenas de máquinas (multi node).
Pré-requisitos:
-  Java 8 (jdk8)
-  Hadoop 3.+
-  CentOS (Pode ser utilizado em outros sistemas, porém, só atente-se à questão do Java, variáveis de ambiente).
-  Hostname configurado
Instalação Hadoop
Passo 1: faça o download do JDK 8, nesta documentação, utilizaremos a versão 
8u101.rpm.
Passo 2: instale o JDK:
# rpm -ivh jdk8u101-linux-x64.rpm
Passo 3: crie um usuário e senha para o Hadoop, apontando sua home para 
/opt/hadoop:
# useradd -d /opt/hadoop hadoop
# passwd hadoop
Passo 4: faça o download do Hadoop (
Apache Download Mirrors). Nesta documentação, versão 3.2.0.
# wget http://ftp.unicamp.br/pub/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz
Passo 5: extraia-o em 
/opt/hadoop/:
# tar -zxvf hadoop-3.2.0.tar.gz -C /opt/hadoop/
Passo 6: troque as permissões da pasta para o usuário e grupo "hadoop":
# chown -R hadoop:hadoop /opt/hadoop/
Passo 7: logue no usuário e sete algumas variáveis de ambiente:
# su - hadoop
 vi .bash_profile
Adicione as linhas abaixo no final do arquivo:
## Variaveis Java
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
## Variaveis Hadoop
export HADOOP_HOME=/opt/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
Passo 8: agora, carregue as variáveis de ambiente e verifique o status delas:
 source .bash_profile
 echo $HADOOP_HOME
 echo $JAVA_HOME
 java -version
 hadoop version
Passo 9: dentro da home do usuário "hadoop", localize a pasta 
etc/hadoop/. Ela é responsável pelas principais configurações do Hadoop. Abra o arquivo "core-site.xml" e altere para o conteúdo abaixo:
 vi core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
O "core-site.xml" informa ao Daemon do Hadoop onde o NameNode é executado no Cluster. Ele contém configurações do núcleo do Hadoop, como configurações de I/O que são comuns ao HDFS e MapReduce.
Passo 10: ainda na pasta 
etc/hadoop/, edite o arquivo "hdfs-site.xml" com o conteúdo abaixo:
 vi hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permission</name>
<value>false</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///opt/volume/datanode</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///opt/volume/namenode</value>
</property>
</configuration>
O "hdfs-site.xml" contém definições de configuração dos Daemons do HDFS (NameNode, DataNode, Secondary NameNode). Também inclui o fator de replicação e o tamanho do bloco do HDFS.
Como especificamos 
/opt/volume/ como nosso armazenamento do sistema de arquivos Hadoop, precisamos criar esses dois diretórios (datanode e namenode) a partir da conta raiz e conceder todas as permissões para o Hadoop:
 su - root
# mkdir -p /opt/volume/namenode
# mkdir -p /opt/volume/datanode
# chown -R hadoop:hadoop /opt/volume
# exit
Passo 11: Edite o arquivo mapred-site.xml:
 vi mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
Neste caso, estamos definindo que o framework a ser utilizado é o yarn MapReduce. O "mapred-sites.xml" contém definições de configuração do aplicativo MapReduce, como o número de JVMs que podem ser executados em paralelo, o tamanho do mapeador e o processo de redutor, núcleos de CPU disponíveis para um processo etc.
Em alguns casos, o arquivo não está disponível. Neste caso, é necessário criar o arquivo "mapred-site.xml" e adicionar o conteúdo.
Passo 12: edite o arquivo yarn-site.xml:
 vi yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
O arquivo "yarn-site.xml" contém definições de configuração relacionadas ao ResourceManager e ao NodeManager, como o tamanho de gerenciamento de memória do aplicativo, a operação necessário no programa e algoritmo etc.
Passo 13: edite o arquivo "hadoop-env.sh" e adicione o diretório do Java (echo $JAVA_HOME).
 vi hadoop-env.sh
Insira uma linha com a variável do seu Java:
export JAVA_HOME=/usr/java/default/
O arquivo "hadoop-env.sh" contém as variáveis de ambiente que serão usadas no script que roda o Hadoop, Java_home etc.
Passo 14: edite o arquivo "slaves" ($HADOOP_HOME/etc/hadoop/slaves) com o seu hostname:
 vi etc/hadoop/slaves
Passo 15: após as devidas edições, é necessário formatar o NameNode.
 hdfs namenode -format
Esse passo irá formatar o HDFS via NameNode. Este comando é executado apenas uma vez. Formatá-lo significa inicializar o diretório especificado pela variável "dfs.name.dir". Nunca formate ou execute o sistema de arquivos Hadoop, pois perderá todos os seus dados armazenados no HDFS.
Passo 16: após formatado o NameNode, basta iniciar todos os Daemons:
 start-all.sh
O comando acima é uma combinação dos comandos 
start-dfs.sh, 
start-yarn.sh e 
mr-jobhistory-daemon.sh. Caso necessário, você pode executá-los individualmente:
Iniciar o NameNode: o NameNode é a peça central de um sistema de arquivos HDFS. Ele mantem a árvore de diretórios de todos os arquivos armazenados no HDFS e rastreia todo o arquivo armazenado no cluster.
 hadoop-daemon.sh start namenode
Iniciar NodeManager: na inicialização, um DataNode se conecta ao NameNode e responde às solicitações do NameNode para diferentes operações.
 hadoop-daemon.sh start datanode
Iniciar o ResourceManager: ResourceManager é o principal que arbitra todos os recursos de cluster disponíveis e, portanto, ajuda a gerenciar os aplicativos distribuídos em execução no sistema YARN. Seu trabalho é gerenciar cada NodeManagers e o ApplicationMaster de cada aplicativo.
 yarn-daemon.sh start resourcemanager
Iniciar o NodeManager: o NodeManager em cada estrutura de máquina é o agente responsável por gerenciar contêineres, monitorar seu uso de recursos e reportar o mesmo ao ResourceManager.
 yarn-daemon.sh start nodemanager
Iniciar o JobHistoryServer: JobHistoryServer é responsável por atender todas as solicitações relacionadas ao histórico de tarefas do cliente.
 mr-jobhistory-daemon.sh start historyserver
Passo 17: para verificar todos os serviços do Hadoop que estão rodando, utilize o comando:
 jps
No stdout, informará os serviços junto aos PIDs utilizados, deverão ser exibidos 6 processos no total:
-  NameNode;
-  ResourceManager;
-  JobHistoryServer;
-  Jps;
-  DataNode;
-  E NodeManager.
Passo 18: após iniciado os processos, pode conferir as portas utilizadas por eles. Cada porta é responsável por um recurso/microserviço do Hadoop.
Passo 19: para testar o cluster do sistema de arquivos "hadoop", crie um diretório aleatório no sistema de arquivos HDFS e copie um arquivo do sistema de arquivos local para o armazenamento HDFS (inserção de dados no HDFS), respectivamente:
 hdfs dfs -mkdir -p /armazenamento_hdfs
 hdfs dfs -put ARQUIVO_A_SER_HOSPEDADO /armazenamento_hdfs
Para visualizar um conteúdo de arquivo ou listar um diretório dentro do sistema de arquivos HDFS, utilize, respectivamente:
 hdfs dfs -cat /armazenamento_hdfs/ARQUIVO_HOSPEDADO
 hdfs dfs -ls /armazenamento_hdfs
Enfim, para recuperar dados do HDFS para o nosso sistema de arquivos local, use o comando:
 hdfs dfs -get /armazenamento_hdfs ./
Caso queira maiores informações sobre os comandos do HDFS:
 hdfs dfs -help
Passo 20: a porta principal de operação é a 9870, ela possui o Dashboard que faz a conexão com todos os recursos. Para acesso, abra o navegador e utilize o DNS configurado em sua máquina na porta 9870 ou utilize localhost (caso serviço e navegador sejam a mesma máquina):
-  URL: http://dns:9870/dfshealth.html
-  URL: http://localhost:9870/dfshealth.html
Passo 21: caso queira verificar via interface gráfica os conteúdos armazenados, abra o explorer.html:
-  http://localhost:9870/explorer.html
Instalação concluída.