Tutorial Apache Flume: O que é, ArchiExemplo de arquitetura e Hadoop

O que é Apache Flume no Hadoop?

Flume Apache é um sistema confiável e distribuído para coletar, agregar e mover grandes quantidades de dados de log. Possui uma arquitetura simples, mas flexível, baseada em fluxos de dados de streaming. Apache Flume é usado para coletar dados de log presentes em arquivos de log de servidores web e agregá-los em HDFS para análise.

Flume no Hadoop oferece suporte a várias fontes como –

  • 'tail' (que canaliza dados de um arquivo local e grava no HDFS via Flume, semelhante ao comando Unix 'tail')
  • Logs do sistema
  • Log4j do Apache (habilitar Java aplicativos para gravar eventos em arquivos no HDFS via Flume).

Calha Archiarquitetura

A Agente de combustão é um JVM processo que tem 3 componentes -Fonte de calha, Canal Flume e Pia de calha– através do qual os eventos se propagam após serem iniciados em uma fonte externa.

Calha Archiarquitetura
Calha Archiarquitetura
  1. No diagrama acima, os eventos gerados pela fonte externa (WebServer) são consumidos pelo Flume Data Source. A fonte externa envia eventos para a fonte do Flume em um formato reconhecido pela fonte de destino.
  2. O Flume Source recebe um evento e o armazena em um ou mais canais. O canal atua como um armazenamento que mantém o evento até que seja consumido pelo coletor da calha. Este canal pode usar um sistema de arquivos local para armazenar esses eventos.
  3. O coletor Flume remove o evento de um canal e o armazena em um repositório externo como, por exemplo, HDFS. Pode haver vários agentes de calha, caso em que o coletor de calha encaminha o evento para a fonte de calha do próximo agente de calha no fluxo.

Alguns recursos importantes do FLUME

  • Flume possui um design flexível baseado em fluxos de dados de streaming. É tolerante a falhas e robusto, com vários failovers e mecanismos de recuperação. Flume Big data tem diferentes níveis de confiabilidade para oferecer, que incluem 'entrega com o melhor esforço' e um 'entrega de ponta a ponta'. Entrega com melhor esforço não tolera nenhuma falha no nó Flume, enquanto 'entrega de ponta a ponta' O modo garante a entrega mesmo no caso de falhas de vários nós.
  • O Flume transporta dados entre fontes e coletores. Essa coleta de dados pode ser agendada ou orientada por eventos. O Flume possui seu próprio mecanismo de processamento de consultas que facilita a transformação de cada novo lote de dados antes de serem movidos para o coletor pretendido.
  • Possiveis Pias de calha incluir HDFS e HBase. O Flume Hadoop também pode ser usado para transportar dados de eventos, incluindo, entre outros, dados de tráfego de rede, dados gerados por sites de mídia social e mensagens de e-mail.

Configuração de flume, biblioteca e código fonte

Antes de iniciarmos o processo real, certifique-se de ter o Hadoop instalado. Altere o usuário para 'hduser' (id usado durante a configuração do Hadoop, você pode mudar para o ID do usuário usado durante a configuração do Hadoop)

Configuração de Flume, Biblioteca e Código Fonte

Passo 1) Crie um novo diretório com o nome 'FlumeTutorial'

sudo mkdir FlumeTutorial
  1. Conceda permissões de leitura, gravação e execução
    sudo chmod -R 777 FlumeTutorial
  2. Copiar arquivos MeuTwitterSource.java e MyTwitterSourceForFlume.java neste diretório.

Baixe os arquivos de entrada daqui

Verifique as permissões de arquivo de todos esses arquivos e se as permissões de 'leitura' estiverem faltando, conceda as mesmas-

Configuração de Flume, Biblioteca e Código Fonte

Passo 2) Baixe 'Apache Flume' de um site- https://flume.apache.org/download.html

Apache Flume 1.4.0 foi usado neste tutorial do Flume.

Configuração de Flume, Biblioteca e Código Fonte

Próximo clique

Configuração de Flume, Biblioteca e Código Fonte

Passo 3) Copie o tarball baixado no diretório de sua escolha e extraia o conteúdo usando o seguinte comando

sudo tar -xvf apache-flume-1.4.0-bin.tar.gz

Configuração de Flume, Biblioteca e Código Fonte

Este comando criará um novo diretório chamado apache-flume-1.4.0-bin e extraia arquivos nele. Este diretório será chamado de no resto do artigo.

Passo 4) Configuração da biblioteca Flume

Copiar twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar, flume-ng-sdk-1.4.0.jar para

/lib/

É possível que um ou todos os JAR copiados precisem de permissão de execução. Isso pode causar um problema na compilação do código. Portanto, revogue a permissão de execução nesse JAR.

No meu caso, twitter4j-core-4.0.1.jar era tendo que executar permissão. Eu revoguei conforme abaixo-

sudo chmod -x twitter4j-core-4.0.1.jar

Configuração de Flume, Biblioteca e Código Fonte

Após este comando conceder permissão de 'leitura' em twitter4j-core-4.0.1.jar a todos.

sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar

Observe que eu baixei-

–twitter4j-core-4.0.1.jar da https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core

- Todos os JARs de chama, ou seja, flume-ng-*-1.4.0.jar da http://mvnrepository.com/artifact/org.apache.flume

Carregar dados do Twitter usando Flume

Passo 1) Vá para o diretório que contém os arquivos de código-fonte.

Passo 2) Conjunto CLASSPATH conter /lib/* e ~/FlumeTutorial/flume/mytwittersource/*

export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"

Carregar dados do Twitter usando Flume

Passo 3) Compile o código-fonte usando o comando-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Carregar dados do Twitter usando Flume

Passo 4)Crie uma jarra

Primeiro, crie Manifesto.txt arquivo usando um editor de texto de sua escolha e adicione a linha abaixo nele-

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

.. aqui flume.mytwittersource.MyTwitterSourceForFlume é o nome da classe principal. Observe que você deve pressionar a tecla Enter no final desta linha.

Carregar dados do Twitter usando Flume

Agora, crie JAR 'MyTwitterSourceForFlume.jar' Como-

jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class

Carregar dados do Twitter usando Flume

Passo 5) Copie este jar para /lib/

sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/

Carregar dados do Twitter usando Flume

Passo 6) Vá para o diretório de configuração do Flume, /conf

Se flume.conf não existir, copie flume-conf.properties.template e renomeie-o para flume.conf

sudo cp flume-conf.properties.template flume.conf

Carregar dados do Twitter usando Flume

If flume-env.sh não existe, então copie flume-env.sh.template e renomeie-o para flume-env.sh

sudo cp flume-env.sh.template flume-env.sh

Carregar dados do Twitter usando Flume

Criando um aplicativo do Twitter

Passo 1) Crie um aplicativo do Twitter fazendo login em https://developer.twitter.com/

Criando um aplicativo do Twitter

Criando um aplicativo do Twitter

Passo 2) Acesse 'As minhas aplicações' (Esta opção é desativada quando 'Ovo' botão no canto superior direito é clicado)

Criando um aplicativo do Twitter

Passo 3) Crie um novo aplicativo clicando em ‘Criar novo aplicativo’

Passo 4) Preencha os detalhes do aplicativo especificando o nome do aplicativo, a descrição e o site. Você pode consultar as notas fornecidas abaixo de cada caixa de entrada.

Criando um aplicativo do Twitter

Passo 5) Role a página para baixo e aceite os termos marcando 'Sim eu concordo' e clique no botão'Crie seu aplicativo Twitter'

Criando um aplicativo do Twitter

Passo 6) Na janela de um aplicativo recém-criado, vá até a aba, 'Chaves de API' role a página para baixo e clique no botão 'Criar meu token de acesso'

Criando um aplicativo do Twitter

Criando um aplicativo do Twitter

Passo 7) Recarregue a página.

Passo 8) Clique em 'Testar OAuth'. Isso vai mostrar 'OAuth' configurações do aplicativo.

Criando um aplicativo do Twitter

Passo 9) modificar 'flume.conf' usando estes Configurações de OAuth. Etapas para modificar 'flume.conf' são dados abaixo.

Criando um aplicativo do Twitter

Precisamos copiar a chave do consumidor, o segredo do consumidor, o token de acesso e o segredo do token de acesso para atualizar 'flume.conf'.

Nota: Esses valores pertencem ao usuário e, portanto, são confidenciais, portanto não devem ser compartilhados.

Modifique o arquivo 'flume.conf'

Passo 1) Abra 'flume.conf' no modo de gravação e definir valores para os parâmetros abaixo-

sudo gedit flume.conf

Copie o conteúdo abaixo-

MyTwitAgent.sources = Twitter
MyTwitAgent.channels = MemChannel
MyTwitAgent.sinks = HDFS
MyTwitAgent.sources.Twitter.type = flume.mytwittersource.MyTwitterSourceForFlume
MyTwitAgent.sources.Twitter.channels = MemChannel 
MyTwitAgent.sources.Twitter.consumerKey = <Copy consumer key value from Twitter App>
MyTwitAgent.sources.Twitter.consumerSecret = <Copy consumer secret value from Twitter App>
MyTwitAgent.sources.Twitter.accessToken = <Copy access token value from Twitter App>
MyTwitAgent.sources.Twitter.accessTokenSecret = <Copy access token secret value from Twitter App>
MyTwitAgent.sources.Twitter.keywords = guru99
MyTwitAgent.sinks.HDFS.channel = MemChannel
MyTwitAgent.sinks.HDFS.type = hdfs
MyTwitAgent.sinks.HDFS.hdfs.path = hdfs://localhost:54310/user/hduser/flume/tweets/
MyTwitAgent.sinks.HDFS.hdfs.fileType = DataStream
MyTwitAgent.sinks.HDFS.hdfs.writeFormat = Text
MyTwitAgent.sinks.HDFS.hdfs.batchSize = 1000
MyTwitAgent.sinks.HDFS.hdfs.rollSize = 0
MyTwitAgent.sinks.HDFS.hdfs.rollCount = 10000
MyTwitAgent.channels.MemChannel.type = memory
MyTwitAgent.channels.MemChannel.capacity = 10000
MyTwitAgent.channels.MemChannel.transactionCapacity = 1000

Modifique o arquivo 'Flume.conf'

Passo 2) Além disso, defina TwitterAgent.sinks.HDFS.hdfs.path como abaixo,

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/

Modifique o arquivo 'Flume.conf'

Saber , e , veja o valor do parâmetro 'fs.defaultFS' situado $HADOOP_HOME/etc/hadoop/core-site.xml

Modifique o arquivo 'Flume.conf'

Passo 3) Para liberar os dados para o HDFS, quando chegar, exclua a entrada abaixo, se existir,

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

Exemplo: streaming de dados do Twitter usando Flume

Passo 1) Abra 'flume-env.sh' no modo de gravação e definir valores para os parâmetros abaixo,

JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"

Streaming de dados do Twitter usando Flume

Passo 2) Inicie o Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Passo 3) Dois dos arquivos JAR do tarball do Flume não são compatíveis com o Hadoop 2.2.0. Portanto, precisaremos seguir as etapas abaixo neste exemplo do Apache Flume para tornar o Flume compatível com o Hadoop 2.2.0.

a. Mover protobuf-java-2.4.1.jar fora de ' /lib'.

Acesse ' /lib'

cd /lib

sudo mv protobuf-java-2.4.1.jar ~/

Streaming de dados do Twitter usando Flume

b. Encontre o arquivo JAR 'guava' conforme abaixo

find . -name "guava*"

Streaming de dados do Twitter usando Flume

Mover goiaba-10.0.1.jar fora de ' /lib'.

sudo mv guava-10.0.1.jar ~/

Streaming de dados do Twitter usando Flume

c. Baixar goiaba-17.0.jar da http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Streaming de dados do Twitter usando Flume

Agora, copie este arquivo jar baixado para ' /lib'

Passo 4) Acesse ' /bin' e inicie o Flume como-

./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf

Streaming de dados do Twitter usando Flume

Janela do prompt de comando onde o flume está buscando Tweets-

Streaming de dados do Twitter usando Flume

Na mensagem da janela de comando, podemos ver que a saída foi gravada em /usuário/hduser/flume/tweets/ diretório.

Agora, abra este diretório usando um navegador da web.

Passo 5) Para ver o resultado do carregamento de dados, usando um navegador aberto http://localhost:50070/ e navegue no sistema de arquivos e vá para o diretório onde os dados foram carregados, ou seja-

/flume/tweets/

Streaming de dados do Twitter usando Flume