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.