Apache Flume - Transferência de dados no Hadoop

Big Data,como sabemos, é uma coleção de grandes conjuntos de dados que não podem ser processados ​​usando técnicas de computação tradicionais. Big Data, quando analisado, dá resultados valiosos.Hadoop é uma estrutura de código aberto que permite armazenar e processar Big Data em um ambiente distribuído entre clusters de computadores usando modelos de programação simples.

Dados de streaming / registro

Geralmente, a maioria dos dados a serem analisados ​​será produzida por várias fontes de dados, como servidores de aplicativos, sites de redes sociais, servidores em nuvem e servidores corporativos. Esses dados estarão na forma delog files e events.

Log file - Em geral, um arquivo de log é um fileque lista eventos / ações que ocorrem em um sistema operacional. Por exemplo, os servidores da web listam todas as solicitações feitas ao servidor nos arquivos de log.

Ao coletar esses dados de registro, podemos obter informações sobre -

  • o desempenho do aplicativo e localize várias falhas de software e hardware.
  • o comportamento do usuário e obter melhores percepções de negócios.

O método tradicional de transferência de dados para o sistema HDFS é usar o putcomando. Vamos ver como usar oput comando.

HDFS put Command

O principal desafio em lidar com os dados de log é mover esses logs produzidos por vários servidores para o ambiente Hadoop.

Hadoop File System Shellfornece comandos para inserir dados no Hadoop e ler a partir dele. Você pode inserir dados no Hadoop usando oput comando como mostrado abaixo.

$ Hadoop fs –put /path of the required file  /path in HDFS where to save the file

Problema com o comando put

Podemos usar o putcomando do Hadoop para transferir dados dessas fontes para o HDFS. Mas, ele sofre das seguintes desvantagens -

  • Usando put comando, podemos transferir only one file at a timeenquanto os geradores de dados geram dados em uma taxa muito mais alta. Como a análise feita em dados mais antigos é menos precisa, precisamos ter uma solução para transferir dados em tempo real.

  • Se usarmos putcomando, os dados precisam ser empacotados e devem estar prontos para o upload. Como os servidores da web geram dados continuamente, é uma tarefa muito difícil.

O que precisamos aqui é de soluções que possam superar as desvantagens de put comande e transfira os "dados de streaming" dos geradores de dados para armazenamentos centralizados (especialmente HDFS) com menos atraso.

Problema com HDFS

No HDFS, o arquivo existe como uma entrada de diretório e o comprimento do arquivo será considerado zero até que seja fechado. Por exemplo, se uma fonte está gravando dados no HDFS e a rede foi interrompida no meio da operação (sem fechar o arquivo), os dados gravados no arquivo serão perdidos.

Portanto, precisamos de um sistema confiável, configurável e sustentável para transferir os dados de log para o HDFS.

Note- No sistema de arquivos POSIX, sempre que estamos acessando um arquivo (digamos, executando uma operação de gravação), outros programas ainda podem ler este arquivo (pelo menos a parte salva do arquivo). Isso ocorre porque o arquivo existe no disco antes de ser fechado.

Soluções Disponíveis

Para enviar dados de streaming (arquivos de log, eventos, etc.) de várias fontes para o HDFS, temos as seguintes ferramentas disponíveis -

Escriba do Facebook

Scribe é uma ferramenta imensamente popular usada para agregar e transmitir dados de log. Ele foi projetado para ser dimensionado para um número muito grande de nós e ser robusto para falhas de rede e de nós.

Apache Kafka

Kafka foi desenvolvido pela Apache Software Foundation. É um corretor de mensagens de código aberto. Usando Kafka, podemos lidar com feeds com alto rendimento e baixa latência.

Apache Flume

Apache Flume é uma ferramenta / serviço / mecanismo de ingestão de dados para coletar, agregar e transportar grandes quantidades de dados de streaming, como dados de log, eventos (etc ...) de vários servidores da web para um armazenamento de dados centralizado.

É uma ferramenta altamente confiável, distribuída e configurável, projetada principalmente para transferir dados de streaming de várias fontes para o HDFS.

Neste tutorial, discutiremos em detalhes como usar o Flume com alguns exemplos.