Hadoop seus Componentes principais e sua evolução

John Costa
8 min readJul 9, 2020

--

Explicaremos aqui o que é o Hadoop, sua evolução, seu funcionamento geral, seus principais componentes quais são os pré-requisitos para usá-lo.

O que é o Hadoop?

O Hadoop é uma ferramenta open-source inspirada no GFS (Google File System) que permite o armazenamento e processamento distribuído de grandes conjuntos de dados entre clusters de computadores.

Segundo Hadoop.apache.org:

“Ele foi projetado para expandir de servidores únicos para milhares de máquinas, cada uma oferecendo computação e armazenamento local. Em vez de confiar no hardware para oferecer alta disponibilidade, a própria biblioteca foi projetada para detectar e lidar com falhas na camada de aplicativos, oferecendo um serviço altamente disponível em um cluster de computadores”

O Hadoop é utilizado como plataforma de software para tratar, processar e agrupar grandes volumes de dados estruturados, semi-estruturados e não estruturados

Quais são os Pré-Requisitos para rodar o Hadoop?

O Hadoop roda em Maquinas Linux e Windows, apesar de ser mais comum seu uso no primeiro.Os pré-requisitos de software é ter Java ™ e SSH instalado.

Por que Usar o hadoop?

Computação Distribuída

Devido à grande velocidade, variedade e volume de dados (3Vs, 5Vs, etc) gerados hoje, os sistemas de dados transacionais e analíticos, se tornaram ineficientes para lidar com essa avalanche de informações provindas de:

  • Redes sociais
  • Aplicativos móveis
  • Logs de servidores
  • Dados do mercado financeiro
  • Detalhes de transações gerados a todo momento

A computação paralela, distribuída e escalável acena como a grande solução para o problema chamado Big Data.

Podemos ver o Hadoop como uma biblioteca de código aberto que funciona sobre três componentes principais:

  • HDFS (Hadoop Distributed File system)
  • Hadoop Yarn (Gerenciador de Recursos)
  • Hadoop Mapreduce (Processamento distribuído)

O Hadoop possui muitos outros projetos relacionados também, como: Sqoop, Zookeeper, Avro, Hbase, Hive, Impala, Pig entre outros que são conhecidos por Ecossistema Hadoop:

Ecossistema Hadoop

HDFS — Hadoop Distributed File System

Imagine que temos um computador onde armazenamos todo tipo de dados, como arquivos de log, fotos, planilhas. Agora imagine, ligar esse computador pela rede a outros 2.000 computadores e compartilhar o armazenamento\processamento de todos?

E o melhor, abstrair todos os sistemas de arquivos de todos computadores como se fossem um só. É assim que funciona o HDFS.

O HDFS é um sistema de arquivos criado para armazenamento de grandes conjuntos de dados, o tamanho típico de um arquivo no HDFS é de gigabytes a terabytes (deveria ser) de forma distribuída sobre um cluster de computadores.

O Hadoop HDFS implementa algumas características importantes como:

1. Tolerância a falhas: Caso uma máquina tenha uma falha, o sistema inteiro não é prejudicado. O Hadoop HDFS implementa “cópias de segurança” do mesmo arquivo em maquinas diferentes, desta forma caso um nó do cluster venha a falhar, a tarefa e o arquivo são enviados para um nó “saudável”.

“Portanto a detecção de falhas e a recuperação rápida e automática delas é um objetivo arquitetural principal do HDFS”.

2. Integridade: O sistema controla as modificações no arquivo, bem como garante que o arquivo não seja corrompido ou perdido.

3. Consistência: Todos os usuários que acessam o sistema de arquivos distribuído devem ter a mesma visão do arquivo.

Arquitetura HDFS

Arquitetura HDFS

O HDFS possui uma arquitetura “Master (Namenode) / Worker (Datanodes)”.

Onde temos:

  • Namenode: Gerencia a localização e regula o acesso aos arquivos pelos clientes, bem como os metadados e o fator de replicação dos arquivos.
  • Secondary Namenode: Embora não seja um backup do Namenode, pode ser configurado para caso exista uma indisponibilidade no Namenode. É responsável por Mesclar os arquivos de log “Fsimage” e “Editlogs” periodicamente e mantém o tamanho do log de edições dentro de um limite criando checkpoints.
  • Datanodes: (geralmente um por nó de cluster) contêm os blocos dos dados. São responsáveis pela execução das operações nos arquivos como abrir, fechar, renomear arquivos e diretórios, além de atender é claro, as solicitações de escrita e leitura dos arquivos mediante instruções do Namenode.
  • Bloco de dados: Um arquivo é quebrado em um ou mais blocos e esses blocos são armazenados em um conjunto de Datanodes e replicados de acordo com o “fator de replicação” configurado no Namenode para tolerância a falhas. O Tamanho dos blocos são de 128 MB e o fator de replicação é 3 por default.
  • Heartbeat: O Namenode periodicamente recebe um Heartbeat e um Blockreport de cada um dos Datanodes no cluster. O recebimento de uma pulsação indica que o Datanode está funcionando corretamente.

MapReduce

Mapreduce em uma imagem

O Hadoop MapReduce é um modelo de programação para processamento de vastas quantidades de dados em paralelo através de grandes clusters de computadores comuns.

O código ou programa a ser executado, é transportado até o local do dado, executando tarefas independentes em cada bloco de dado (Map), e depois são consolidados gerando a resposta do processamento (Reduce).

O Mapreduce tem três processos principais:

  • Map: Nesta fase é feita e leitura dos blocos de dados de forma paralela em diversas máquinas do cluster. Como saída são produzidos pares de chave e valor.
  • Shuffle e Sort: Os dados mapeados na fase Map são ordenados através das chaves.
  • Reduce: Agrupa todos os dados classificados e ordenados na fase anterior, consolidando e gravando o resultado em disco.

O ganho principal do Mapreduce está no processo de migrar a computação para onde os dados estão localizados, em vez de movê-los para onde o aplicativo está sendo executado, ou seja, o código Mapreduce é enviado para cada Datanode onde estão localizados os dados e executados em cada máquina paralelamente.

Outro ganho é abstração de toda complexidade da paralelização de uma aplicação.

“A computação móvel é mais barata que a movimentação de dados”

Prazer JobTracker (Hadoop 1.x)

Arquitetura JobTracker Hadoop 1x

O JobTracker era o serviço do Hadoop que distribuía as tarefas para cada nó no cluster no Hadoop versão 1.x.

Os aplicativos clientes como por exemplo o “Hive” enviavam trabalhos para o JobTraker.

Fluxo de trabalho do JobTracker Hadoop 1.x

  1. O JobTracker conversa com o NameNode para determinar a localização dos dados.
  2. O JobTracker localiza os nós do TaskTracker com slots disponíveis nos dados ou próximos a eles.
  3. O JobTracker envia o trabalho para os nós do TaskTracker escolhido.
  4. Os nós do TaskTracker são monitorados. Se eles não enviarem sinais de pulsação com frequência suficiente, eles serão considerados como tendo falhado e o trabalho será agendado em um TaskTracker diferente.
  5. Um TaskTracker notificará o JobTracker quando uma tarefa falhar. O JobTracker decide o que fazer então: pode reenviar o trabalho em outro lugar, pode marcar esse registro específico como algo a ser evitado e pode até colocar na lista negra o TaskTracker como não confiável.
  6. Quando o trabalho é concluído, o JobTracker atualiza seu status.
  7. Os aplicativos clientes podem consultar o JobTracker para obter informações.

O JobTracker era um ponto de falha para o Hadoop 1.x. Se caísse, todos os trabalhos em execução eram interrompidos.

PRAZER, YARN (sem ponto de falha), MELHOR DO QUE VOCÊ (Job Tracker)

O YARN foi introduzido no Hadoop 2.x e evoluído no Hadoop 3.x.

O Yarn é um framework que é uma API que atua sobre o HDFS, realizando o gerenciamento dos recursos do cluster (Memória Ram, Processamento), assim como o agendamento de trabalhos.

Motivações

O motivo pelo qual o Yarn foi criado se deve pelos seguintes fatores:

  • Limitações Mapreduce

o Escalabilidade de nós limitada em 4.000 nós por cluster.

o Quantidade Máxima de Tarefas concorrentes, em aproximadamente: 40.000.

  • JobTracker centralizado: Conforme já dito, caso o houvesse uma falha no JobTracker todas as tarefas eram comprometidas.
  • Apenas MR: O Hadoop 1.x (sem YARN), suportava apenas a ferramenta de processamento MapReduce. Com o advento do Yarn no Hadoop 2.x, passou suportar outras ferramentas de processamento como Spark, Giraph, HBase e MPI etc.
Yarn

Componentes do Yarn

Principais componentes YARN

Os Principais componentes do YARN são:

  • ResourceManager: é responsável por alocar recursos para os aplicativos em execução no YARN.
  • NodeManager: Rodando em cada nó do cluster. Trabalha para iniciar os contêineres dos aplicativos, monitorar o uso de recursos e relatá-los ao ResourceManager.
  • ApplicationMaster: são responsáveis por negociar recursos com o ResourceManager e por trabalhar com os NodeManagers para iniciar os contêineres. Graças ao ApplicationMaster que as limitações de extensibilidade e escalabilidade foram evoluídas:
  • Extensibilidade: Rodar não apenas só Java Mapreduce.
  • Escalabilidade: Os clusters Hadoop agora podem ser muito maiores agora, pelo fato do ResourceManager não gerenciar tolerância à falha (Problema com o antigo JobTracker que causava gargalos e limitava o tamanho do cluster).
  • Containers: Representa a unidade de trabalho a partir do Hadoop 2.x. Rodando sobre os nós e sendo gerenciado pelo NodeManager

A ideia fundamental do YARN é dividir as duas principais responsabilidades do JobTracker, ou seja, gerenciamento de recursos e agendamento / monitoramento de tarefas, em daemons separados: um Global ResourceManager (RM) e um ApplicationMaster (AM) por aplicativo.

Yarn vs Jobtracker

Sessão Faz\ Não Faz

FAZ muito bem:

  • Processar grandes volumes de dados.
  • Armazenar diversos tipos de dados.
  • Processamento paralelo e distribuído.

Não FAZ tão bem:

  • Análise em tempo real.
  • Ser banco de dados Relacional.
  • Uso Transacional.
  • Não existe Update.
  • Alta latência.
  • Não trabalha bem com arquivos pequenos.

“O HDFS foi projetado mais para processamento em lote, e não para uso interativo dos usuários. A ênfase está na alta taxa de transferência de acesso a dados, em vez da baixa latência de acesso a dados”.

Considerações finais

Com este trabalho foi possível explorar os componentes e processos principais do Hadoop e sua evolução com o advento do Yarn resolvendo o problema de escalabilidade e de uso único do Mapreduce, permitindo assim a criação de todo ecossistema.

Espero que esse artigo tenha ajudado à quem procura um “Start” para entender o funcionamento do Hadoop e seu ecossistema.

https://www.facebook.com/groups/engenhariadedadosbrasil/

Referencias

[1] Apache Hadoop, http://hadoop.apache.org/, acesso em 15/06/2020.

[2] Apache Hadoop Yarn — Resource Manager<https://blog.cloudera.com/apache-hadoop-yarn-resourcemanager/>.

[3] Datascience Academy, engenharia de dados com hadoop e spark, https://www.datascienceacademy.com.br/, acesso em 15/06/2020.

[4] Apache Hadoop, http://hadoop.apache.org/, acesso em 15/06/2020.

[5] Mapreduce em uma imagem <https:// https://mineracaodedados.wordpress.com>. Acesso em: 16/06/2020.

[6] Hadoop 1x Vs Hadoop 2x and Hadoop 2x Vs Hadoop 3x, 2018. Disponivel em: <https://beyondcorner.com/learn-apache-hadoop/hadoop-1x-vs-hadoop-2x-and-hadoop-2x-vs-hadoop-3x/> Acesso em 17/06/2020

[7] Introdução ao Hadoop Yarn. Disponível em: < https://www.infoq.com/br/presentations/introducao-ao-hadoop-yarn/> Acesso em: 17/06/2020.

[8] JobTracker, cwiki.apache.org Disponivel em: <https://cwiki.apache.org/confluence/display/HADOOP2/JobTracker> Acesso em: 17/06/2020.

--

--