Apache Flume - Recupero dei dati di Twitter

Utilizzando Flume, possiamo recuperare i dati da vari servizi e trasportarli in archivi centralizzati (HDFS e HBase). Questo capitolo spiega come recuperare i dati dal servizio Twitter e archiviarli in HDFS utilizzando Apache Flume.

Come discusso in Flume Architecture, un server web genera dati di log e questi dati vengono raccolti da un agente in Flume. Il canale memorizza questi dati in un sink, che alla fine li invia agli archivi centralizzati.

Nell'esempio fornito in questo capitolo, creeremo un'applicazione e ne ricaveremo i tweet utilizzando il sorgente Twitter sperimentale fornito da Apache Flume. Useremo il canale di memoria per bufferizzare questi tweet e il sink HDFS per spingerli nell'HDFS.

Per recuperare i dati di Twitter, dovremo seguire i passaggi indicati di seguito:

  • Crea un'applicazione Twitter
  • Installa / avvia HDFS
  • Configura Flume

Creazione di un'applicazione Twitter

Per ottenere i tweet da Twitter, è necessario creare un'applicazione Twitter. Segui i passaggi indicati di seguito per creare un'applicazione Twitter.

Passo 1

Per creare un'applicazione Twitter, fare clic sul seguente collegamento https://apps.twitter.com/. Accedi al tuo account Twitter. Avrai una finestra di gestione delle applicazioni Twitter in cui puoi creare, eliminare e gestire le app Twitter.

Passo 2

Clicca sul Create New Apppulsante. Verrai reindirizzato a una finestra in cui otterrai un modulo di domanda in cui dovrai inserire i tuoi dati per creare l'App. Durante l'inserimento dell'indirizzo del sito web, fornire il pattern URL completo, ad esempio,http://example.com.

Passaggio 3

Compila i dettagli, accetta il Developer Agreement al termine, fare clic sul file Create your Twitter application buttonche si trova in fondo alla pagina. Se tutto va bene, verrà creata un'app con i dettagli forniti come mostrato di seguito.

Passaggio 4

Sotto keys and Access Tokens scheda nella parte inferiore della pagina, puoi osservare un pulsante denominato Create my access token. Fare clic su di esso per generare il token di accesso.

Passaggio 5

Infine, fai clic sul file Test OAuthpulsante che si trova nella parte superiore destra della pagina. Questo porterà a una pagina che mostra il tuoConsumer key, Consumer secret, Access token, e Access token secret. Copia questi dettagli. Questi sono utili per configurare l'agente in Flume.

Avvio di HDFS

Dato che stiamo archiviando i dati in HDFS, dobbiamo installare / verificare Hadoop. Avvia Hadoop e crea una cartella al suo interno per archiviare i dati Flume. Seguire i passaggi indicati di seguito prima di configurare Flume.

Passaggio 1: installa / verifica Hadoop

Installa Hadoop . Se Hadoop è già installato nel tuo sistema, verifica l'installazione utilizzando il comando della versione di Hadoop, come mostrato di seguito.

$ hadoop version

Se il tuo sistema contiene Hadoop e se hai impostato la variabile del percorso, otterrai il seguente output:

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

Passaggio 2: avvio di Hadoop

Sfoglia il file sbin directory di Hadoop e avvia filato e Hadoop dfs (file system distribuito) come mostrato di seguito.

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

Passaggio 3: creare una directory in HDFS

In Hadoop DFS, puoi creare directory utilizzando il comando mkdir. Sfoglialo e crea una directory con il nometwitter_data nel percorso richiesto come mostrato di seguito.

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

Configurazione di Flume

Dobbiamo configurare l'origine, il canale e il sink utilizzando il file di configurazione in confcartella. L'esempio fornito in questo capitolo utilizza una fonte sperimentale fornita da Apache Flume denominataTwitter 1% Firehose Canale di memoria e sink HDFS.

Twitter 1% Firehose Fonte

Questa fonte è altamente sperimentale. Si collega al Twitter Firehose campione dell'1% utilizzando l'API di streaming e scarica continuamente i tweet, li converte in formato Avro e invia gli eventi Avro a un sink Flume a valle.

Otterremo questa fonte per impostazione predefinita insieme all'installazione di Flume. Iljar i file corrispondenti a questa origine possono essere posizionati nel file lib cartella come mostrato di seguito.

Impostazione del classpath

Impostare il classpath variabile al lib cartella di Flume in Flume-env.sh file come mostrato di seguito.

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

Questa fonte ha bisogno di dettagli come Consumer key, Consumer secret, Access token, e Access token secretdi un'applicazione Twitter. Durante la configurazione di questa sorgente, è necessario fornire valori alle seguenti proprietà:

  • Channels

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

  • consumerKey - La chiave utente OAuth

  • consumerSecret - Segreto del consumatore OAuth

  • accessToken - Token di accesso OAuth

  • accessTokenSecret - Token segreto OAuth

  • maxBatchSize- Numero massimo di messaggi Twitter che dovrebbero essere in un batch Twitter. Il valore predefinito è 1000 (opzionale).

  • maxBatchDurationMillis- Numero massimo di millisecondi da attendere prima di chiudere un batch. Il valore predefinito è 1000 (opzionale).

Canale

Stiamo usando il canale di memoria. Per configurare il canale di memoria, è necessario fornire un valore al tipo di canale.

  • type- Contiene il tipo di canale. Nel nostro esempio, il tipo èMemChannel.

  • Capacity- È il numero massimo di eventi memorizzati nel canale. Il suo valore predefinito è 100 (opzionale).

  • TransactionCapacity- È il numero massimo di eventi che il canale accetta o invia. Il suo valore predefinito è 100 (opzionale).

Lavello HDFS

Questo sink scrive i dati nell'HDFS. Per configurare questo sink, è necessario fornire i seguenti dettagli.

  • Channel

  • type - hdfs

  • hdfs.path - il percorso della directory in HDFS in cui devono essere archiviati i dati.

E possiamo fornire alcuni valori opzionali basati sullo scenario. Di seguito sono riportate le proprietà opzionali del sink HDFS che stiamo configurando nella nostra applicazione.

  • fileType - Questo è il formato file richiesto del nostro file HDFS. SequenceFile, DataStream e CompressedStreamsono i tre tipi disponibili con questo flusso. Nel nostro esempio, stiamo usando ilDataStream.

  • writeFormat - Potrebbe essere di testo o scrivibile.

  • batchSize- È il numero di eventi scritti in un file prima che venga scaricato nell'HDFS. Il suo valore predefinito è 100.

  • rollsize- È la dimensione del file per attivare un rotolo. Il valore predefinito è 100.

  • rollCount- È il numero di eventi scritti nel file prima che venga eseguito il rollio. Il suo valore predefinito è 10.

Esempio: file di configurazione

Di seguito è riportato un esempio del file di configurazione. Copia questo contenuto e salva con nometwitter.conf nella cartella conf di 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

Esecuzione

Sfoglia la home directory di Flume ed esegui l'applicazione come mostrato di seguito.

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

Se tutto va bene, inizierà lo streaming dei tweet in HDFS. Di seguito è riportata l'istantanea della finestra del prompt dei comandi durante il recupero dei tweet.

Verifica di HDFS

È possibile accedere all'interfaccia utente Web di amministrazione di Hadoop utilizzando l'URL fornito di seguito.

http://localhost:50070/

Fare clic sul menu a discesa denominato Utilitiessul lato destro della pagina. Puoi vedere due opzioni come mostrato nell'istantanea riportata di seguito.

Clicca su Browse the file systeme inserisci il percorso della directory HDFS in cui hai archiviato i tweet. Nel nostro esempio, il percorso sarà/user/Hadoop/twitter_data/. Quindi, puoi vedere l'elenco dei file di registro di Twitter archiviati in HDFS come indicato di seguito.