Hadoop seus Componentes principais e sua evolução
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?
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:
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
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
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)
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
- O JobTracker conversa com o NameNode para determinar a localização dos dados.
- O JobTracker localiza os nós do TaskTracker com slots disponíveis nos dados ou próximos a eles.
- O JobTracker envia o trabalho para os nós do TaskTracker escolhido.
- 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.
- 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.
- Quando o trabalho é concluído, o JobTracker atualiza seu status.
- 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.
Componentes do 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.
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.