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.

- 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.
- 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.
- 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)
Passo 1) Crie um novo diretório com o nome 'FlumeTutorial'
sudo mkdir FlumeTutorial
- Conceda permissões de leitura, gravação e execução
sudo chmod -R 777 FlumeTutorial
- 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-
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.
Próximo clique
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
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
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/*"
Passo 3) Compile o código-fonte usando o comando-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
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.
Agora, crie JAR 'MyTwitterSourceForFlume.jar' Como-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Passo 5) Copie este jar para /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
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
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
Criando um aplicativo do Twitter
Passo 1) Crie um aplicativo do Twitter fazendo login em https://developer.twitter.com/
Passo 2) Acesse 'As minhas aplicações' (Esta opção é desativada quando 'Ovo' botão no canto superior direito é clicado)
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.
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'
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'
Passo 7) Recarregue a página.
Passo 8) Clique em 'Testar OAuth'. Isso vai mostrar 'OAuth' configurações do aplicativo.
Passo 9) modificar 'flume.conf' usando estes Configurações de OAuth. Etapas para modificar 'flume.conf' são dados abaixo.
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
Passo 2) Além disso, defina TwitterAgent.sinks.HDFS.hdfs.path como abaixo,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/
Saber , e , veja o valor do parâmetro 'fs.defaultFS' situado $HADOOP_HOME/etc/hadoop/core-site.xml
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"
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 ~/
b. Encontre o arquivo JAR 'guava' conforme abaixo
find . -name "guava*"
Mover goiaba-10.0.1.jar fora de ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Baixar goiaba-17.0.jar da http://mvnrepository.com/artifact/com.google.guava/guava/17.0
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
Janela do prompt de comando onde o flume está buscando Tweets-
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/