Apache Flume - Buscando dados do Twitter

Usando o Flume, podemos buscar dados de vários serviços e transportá-los para armazenamentos centralizados (HDFS e HBase). Este capítulo explica como buscar dados do serviço Twitter e armazená-los no HDFS usando o Apache Flume.

Conforme discutido na Arquitetura do Flume, um servidor da web gera dados de log e esses dados são coletados por um agente no Flume. O canal armazena esses dados em um coletor, que finalmente os empurra para armazenamentos centralizados.

No exemplo fornecido neste capítulo, criaremos um aplicativo e obteremos os tweets dele usando a fonte experimental do Twitter fornecida pelo Apache Flume. Usaremos o canal de memória para armazenar esses tweets e coletor de HDFS para enviar esses tweets para o HDFS.

Para buscar dados do Twitter, teremos que seguir as etapas abaixo -

  • Crie um aplicativo do Twitter
  • Instalar / iniciar HDFS
  • Configurar Flume

Criação de um aplicativo do Twitter

Para obter os tweets do Twitter, é necessário criar um aplicativo Twitter. Siga as etapas fornecidas abaixo para criar um aplicativo Twitter.

Passo 1

Para criar um aplicativo do Twitter, clique no link a seguir https://apps.twitter.com/. Faça login em sua conta do Twitter. Você terá uma janela de gerenciamento de aplicativos do Twitter onde pode criar, excluir e gerenciar aplicativos do Twitter.

Passo 2

Clique no Create New Appbotão. Você será redirecionado para uma janela onde obterá um formulário de inscrição no qual deverá preencher seus dados para criar o Aplicativo. Ao preencher o endereço do site, forneça o padrão de URL completo, por exemplo,http://example.com.

etapa 3

Preencha os detalhes, aceite o Developer Agreement quando terminar, clique no Create your Twitter application buttonque está na parte inferior da página. Se tudo correr bem, um aplicativo será criado com os detalhes fornecidos, conforme mostrado abaixo.

Passo 4

Sob keys and Access Tokens guia na parte inferior da página, você pode observar um botão chamado Create my access token. Clique nele para gerar o token de acesso.

Etapa 5

Por fim, clique no Test OAuthbotão que está no topo do lado direito da página. Isso levará a uma página que exibe o seuConsumer key, Consumer secret, Access token, e Access token secret. Copie esses detalhes. Eles são úteis para configurar o agente no Flume.

Iniciando HDFS

Como estamos armazenando os dados no HDFS, precisamos instalar / verificar o Hadoop. Inicie o Hadoop e crie uma pasta nele para armazenar os dados do Flume. Siga as etapas fornecidas abaixo antes de configurar o Flume.

Etapa 1: instalar / verificar o Hadoop

Instale o Hadoop . Se o Hadoop já estiver instalado em seu sistema, verifique a instalação usando o comando de versão do Hadoop, conforme mostrado abaixo.

$ hadoop version

Se o seu sistema contém Hadoop, e se você definiu a variável de caminho, você obterá a seguinte saída -

Hadoop 2.6.0 
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 
e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1 
Compiled by jenkins on 2014-11-13T21:10Z 
Compiled with protoc 2.5.0 
From source with checksum 18e43357c8f927c0695f1e9522859d6a 
This command was run using /home/Hadoop/hadoop/share/hadoop/common/hadoop-common-2.6.0.jar

Etapa 2: Iniciando o Hadoop

Navegue pelo sbin diretório do Hadoop e inicie yarn e Hadoop dfs (sistema de arquivos distribuído) conforme mostrado abaixo.

cd /$Hadoop_Home/sbin/ 
$ start-dfs.sh 
localhost: starting namenode, logging to
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-namenode-localhost.localdomain.out 
localhost: starting datanode, logging to 
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-datanode-localhost.localdomain.out 
Starting secondary namenodes [0.0.0.0] 
starting secondarynamenode, logging to 
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-secondarynamenode-localhost.localdomain.out
  
$ start-yarn.sh 
starting yarn daemons 
starting resourcemanager, logging to 
   /home/Hadoop/hadoop/logs/yarn-Hadoop-resourcemanager-localhost.localdomain.out 
localhost: starting nodemanager, logging to 
   /home/Hadoop/hadoop/logs/yarn-Hadoop-nodemanager-localhost.localdomain.out

Etapa 3: crie um diretório no HDFS

No Hadoop DFS, você pode criar diretórios usando o comando mkdir. Navegue por ele e crie um diretório com o nometwitter_data no caminho necessário conforme mostrado abaixo.

$cd /$Hadoop_Home/bin/ 
$ hdfs dfs -mkdir hdfs://localhost:9000/user/Hadoop/twitter_data

Configurando Flume

Temos que configurar a fonte, o canal e o coletor usando o arquivo de configuração no confpasta. O exemplo dado neste capítulo usa uma fonte experimental fornecida pelo Apache Flume chamadaTwitter 1% Firehose Canal de memória e coletor de HDFS.

Fonte 1% Firehose no Twitter

Esta fonte é altamente experimental. Ele se conecta ao Firehose do Twitter de 1% de amostra usando API de streaming e baixa tweets continuamente, converte-os para o formato Avro e envia eventos Avro para um coletor de fluxo de fluxo.

Obteremos essa fonte por padrão junto com a instalação do Flume. ojar os arquivos correspondentes a esta fonte podem ser localizados no lib pasta conforme mostrado abaixo.

Configurando o classpath

Colocou o classpath variável para o lib pasta do Flume em Flume-env.sh arquivo como mostrado abaixo.

export CLASSPATH=$CLASSPATH:/FLUME_HOME/lib/*

Esta fonte precisa de detalhes como Consumer key, Consumer secret, Access token, e Access token secretde um aplicativo do Twitter. Ao configurar esta fonte, você deve fornecer valores para as seguintes propriedades -

  • Channels

  • Source type : org.apache.flume.source.twitter.TwitterSource

  • consumerKey - A chave do consumidor OAuth

  • consumerSecret - segredo do consumidor OAuth

  • accessToken - token de acesso OAuth

  • accessTokenSecret - segredo do token OAuth

  • maxBatchSize- Número máximo de mensagens do Twitter que devem estar em um lote do Twitter. O valor padrão é 1000 (opcional).

  • maxBatchDurationMillis- Número máximo de milissegundos a aguardar antes de fechar um lote. O valor padrão é 1000 (opcional).

Canal

Estamos usando o canal de memória. Para configurar o canal de memória, você deve fornecer um valor para o tipo de canal.

  • type- Contém o tipo de canal. Em nosso exemplo, o tipo éMemChannel.

  • Capacity- É o número máximo de eventos armazenados no canal. Seu valor padrão é 100 (opcional).

  • TransactionCapacity- É o número máximo de eventos que o canal aceita ou envia. Seu valor padrão é 100 (opcional).

HDFS Sink

Este coletor grava dados no HDFS. Para configurar este coletor, você deve fornecer os seguintes detalhes.

  • Channel

  • type - hdfs

  • hdfs.path - o caminho do diretório no HDFS onde os dados devem ser armazenados.

E podemos fornecer alguns valores opcionais com base no cenário. Abaixo estão as propriedades opcionais do coletor HDFS que estamos configurando em nosso aplicativo.

  • fileType - Este é o formato de arquivo necessário para nosso arquivo HDFS. SequenceFile, DataStream e CompressedStreamsão os três tipos disponíveis com este fluxo. Em nosso exemplo, estamos usando oDataStream.

  • writeFormat - Pode ser texto ou gravável.

  • batchSize- É o número de eventos gravados em um arquivo antes de ser descarregado no HDFS. Seu valor padrão é 100.

  • rollsize- É o tamanho do arquivo para desencadear um rolo. Seu valor padrão é 100.

  • rollCount- É o número de eventos gravados no arquivo antes de rolá-lo. Seu valor padrão é 10.

Exemplo - arquivo de configuração

A seguir está um exemplo do arquivo de configuração. Copie este conteúdo e salve comotwitter.conf na pasta conf do Flume.

# Naming the components on the current agent. 
TwitterAgent.sources = Twitter 
TwitterAgent.channels = MemChannel 
TwitterAgent.sinks = HDFS
  
# Describing/Configuring the source 
TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.consumerKey = Your OAuth consumer key
TwitterAgent.sources.Twitter.consumerSecret = Your OAuth consumer secret 
TwitterAgent.sources.Twitter.accessToken = Your OAuth consumer key access token 
TwitterAgent.sources.Twitter.accessTokenSecret = Your OAuth consumer key access token secret 
TwitterAgent.sources.Twitter.keywords = tutorials point,java, bigdata, mapreduce, mahout, hbase, nosql
  
# Describing/Configuring the sink 

TwitterAgent.sinks.HDFS.type = hdfs 
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://localhost:9000/user/Hadoop/twitter_data/
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream 
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text 
TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0 
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000 
 
# Describing/Configuring the channel 
TwitterAgent.channels.MemChannel.type = memory 
TwitterAgent.channels.MemChannel.capacity = 10000 
TwitterAgent.channels.MemChannel.transactionCapacity = 100
  
# Binding the source and sink to the channel 
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sinks.HDFS.channel = MemChannel

Execução

Navegue pelo diretório inicial do Flume e execute o aplicativo conforme mostrado abaixo.

$ cd $FLUME_HOME 
$ bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf 
Dflume.root.logger=DEBUG,console -n TwitterAgent

Se tudo correr bem, o streaming de tweets para HDFS começará. A seguir está o instantâneo da janela do prompt de comando durante a busca de tweets.

Verificando HDFS

Você pode acessar a Hadoop Administration Web UI usando o URL fornecido a seguir.

http://localhost:50070/

Clique na lista suspensa chamada Utilitiesno lado direito da página. Você pode ver duas opções, conforme mostrado no instantâneo fornecido abaixo.

Clique em Browse the file systeme digite o caminho do diretório HDFS onde você armazenou os tweets. Em nosso exemplo, o caminho será/user/Hadoop/twitter_data/. Em seguida, você pode ver a lista de arquivos de log do Twitter armazenados no HDFS conforme mostrado abaixo.