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.

Canale artificiale Architectura
Canale artificiale Architectura
  1. 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.
  2. 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.
  3. 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)

Configurazione del canale artificiale, della biblioteca e del codice sorgente

Passo 1) Crea una nuova directory con il nome "FlumeTutorial"

sudo mkdir FlumeTutorial
  1. Concedere i permessi di lettura, scrittura ed esecuzione
    sudo chmod -R 777 FlumeTutorial
  2. 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-

Configurazione del canale artificiale, della biblioteca e del codice sorgente

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.

Configurazione del canale artificiale, della biblioteca e del codice sorgente

Fare clic su Avanti

Configurazione del canale artificiale, della biblioteca e del codice sorgente

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

Configurazione del canale artificiale, della biblioteca e del codice sorgente

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

Configurazione del canale artificiale, della biblioteca e del codice sorgente

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/*"

Carica i dati da Twitter utilizzando Flume

Passo 3) Compila il codice sorgente utilizzando il comando-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Carica i dati da Twitter utilizzando Flume

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.

Carica i dati da Twitter utilizzando Flume

Ora crea JAR 'MyTwitterSourceForFlume.jar' come-

jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class

Carica i dati da Twitter utilizzando Flume

Passo 5) Copia questo barattolo in /lib/

sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/

Carica i dati da Twitter utilizzando Flume

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

Carica i dati da Twitter utilizzando Flume

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

Carica i dati da Twitter utilizzando Flume

Creazione di un'applicazione Twitter

Passo 1) Crea un'applicazione Twitter accedendo a https://developer.twitter.com/

Creazione di un'applicazione Twitter

Creazione di un'applicazione Twitter

Passo 2) Vai su "Le mie candidature" (Questa opzione viene eliminata quando 'Uovo' viene fatto clic sul pulsante nell'angolo in alto a destra)

Creazione di un'applicazione Twitter

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.

Creazione di un'applicazione Twitter

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"

Creazione di un'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"

Creazione di un'applicazione Twitter

Creazione di un'applicazione Twitter

Passo 7) Ricarica la pagina.

Passo 8) Fare clic su "Prova OAuth". Questo verrà visualizzato "OAuth" impostazioni dell'applicazione.

Creazione di un'applicazione Twitter

Passo 9) modificare 'canale.conf' usando questi Impostazioni OAuth. Passaggi da modificare 'canale.conf' sono riportati di seguito.

Creazione di un'applicazione Twitter

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

Modifica il file "Flume.conf".

Passo 2) Inoltre, imposta TwitterAgent.sinks.HDFS.hdfs.percorso come sotto,

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /canale d'acqua/tweet/

Modifica il file "Flume.conf".

Sapere , e , vedere il valore del parametro 'fs.defaultFS' ambientato $HADOOP_HOME/etc/hadoop/core-site.xml

Modifica il file "Flume.conf".

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"

Streaming di dati Twitter utilizzando Flume

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 ~/

Streaming di dati Twitter utilizzando Flume

b. Trova il file JAR "guava" come di seguito

find . -name "guava*"

Streaming di dati Twitter utilizzando Flume

Sposta guava-10.0.1.jar su ' /lib'.

sudo mv guava-10.0.1.jar ~/

Streaming di dati Twitter utilizzando Flume

c. Scaricare guava-17.0.jar da http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Streaming di dati Twitter utilizzando Flume

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

Streaming di dati Twitter utilizzando Flume

Finestra del prompt dei comandi in cui il canale artificiale recupera i tweet-

Streaming di dati Twitter utilizzando Flume

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/

Streaming di dati Twitter utilizzando Flume