Vídeo: 08 - Hadoop - Ingestão de dados com o Flume 2024
Alguns dos dados que acabam no Sistema de arquivos distribuídos Hadoop (HDFS) podem aterrar lá através de operações de carga de banco de dados ou outros tipos de processos em lote, mas o que se você quiser capturar os dados que estão fluindo em fluxos de dados de alto débito, como dados de registro de aplicativos? O Apache Flume é a maneira padrão atual de fazer isso com facilidade, eficiência e segurança.
Apache Flume , outro projeto de nível superior da Apache Software Foundation, é um sistema distribuído para agregar e mover grandes quantidades de dados de transmissão de fontes diferentes para um armazenamento de dados centralizado.
Dito de outra forma, o Flume foi projetado para a ingestão contínua de dados em HDFS. Os dados podem ser qualquer tipo de dados, mas o Flume é particularmente adequado ao gerenciamento de dados de log, como os dados de log de servidores web. As unidades dos dados que Flume processam são chamados eventos ; um exemplo de um evento é um registro de registro.
Para entender como o Flume funciona dentro de um cluster Hadoop, você precisa saber que o Flume é executado como um ou mais agentes e que cada agente possui três componentes conectáveis: fontes, canais e sumidouros:
-
Fontes recuperam dados e enviam-no para canais.
-
Canais mantêm filas de dados e servem como condutas entre fontes e sumidouros, o que é útil quando o fluxo de entrada excede o fluxo de saída.
-
Sinks processam os dados que foram retirados dos canais e entregá-lo a um destino, como o HDFS.
Um agente deve ter pelo menos um de cada componente para executar, e cada agente está contido em sua própria instância da Java Virtual Machine (JVM).
Um evento gravado em um canal por uma fonte não é removido desse canal até que um coletor o remova por meio de uma transação. Se ocorrer uma falha na rede, os canais mantêm seus eventos em fila até que as pias possam gravá-las no cluster. Um canal na memória pode processar eventos rapidamente, mas é volátil e não pode ser recuperado, enquanto um canal baseado em arquivo oferece persistência e pode ser recuperado em caso de falha.
Cada agente pode ter várias fontes, canais e sumidouros e, embora uma fonte possa gravar em muitos canais, uma pia pode tirar dados de apenas um canal.
Um agente é apenas uma JVM que está executando o Flume e as pias para cada nó de agente no cluster Hadoop enviam dados para nós coletores , que agregam os dados de muitos agentes antes escrevendo para HDFS, onde pode ser analisado por outras ferramentas Hadoop.
Os agentes podem ser encadernados para que a pia de um agente envie dados para a fonte de outro agente.A Avro, a estrutura remota de chamada e serialização da Apache, é a maneira usual de enviar dados através de uma rede com o Flume, pois serve como uma ferramenta útil para a serialização ou transformação eficiente de dados em um formato binário compacto.
No contexto do Flume, a compatibilidade é importante: um evento Avro requer uma fonte Avro, por exemplo, e uma pia deve entregar eventos adequados ao destino.
O que faz com que esta grande cadeia de fontes, canais e pias funcionem é a configuração do agente Flume, que é armazenada em um arquivo de texto local estruturado como um arquivo de propriedades Java. Você pode configurar vários agentes no mesmo arquivo. Olhe para um arquivo de exemplo, que é chamado de flume-agent. conf - está configurado para configurar um agente chamado shaman:
# Identifique os componentes no agente shaman: shaman. fontes = netcat_s1 shaman. sinks = hdfs_w1 shaman. channels = in-mem_c1 # Configure a fonte: shaman. fontes. netcat_s1. tipo = netcat shaman. fontes. netcat_s1. bind = shaman localhost. fontes. netcat_s1. porto = 44444 # Descreva a pia: shaman. afunda. hdfs_w1. type = hdfs shaman. afunda. hdfs_w1. hdfs. caminho = hdfs: // shaman. afunda. hdfs_w1. hdfs. writeFormat = Text shaman. afunda. hdfs_w1. hdfs. fileType = DataStream # Configure um canal que bloqueia eventos na memória: shaman. canais. in-mem_c1. type = memory shaman. canais. in-mem_c1. capacidade = 20000 xamã. canais. in-mem_c1. transactionCapacity = 100 # Vincule a fonte e afunda no canal: shaman. fontes. netcat_s1. canais = in-mem_c1 shaman. afunda. hdfs_w1. channels = in-mem_c1
O arquivo de configuração inclui propriedades para cada fonte, canal e pia no agente e especifica como eles estão conectados. Neste exemplo, o agente shaman tem uma fonte que escuta dados (mensagens para netcat) na porta 44444, um canal que protege os dados do evento na memória e um coletor que registra os dados do evento no console.
Este arquivo de configuração poderia ter sido usado para definir vários agentes; Aqui, você está configurando apenas um para manter as coisas simples.
Para iniciar o agente, use um script de shell chamado flume-ng, que está localizado no diretório bin da distribuição do Flume. Na linha de comando, emita o comando do agente, especificando o caminho para o arquivo de configuração e o nome do agente.
O comando de exemplo a seguir inicia o agente Flume:
agente flume-ng -f / -n shaman
O registro do agente Flume deve ter entradas, verificando que a fonte, o canal e o coletor começaram com sucesso.
Para testar ainda mais a configuração, você pode fazer telnet para a porta 44444 de outro terminal e enviar Flume um evento digitando uma seqüência de texto arbitrária. Se tudo correr bem, o terminal Flume original emitirá o evento em uma mensagem de log que você deve ver no registro do agente.