Tutorial su Apache Flume: cos'è Archiarchitettura e esempio Hadoop
Cos'è Apache Flume in Hadoop?
Canale Apache è un sistema affidabile e distribuito per la raccolta, l'aggregazione e lo spostamento di grandi quantità di dati di log. Ha un'architettura semplice ma flessibile basata su flussi di dati in streaming. Apache Flume è utilizzato per raccogliere i dati di log presenti nei file di log dai server Web e aggregarli in HDFS per l'analisi.
Flume in Hadoop supporta più fonti come:
- 'tail' (che convoglia i dati da un file locale e li scrive in HDFS tramite Flume, simile al comando Unix 'tail')
- Registri di sistema
- Apache log4j (abilitare Java applicazioni per scrivere eventi su file in HDFS tramite Flume).
Canale artificiale Architectura
A Agente di canale è un JVM processo che ha 3 componenti –Fonte del canale d'acqua, Canale del canale e Lavandino del canale– attraverso il quale gli eventi si propagano dopo essere iniziati da una fonte esterna.

- Nel diagramma sopra, gli eventi generati da una fonte esterna (WebServer) vengono consumati da Flume Data Source. La sorgente esterna invia eventi alla sorgente Flume in un formato riconosciuto dalla sorgente di destinazione.
- Flume Source riceve un evento e lo memorizza in uno o più canali. Il canale funge da archivio che conserva l'evento finché non viene consumato dal lavandino del canale artificiale. Questo canale può utilizzare un file system locale per memorizzare questi eventi.
- Flume sink rimuove l'evento da un canale e lo memorizza in un repository esterno come ad esempio HDFS. Potrebbero essere presenti più agenti del canale, nel qual caso il pozzo del canale inoltra l'evento all'origine del canale del successivo agente del canale nel flusso.
Alcune caratteristiche importanti di FLUME
- Flume ha un design flessibile basato sui flussi di dati in streaming. È resistente ai guasti e robusto con più failover e meccanismi di ripristino. Flume Big data ha diversi livelli di affidabilità da offrire, inclusi "consegna con il massimo sforzo" e "consegna end-to-end". consegna con il miglior sforzo non tollera alcun guasto del nodo del canale mentre "consegna end-to-end" la modalità garantisce la consegna anche in caso di guasti a più nodi.
- Il canale trasporta i dati tra sorgenti e pozzi. Questa raccolta di dati può essere programmata o guidata da eventi. Flume dispone di un proprio motore di elaborazione delle query che semplifica la trasformazione di ogni nuovo batch di dati prima che venga spostato nel sink previsto.
- Possibile Il canale affonda includere HDFS e Base HFlume Hadoop può essere utilizzato anche per trasportare dati di eventi, inclusi, a titolo esemplificativo ma non esaustivo, dati sul traffico di rete, dati generati da siti di social media e messaggi di posta elettronica.
Impostazione del canale, della libreria e del codice sorgente
Prima di iniziare con il processo vero e proprio, assicurati di aver installato Hadoop. Cambia utente in "hduser" (id utilizzato durante la configurazione di Hadoop, puoi passare all'id utente utilizzato durante la configurazione di Hadoop)
Passo 1) Crea una nuova directory con il nome "FlumeTutorial"
sudo mkdir FlumeTutorial
- Concedere i permessi di lettura, scrittura ed esecuzione
sudo chmod -R 777 FlumeTutorial
- Copia i file MyTwitterSource.java e MyTwitterSourceForFlume.java in questa directory.
Scarica i file di input da qui
Controlla i permessi di tutti questi file e se mancano i permessi di "lettura", concedi lo stesso-
Passo 2) Scarica "Apache Flume" da un sito- https://flume.apache.org/download.html
In questo tutorial su Flume è stato utilizzato Apache Flume 1.4.0.
Fare clic su Avanti
Passo 3) Copia il tarball scaricato nella directory di tua scelta ed estrai il contenuto utilizzando il seguente comando
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Questo comando creerà una nuova directory denominata apache-flume-1.4.0-bin ed estrai i file al suo interno. Questa directory verrà chiamata nel resto dell'articolo.
Passo 4) Configurazione della libreria del canale
Copia 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 a
/lib/
È possibile che uno o tutti i JAR copiati debbano eseguire l'autorizzazione. Ciò potrebbe causare problemi con la compilazione del codice. Quindi, revoca il permesso di esecuzione su tale JAR.
Nel mio caso, twitter4j-core-4.0.1.jar era dover eseguire il permesso. L'ho revocato come di seguito-
sudo chmod -x twitter4j-core-4.0.1.jar
Dopo che questo comando dà il permesso di "lettura". twitter4j-core-4.0.1.jar a tutti.
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
Tieni presente che ho scaricato-
– twitter4j-core-4.0.1.jar da https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
- Tutti i JAR di fiamma, ad es. flume-ng-*-1.4.0.jar da http://mvnrepository.com/artifact/org.apache.flume
Carica i dati da Twitter utilizzando Flume
Passo 1) Vai alla directory contenente i file del codice sorgente.
Passo 2) Impostato PERCORSO DI CLASSE contenere /lib/* e ~/FlumeTutorial/flume/mytwittersource/*
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
Passo 3) Compila il codice sorgente utilizzando il comando-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Passo 4)Crea un barattolo
Innanzitutto, crea Manifesto.txt file utilizzando un editor di testo di tua scelta e aggiungi la riga seguente al suo interno-
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. Qui flume.mytwittersource.MyTwitterSourceForFlume è il nome della classe principale. Tieni presente che devi premere il tasto Invio alla fine di questa riga.
Ora crea JAR 'MyTwitterSourceForFlume.jar' come-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Passo 5) Copia questo barattolo in /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Passo 6) Vai alla directory di configurazione di Flume, /conf
Se flume.conf non esiste, copia flume-conf.properties.template e rinominalo in flume.conf
sudo cp flume-conf.properties.template flume.conf
If canale-env.sh non esiste, quindi copia flume-env.sh.template e rinominalo in canale-env.sh
sudo cp flume-env.sh.template flume-env.sh
Creazione di un'applicazione Twitter
Passo 1) Crea un'applicazione Twitter accedendo a https://developer.twitter.com/
Passo 2) Vai su "Le mie candidature" (Questa opzione viene eliminata quando 'Uovo' viene fatto clic sul pulsante nell'angolo in alto a destra)
Passo 3) Creare una nuova applicazione facendo clic "Crea nuova app"
Passo 4) Compila i dettagli dell'applicazione specificando il nome dell'applicazione, la descrizione e il sito web. Puoi fare riferimento alle note fornite sotto ogni casella di input.
Passo 5) Scorri la pagina verso il basso e accetta i termini contrassegnandoli 'Si, sono d'accordo' e fare clic sul pulsante"Crea la tua applicazione Twitter"
Passo 6) Nella finestra di un'applicazione appena creata, vai alla scheda, Chiavi API scorrere la pagina verso il basso e fare clic sul pulsante "Crea il mio token di accesso"
Passo 7) Ricarica la pagina.
Passo 8) Fare clic su "Prova OAuth". Questo verrà visualizzato "OAuth" impostazioni dell'applicazione.
Passo 9) modificare 'canale.conf' usando questi Impostazioni OAuth. Passaggi da modificare 'canale.conf' sono riportati di seguito.
Dobbiamo copiare la chiave del consumatore, il segreto del consumatore, il token di accesso e il segreto del token di accesso per aggiornare "flume.conf".
Nota: questi valori appartengono all'utente e pertanto sono riservati, pertanto non devono essere condivisi.
Modifica il file "flume.conf".
Passo 1) Apri 'canale.conf' in modalità scrittura e impostare i valori per i parametri seguenti:
sudo gedit flume.conf
Copia il contenuto qui sotto-
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) Inoltre, imposta TwitterAgent.sinks.HDFS.hdfs.percorso come sotto,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /canale d'acqua/tweet/
Sapere , e , vedere il valore del parametro 'fs.defaultFS' ambientato $HADOOP_HOME/etc/hadoop/core-site.xml
Passo 3) Per trasferire i dati su HDFS, quando arrivano, elimina la voce seguente se esiste,
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Esempio: streaming di dati Twitter utilizzando Flume
Passo 1) Apri 'canale-env.sh' in modalità scrittura e impostare i valori per i parametri seguenti,
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
Passo 2) Avvia Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Passo 3) Due dei file JAR del tarball Flume non sono compatibili con Hadoop 2.2.0. Quindi, dovremo seguire i passaggi seguenti in questo esempio di Apache Flume per rendere Flume compatibile con Hadoop 2.2.0.
a. Sposta protobuf-java-2.4.1.jar su ' /lib'.
Vai su ' /lib'
CD /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Trova il file JAR "guava" come di seguito
find . -name "guava*"
Sposta guava-10.0.1.jar su ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Scaricare guava-17.0.jar da http://mvnrepository.com/artifact/com.google.guava/guava/17.0
Ora copia questo file jar scaricato in ' /lib'
Passo 4) Vai su ' /bidone' e avvia Flume as-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Finestra del prompt dei comandi in cui il canale artificiale recupera i tweet-
Dal messaggio della finestra di comando possiamo vedere che l'output è stato scritto /utente/hduser/canale/tweets/ directory.
Ora apri questa directory utilizzando un browser web.
Passo 5) Per vedere il risultato del caricamento dei dati, utilizzare un browser aperto http://localhost:50070/ e sfoglia il file system, quindi vai alla directory in cui sono stati caricati i dati, ovvero-
/canale d'acqua/tweet/