Tutorial Apache Flume: O que é, ArchiExemplo de arquitetura e Hadoop
⚡ Resumo Inteligente
O Apache Flume é um serviço distribuído para coletar, agregar e mover grandes volumes de dados de log para o HDFS, construído em torno de agentes que encadeiam uma origem, um canal e um destino.
O que é Apache Flume no Hadoop?
O Apache Flume é um sistema confiável e distribuído para coletar, agregar e mover grandes quantidades de dados de log. Possui uma arquitetura simples, porém flexível, baseada em fluxos de dados contínuos. O Apache Flume é usado para coletar dados de log presentes em arquivos de log de servidores web e agregá-los em... HDFS para análise.
O Flume no Hadoop suporta múltiplas fontes, incluindo:
- 'tail' (que envia dados de um arquivo local e os grava no HDFS via Flume, semelhante ao comando 'tail' do Unix)
- Logs do sistema
- Log4j do Apache (que permite) Java aplicativos para gravar eventos em arquivos no HDFS via Flume).
A versão atual é Flume 1.11.0, publicado em 25 de outubro de 2022 e disponível em Página de download do Apache FlumeEste guia foi escrito com base na versão 1.4.0, portanto, várias etapas abaixo contêm uma observação indicando que a versão atual se comporta de maneira diferente.
Calha Archiarquitetura
Um agente Flume é um JVM O processo possui três componentes – fonte Flume, canal Flume e destino Flume – através dos quais os eventos se propagam após serem iniciados em uma fonte externa. O diagrama abaixo mostra como eles se conectam.
- Os eventos gerados pela fonte externa (um servidor web) são consumidos pela fonte Flume. A fonte externa envia eventos para a fonte Flume em um formato que a fonte de destino reconhece.
- A fonte Flume recebe um evento e o armazena em um ou mais canais. O canal funciona como um repositório que mantém o evento até que ele seja consumido pelo coletor Flume. Esse 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 o HDFS. Pode haver vários agentes Flume; nesse caso, o coletor Flume encaminha o evento para a fonte Flume do próximo agente no fluxo.
Algumas características importantes do canal de descida
- O Flume possui um design flexível baseado em fluxos de dados contínuos. É tolerante a falhas e robusto, com múltiplos mecanismos de failover e recuperação. O Flume oferece diferentes níveis de confiabilidade, incluindo 'entrega com o melhor esforço' e 'entrega de ponta a ponta'. Entrega com melhor esforço não tolera nenhuma falha nos nós do Flume, enquanto entrega de ponta a ponta Garante a entrega mesmo em caso de falhas em múltiplos nós.
- O Flume transporta dados entre fontes e destinos. Essa coleta de dados pode ser agendada ou orientada a eventos. O Flume possui seu próprio mecanismo de processamento de consultas, o que facilita a transformação de cada novo lote de dados antes de ser enviado ao destino pretendido.
- Possiveis Pias de calha incluem HDFS e HBaseO Flume também pode transportar dados de eventos, como dados de tráfego de rede, dados gerados por sites de redes sociais e mensagens de e-mail.
Configuração de flume, biblioteca e código fonte
Antes de começarmos o processo propriamente dito, certifique-se de ter o Hadoop instalado; caso contrário, siga as instruções. Como instalar o Hadoop Primeiro, altere o usuário para 'hduser' (o ID usado durante a configuração do Hadoop; você pode alternar para o ID de usuário usado durante sua própria 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
- Copie os arquivos MeuTwitterSource.java e MyTwitterSourceForFlume.java neste diretório.
Baixe os arquivos de entrada daqui
Verifique as permissões de todos esses arquivos, conforme abaixo, e conceda permissão de 'leitura' caso esteja faltando.
Passo 2) Baixe 'Apache Flume' de https://flume.apache.org/download.html.
Apache Flume 1.4.0 foi usado neste tutorial do Flume.
Em seguida, clique para acessar um espelho.
Passo 3) Copie o arquivo tarball baixado para o diretório de sua escolha e execute o comando.tracPara visualizar o conteúdo, utilize o seguinte comando.
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Isso cria um novo diretório chamado apache-flume-1.4.0-bin e extraccoloca os arquivos nele. Esse diretório é chamado de no restante do artigo.
Passo 4) Configuração da biblioteca Flume. Copie os arquivos twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar e flume-ng-sdk-1.4.0.jar para
/lib/
Um ou mais dos arquivos JAR copiados podem ter a permissão de execução definida, o que pode causar problemas na compilação do código. Portanto, revogue essa permissão. No meu caso, o arquivo twitter4j-core-4.0.1.jar tinha a permissão de execução. Eu a revoguei conforme descrito abaixo.
sudo chmod -x twitter4j-core-4.0.1.jar
Em seguida, o comando abaixo concede permissão de 'leitura' ao arquivo twitter4j-core-4.0.1.jar para todos.
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
Observe que baixei o arquivo twitter4j-core-4.0.1.jar de Repositório Mavene todos os JARs do Flume, ou seja, flume-ng-*-1.4.0.jar, de os artefatos org.apache.flume.
Carregar dados do Twitter usando Flume
Passo 1) Acesse o diretório que contém os arquivos do código-fonte.
Passo 2) Defina o CLASSPATH para 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 abaixo.
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Passo 4) Crie um arquivo JAR. Primeiro, crie um arquivo Manifest.txt usando um editor de texto de sua preferência e adicione a linha abaixo a ele.
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
Aqui, `flume.mytwittersource.MyTwitterSourceForFlume` é o nome da classe principal. Observe que você precisa pressionar a tecla Enter no final desta linha, como mostrado abaixo.
Agora, crie o arquivo JAR 'MyTwitterSourceForFlume.jar' da seguinte forma.
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Passo 5) Copie este arquivo JAR para /lib/.
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Passo 6) Acesse o diretório de configuração do Flume. /conf.
Se o arquivo flume.conf não existir, copie o arquivo flume-conf.properties.template e renomeie-o para flume.conf.
sudo cp flume-conf.properties.template flume.conf
Se o arquivo flume-env.sh não existir, copie o arquivo 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
Leia isto primeiro. O streaming v1.1 statuses/filter O endpoint necessário para o twitter4j 4.0.1 foi desativado em 9 de março de 2023, e o fluxo filtrado da API v2 que o substituiu, agora em desenvolvedor.x.com, está disponível apenas em um plano pago. Considere as telas abaixo como um padrão de origem personalizada e, em seguida, direcione o mesmo agente para uma origem de arquivo, executável ou Kafka.
Passo 1) Crie um aplicativo do Twitter fazendo login no portal do desenvolvedor.
Passo 2) Acesse "Meus aplicativos" (essa opção aparece ao clicar no botão "Ovo" no canto superior direito).
Passo 3) Crie um novo aplicativo clicando em 'Criar novo aplicativo'.
Passo 4) Preencha os detalhes da candidatura, especificando o nome da candidatura, uma descrição e um website. Pode consultar as notas indicadas abaixo de cada campo de entrada.
Passo 5) Desça a página até o final, aceite os termos marcando "Sim, concordo" e clique no botão "Criar seu aplicativo do Twitter".
Passo 6) Na janela do aplicativo recém-criado, acesse a guia '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 exibirá as configurações de 'OAuth' do aplicativo.
Passo 9) Modifique o arquivo 'flume.conf' usando estas configurações de OAuth. Os passos para modificar o 'flume.conf' são apresentados abaixo.
Precisamos copiar a chave do consumidor, o segredo do consumidor, o token de acesso e o segredo do token de acesso para atualizar o arquivo 'flume.conf'.
Nota: Esses valores pertencem ao usuário e, portanto, são confidenciais, não devendo ser compartilhados.
Modifique o arquivo 'flume.conf'
Passo 1) Abra o arquivo 'flume.conf' em modo de escrita e defina os 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 conforme abaixo.
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/
Para encontrar , e , veja o valor do parâmetro 'fs.defaultFS' definido em $HADOOP_HOME/etc/hadoop/core-site.xml, mostrado abaixo.
Passo 3) Para que os dados sejam gravados no HDFS assim que chegarem, exclua a entrada abaixo, caso exista.
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Exemplo: streaming de dados do Twitter usando Flume
Passo 1) Abra o arquivo 'flume-env.sh' em modo de escrita e defina os 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 pacote tar do Flume não são compatíveis com o Hadoop 2.2.0, portanto, neste exemplo do Apache Flume, seguimos os passos abaixo para tornar o Flume compatível com o Hadoop 2.2.0. Essa troca de JAR é uma correção da era 1.4.0; o Flume 1.11.0 já inclui versões atualizadas do protobuf e do Guava, então um pacote tar moderno normalmente não precisa disso.
a. Mova o arquivo protobuf-java-2.4.1.jar para fora de ' /lib'. Acesse esse diretório primeiro.
cd /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Localize o arquivo JAR 'guava' conforme abaixo.
find . -name "guava*"
Mova o arquivo guava-10.0.1.jar para fora de ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Baixe o arquivo guava-17.0.jar de Repositório Maven, mostrado abaixo.
Agora, copie este arquivo JAR baixado para ' /lib'.
Passo 4) Vá para ' /bin' e inicie o Flume da seguinte forma.
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
A janela do prompt de comando onde o Flume está buscando tweets tem esta aparência.
Pela mensagem na janela de comando, podemos ver que a saída foi gravada no diretório /user/hduser/flume/tweets/. Agora, abra este diretório usando um navegador da web.
Passo 5) Para ver o resultado do carregamento de dados, abra http://localhost:50070/ em um navegador, navegue pelo sistema de arquivos e acesse o diretório onde os dados foram carregados.
/flume/tweets/
A porta 50070 é a da interface web do NameNode no Hadoop 2; o Hadoop 3 moveu a mesma página para a porta 9870.
Flume é metade da ingestão: Sqoop Importa tabelas em lotes, o Flume transmite eventos e então Porco or Colméia formatar os arquivos e oozie Os horários da cadeia. Veja também ferramentas de análise de big data, MapReduce: junções e contadores e Talend.


































