Um guia de introdução ao MapReduce em Big Data

O MapReduce oferece uma maneira eficaz, rápida e econômica de criar aplicativos.

Esse modelo utiliza conceitos avançados, como processamento paralelo, localidade de dados, etc., para fornecer muitos benefícios a programadores e organizações.

Mas existem tantos modelos e frameworks de programação disponíveis no mercado que fica difícil escolher.

E quando se trata de Big Data, você não pode simplesmente escolher qualquer coisa. Você deve escolher tecnologias que possam lidar com grandes blocos de dados.

MapReduce é uma ótima solução para isso.

Neste artigo, discutirei o que realmente é o MapReduce e como ele pode ser benéfico.

Vamos começar!

O que é MapReduce?

MapReduce é um modelo de programação ou estrutura de software dentro da estrutura Apache Hadoop. Ele é usado para criar aplicativos capazes de processar dados massivos em paralelo em milhares de nós (chamados de clusters ou grades) com tolerância a falhas e confiabilidade.

Esse processamento de dados acontece em um banco de dados ou sistema de arquivos onde os dados são armazenados. O MapReduce pode trabalhar com um Hadoop File System (HDFS) para acessar e gerenciar grandes volumes de dados.

Esse framework foi introduzido em 2004 pelo Google e é popularizado pelo Apache Hadoop. É uma camada de processamento ou mecanismo no Hadoop executando programas MapReduce desenvolvidos em diferentes linguagens, incluindo Java, C++, Python e Ruby.

Os programas MapReduce em computação em nuvem são executados em paralelo, portanto, adequados para realizar análises de dados em grandes escalas.

O MapReduce visa dividir uma tarefa em tarefas menores e múltiplas usando as funções “map” e “reduce”. Ele mapeará cada tarefa e a reduzirá a várias tarefas equivalentes, o que resulta em menor poder de processamento e sobrecarga na rede do cluster.

Exemplo: Suponha que você esteja preparando uma refeição para uma casa cheia de convidados. Então, se você tentar preparar todos os pratos e fazer todos os processos sozinho, ficará agitado e demorado.

Mas suponha que você envolva alguns de seus amigos ou colegas (não convidados) para ajudá-lo a preparar a refeição distribuindo diferentes processos para outra pessoa que possa executar as tarefas simultaneamente. Nesse caso, você preparará a refeição de maneira mais rápida e fácil enquanto seus convidados ainda estiverem em casa.

O MapReduce funciona de maneira semelhante com tarefas distribuídas e processamento paralelo para permitir uma maneira mais rápida e fácil de concluir uma determinada tarefa.

O Apache Hadoop permite que os programadores utilizem o MapReduce para executar modelos em grandes conjuntos de dados distribuídos e usar técnicas avançadas de aprendizado de máquina e estatísticas para encontrar padrões, fazer previsões, identificar correlações e muito mais.

Recursos do MapReduce

Algumas das principais características do MapReduce são:

  • Interface do usuário: Você obterá uma interface do usuário intuitiva que fornece detalhes razoáveis ​​sobre cada aspecto da estrutura. Ele o ajudará a configurar, aplicar e ajustar suas tarefas sem problemas.

  • Payload: Os aplicativos utilizam as interfaces Mapper e Reducer para habilitar as funções de mapa e redução. O Mapeador mapeia os pares de valores-chave de entrada para pares de valores-chave intermediários. Redutor é usado para reduzir pares de valores-chave intermediários que compartilham uma chave com outros valores menores. Ele executa três funções – classificar, embaralhar e reduzir.
  • Particionador: Controla a divisão das chaves intermediárias de saída do mapa.
  • Reporter: É uma função para relatar o progresso, atualizar Contadores e definir mensagens de status.
  • Contadores: Representa contadores globais que um aplicativo MapReduce define.
  • OutputCollector: Esta função coleta dados de saída do Mapper ou Redutor em vez de saídas intermediárias.
  • RecordWriter: Grava a saída de dados ou pares chave-valor no arquivo de saída.
  • DistributedCache: distribui com eficiência arquivos maiores e somente leitura que são específicos do aplicativo.
  • Compactação de dados: O gravador de aplicativos pode compactar as saídas de trabalho e as saídas de mapas intermediários.
  • Ignorando registros incorretos: você pode pular vários registros incorretos enquanto processa suas entradas de mapa. Este recurso pode ser controlado através da classe – SkipBadRecords.
  • Depuração: Você terá a opção de executar scripts definidos pelo usuário e habilitar a depuração. Se uma tarefa no MapReduce falhar, você poderá executar seu script de depuração e encontrar os problemas.
  XML vs. HTML: Quais são as diferenças?

Arquitetura MapReduce

Vamos entender a arquitetura do MapReduce aprofundando seus componentes:

  • Trabalho: Um trabalho no MapReduce é a tarefa real que o cliente MapReduce deseja executar. É composto por várias tarefas menores que se combinam para formar a tarefa final.
  • Job History Server: É um processo daemon para armazenar e salvar todos os dados históricos sobre um aplicativo ou tarefa, como logs gerados após ou antes da execução de um trabalho.
  • Cliente: Um cliente (programa ou API) traz um trabalho para MapReduce para execução ou processamento. No MapReduce, um ou vários clientes podem enviar continuamente trabalhos ao MapReduce Manager para processamento.
  • MapReduce Master: Um MapReduce Master divide um trabalho em várias partes menores, garantindo que as tarefas estejam progredindo simultaneamente.
  • Partes do Trabalho: Os subtrabalhos ou partes do trabalho são obtidos dividindo-se o trabalho principal. Eles são trabalhados e combinados finalmente para criar a tarefa final.
  • Dados de entrada: É o conjunto de dados alimentado ao MapReduce para processamento de tarefas.
  • Dados de saída: É o resultado final obtido após o processamento da tarefa.

Então, o que realmente acontece nessa arquitetura é que o cliente envia um trabalho para o MapReduce Master, que o divide em partes menores e iguais. Isso permite que o trabalho seja processado mais rapidamente, pois tarefas menores levam menos tempo para serem processadas em vez de tarefas maiores.

No entanto, certifique-se de que as tarefas não sejam divididas em tarefas muito pequenas, pois se você fizer isso, poderá ter que enfrentar uma sobrecarga maior de gerenciamento de divisões e perder um tempo significativo com isso.

Em seguida, as partes do trabalho são disponibilizadas para prosseguir com as tarefas Mapear e Reduzir. Além disso, as tarefas Mapear e Reduzir possuem um programa adequado com base no caso de uso em que a equipe está trabalhando. O programador desenvolve o código baseado em lógica para atender aos requisitos.

Depois disso, os dados de entrada são alimentados na Tarefa de Mapa para que o Mapa possa gerar rapidamente a saída como um par chave-valor. Em vez de armazenar esses dados no HDFS, um disco local é usado para armazenar os dados para eliminar a chance de replicação.

Quando a tarefa estiver concluída, você pode jogar fora a saída. Portanto, a replicação se tornará um exagero quando você armazenar a saída no HDFS. A saída de cada tarefa de mapa será alimentada à tarefa de redução e a saída de mapa será fornecida à máquina que executa a tarefa de redução.

Em seguida, a saída será mesclada e passada para a função de redução definida pelo usuário. Finalmente, a saída reduzida será armazenada em um HDFS.

Além disso, o processo pode ter várias tarefas Mapear e Reduzir para processamento de dados, dependendo do objetivo final. Os algoritmos Map e Reduce são otimizados para manter o mínimo de complexidade de tempo ou espaço.

Como o MapReduce envolve principalmente as tarefas Mapear e Reduzir, é pertinente entender mais sobre elas. Então, vamos discutir as fases do MapReduce para ter uma ideia clara desses tópicos.

Fases do MapReduce

Mapa

Os dados de entrada são mapeados para os pares de saída ou chave-valor nesta fase. Aqui, a chave pode se referir ao id de um endereço enquanto o valor pode ser o valor real desse endereço.

Há apenas uma, mas duas tarefas nesta fase – divisões e mapeamento. Divisões significa as subpartes ou partes do trabalho divididas do trabalho principal. Estes também são chamados de divisões de entrada. Assim, uma divisão de entrada pode ser chamada de pedaço de entrada consumido por um mapa.

  Tunity é um aplicativo semelhante ao Shazam que envia o áudio de um canal de TV para o seu dispositivo

Em seguida, ocorre a tarefa de mapeamento. É considerada a primeira fase durante a execução de um programa de redução de mapa. Aqui, os dados contidos em cada divisão serão passados ​​para uma função de mapa para processar e gerar a saída.

A função – Map() é executada no repositório de memória nos pares chave-valor de entrada, gerando um par chave-valor intermediário. Este novo par chave-valor funcionará como a entrada a ser alimentada para a função Reduce() ou Reducer.

Reduzir

Os pares chave-valor intermediários obtidos na fase de mapeamento funcionam como entrada para a função Reduce ou Reducer. Semelhante à fase de mapeamento, duas tarefas estão envolvidas – embaralhar e reduzir.

Assim, os pares chave-valor obtidos são ordenados e embaralhados para serem alimentados no Redutor. Em seguida, o Redutor agrupa ou agrega os dados de acordo com seu par chave-valor com base no algoritmo do redutor que o desenvolvedor escreveu.

Aqui, os valores da fase de embaralhamento são combinados para retornar um valor de saída. Esta fase resume todo o conjunto de dados.

Agora, o processo completo de execução das tarefas Mapear e Reduzir é controlado por algumas entidades. Estes são:

  • Job Tracker: Em palavras simples, um job tracker atua como um mestre que é responsável por executar completamente um trabalho enviado. O rastreador de trabalhos gerencia todos os trabalhos e recursos em um cluster. Além disso, o rastreador de tarefas agenda cada mapa adicionado no rastreador de tarefas que é executado em um nó de dados específico.
  • Vários rastreadores de tarefas: Em palavras simples, vários rastreadores de tarefas funcionam como escravos executando a tarefa seguindo as instruções do Job Tracker. Um rastreador de tarefas é implantado em cada nó separadamente no cluster que executa as tarefas Mapear e Reduzir.

Funciona porque um trabalho será dividido em várias tarefas que serão executadas em diferentes nós de dados de um cluster. O Job Tracker é responsável por coordenar a tarefa agendando as tarefas e executando-as em vários nós de dados. Em seguida, o Task Tracker localizado em cada nó de dados executa partes do trabalho e cuida de cada tarefa.

Além disso, os rastreadores de tarefas enviam relatórios de progresso para o rastreador de tarefas. Além disso, o Task Tracker envia periodicamente um sinal de “pulsação” para o Job Tracker e os notifica sobre o status do sistema. Em caso de falha, um rastreador de tarefas é capaz de reprogramar o trabalho em outro rastreador de tarefas.

Fase de saída: Ao atingir esta fase, você terá os pares chave-valor finais gerados a partir do Redutor. Você pode usar um formatador de saída para traduzir os pares chave-valor e gravá-los em um arquivo com a ajuda de um gravador de registros.

Por que usar o MapReduce?

Aqui estão alguns dos benefícios do MapReduce, explicando os motivos pelos quais você deve usá-lo em seus aplicativos de big data:

Processamento paralelo

Você pode dividir um trabalho em diferentes nós onde cada nó manipula simultaneamente uma parte desse trabalho no MapReduce. Assim, dividir tarefas maiores em menores diminui a complexidade. Além disso, como diferentes tarefas são executadas em paralelo em máquinas diferentes em vez de em uma única máquina, leva muito menos tempo para processar os dados.

Localidade dos dados

No MapReduce, você pode mover a unidade de processamento para os dados, e não o contrário.

De maneira tradicional, os dados eram trazidos para a unidade de processamento para processamento. No entanto, com o rápido crescimento dos dados, esse processo começou a apresentar muitos desafios. Alguns deles eram custo mais alto, mais demorado, sobrecarga do nó mestre, falhas frequentes e desempenho de rede reduzido.

  Como silenciar rapidamente notificações irritantes no Mac

Mas o MapReduce ajuda a superar esses problemas seguindo uma abordagem inversa – trazendo uma unidade de processamento para os dados. Dessa forma, os dados são distribuídos entre diferentes nós, onde cada nó pode processar uma parte dos dados armazenados.

Como resultado, oferece custo-benefício e reduz o tempo de processamento, pois cada nó trabalha em paralelo com sua parte de dados correspondente. Além disso, como cada nó processa uma parte desses dados, nenhum nó ficará sobrecarregado.

Segurança

O modelo MapReduce oferece maior segurança. Ele ajuda a proteger seu aplicativo contra dados não autorizados enquanto aprimora a segurança do cluster.

Escalabilidade e Flexibilidade

MapReduce é uma estrutura altamente escalável. Ele permite executar aplicativos de várias máquinas, utilizando dados com milhares de terabytes. Ele também oferece a flexibilidade de processamento de dados que podem ser estruturados, semiestruturados ou não estruturados e de qualquer formato ou tamanho.

Simplicidade

Você pode escrever programas MapReduce em qualquer linguagem de programação como Java, R, Perl, Python e muito mais. Portanto, é fácil para qualquer pessoa aprender e escrever programas enquanto garante que seus requisitos de processamento de dados sejam atendidos.

Casos de uso do MapReduce

  • Indexação de texto completo: MapReduce é usado para realizar a indexação de texto completo. Seu Mapeador pode mapear cada palavra ou frase em um único documento. E o Redutor é usado para gravar todos os elementos mapeados em um índice.
  • Calculando o Pagerank: O Google usa MapReduce para calcular o Pagerank.
  • Análise de log: MapReduce pode analisar arquivos de log. Ele pode quebrar um grande arquivo de log em várias partes ou divisões enquanto o mapeador procura por páginas da web acessadas.

Um par chave-valor será alimentado ao redutor se uma página da Web for identificada no log. Aqui, a página da web será a chave e o índice “1” é o valor. Depois de fornecer um par de valores-chave ao Redutor, várias páginas da Web serão agregadas. A saída final é o número total de acessos para cada página da web.

  • Reverse Web-Link Graph: O framework também encontra uso no Reverse Web-Link Graph. Aqui, o Map() produz o destino da URL e a origem e recebe a entrada da origem ou da página da web.

Em seguida, Reduce() agrega a lista de cada URL de origem associada ao URL de destino. Finalmente, ele gera as fontes e o destino.

  • Contagem de palavras: MapReduce é usado para contar quantas vezes uma palavra aparece em um determinado documento.
  • Aquecimento global: Organizações, governos e empresas podem usar o MapReduce para resolver problemas de aquecimento global.

Por exemplo, você pode querer saber sobre o aumento do nível de temperatura do oceano devido ao aquecimento global. Para isso, você pode coletar milhares de dados em todo o mundo. Os dados podem ser de alta temperatura, baixa temperatura, latitude, longitude, data, hora, etc. Isso levará vários mapas e reduzirá as tarefas para calcular a saída usando MapReduce.

  • Testes de medicamentos: tradicionalmente, cientistas de dados e matemáticos trabalhavam juntos para formular um novo medicamento que pudesse combater uma doença. Com a disseminação de algoritmos e MapReduce, os departamentos de TI das organizações podem facilmente resolver questões que só eram tratadas por Supercomputers, Ph.D. cientistas, etc. Agora, você pode inspecionar a eficácia de um medicamento para um grupo de pacientes.
  • Outros aplicativos: MapReduce pode processar até mesmo dados em grande escala que não caberiam em um banco de dados relacional. Ele também usa ferramentas de ciência de dados e permite executá-los em diferentes conjuntos de dados distribuídos, o que antes era possível apenas em um único computador.

Como resultado da robustez e simplicidade do MapReduce, ele encontra aplicações nas áreas militar, empresarial, científica, etc.

Conclusão

MapReduce pode provar ser um avanço na tecnologia. Não é apenas um processo mais rápido e simples, mas também econômico e menos demorado. Dadas suas vantagens e uso crescente, é provável que testemunhe uma maior adoção em todos os setores e organizações.

Você também pode explorar alguns dos melhores recursos para aprender Big Data e Hadoop.