Apache Flume Tutorial: Hva er, Architecture & Hadoop Eksempel

Hva er Apache Flume i Hadoop?

Apache Flume er et pålitelig og distribuert system for innsamling, aggregering og flytting av enorme mengder loggdata. Den har en enkel, men fleksibel arkitektur basert på strømming av datastrømmer. Apache Flume brukes til å samle inn loggdata som finnes i loggfiler fra webservere og aggregere dem til HDFS for analyse.

Flume i Hadoop støtter flere kilder som -

  • 'tail' (som sender data fra en lokal fil og skriver inn i HDFS via Flume, på samme måte som Unix-kommandoen 'tail')
  • Systemlogger
  • Apache log4j (muliggjøre Java applikasjoner for å skrive hendelser til filer i HDFS via Flume).

Flume Architecture

A Flue agent er en JVM prosess som har 3 komponenter -Flume kilde, Flume Channel og Flume vask– gjennom hvilke hendelser forplanter seg etter initiert ved en ekstern kilde.

Flume Architecture
Flume Architecture
  1. I diagrammet ovenfor blir hendelsene generert av ekstern kilde (WebServer) konsumert av Flume Data Source. Den eksterne kilden sender hendelser til Flume-kilden i et format som gjenkjennes av målkilden.
  2. Flume Source mottar en hendelse og lagrer den i en eller flere kanaler. Kanalen fungerer som et lager som holder arrangementet til det konsumeres av rennevasken. Denne kanalen kan bruke et lokalt filsystem for å lagre disse hendelsene.
  3. Flume sink fjerner hendelsen fra en kanal og lagrer den i et eksternt depot som f.eks. HDFS. Det kan være flere flume-midler, i så fall sender flume-synk hendelsen videre til flumkilden til neste flumemiddel i strømmen.

Noen viktige funksjoner i FLUME

  • Flume har en fleksibel design basert på datastrømmer. Den er feiltolerant og robust med flere failovers og gjenopprettingsmekanismer. Flume Big data har ulike nivåer av pålitelighet å tilby som inkluderer "levering på best mulig måte" og en "ende-til-ende levering". Best mulig levering tolererer ikke svikt i Flume node "ende-til-ende levering" modus garanterer levering selv ved flere nodefeil.
  • Flume fører data mellom kilder og synker. Denne innsamlingen av data kan enten være planlagt eller hendelsesdrevet. Flume har sin egen spørringsbehandlingsmotor som gjør det enkelt å transformere hver nye batch med data før den flyttes til den tiltenkte vasken.
  • Mulig Flume synker inkludere HDFS og HBase. Flume Hadoop kan også brukes til å transportere hendelsesdata, inkludert men ikke begrenset til nettverkstrafikkdata, data generert av sosiale medier-nettsteder og e-postmeldinger.

Flume, bibliotek og kildekodeoppsett

Før vi starter med selve prosessen, sørg for at du har Hadoop installert. Endre bruker til 'hduser' (id brukt mens Hadoop konfigurasjon, du kan bytte til bruker-ID som ble brukt under Hadoop-konfigurasjonen)

Flume, bibliotek og kildekodeoppsett

Trinn 1) Opprett en ny katalog med navnet "FlumeTutorial"

sudo mkdir FlumeTutorial
  1. Gi lese-, skrive- og utføringstillatelser
    sudo chmod -R 777 FlumeTutorial
  2. Kopier filer MyTwitterSource.java og MyTwitterSourceForFlume.java i denne katalogen.

Last ned inndatafiler herfra

Sjekk filtillatelsene til alle disse filene, og hvis "lese"-tillatelser mangler, gi de samme-

Flume, bibliotek og kildekodeoppsett

Trinn 2) Last ned 'Apache Flume' fra et nettsted- https://flume.apache.org/download.html

Apache Flume 1.4.0 har blitt brukt i denne Flume-opplæringen.

Flume, bibliotek og kildekodeoppsett

Neste Klikk

Flume, bibliotek og kildekodeoppsett

Trinn 3) Kopier den nedlastede tarballen i katalogen du ønsker og trekk ut innholdet ved å bruke følgende kommando

sudo tar -xvf apache-flume-1.4.0-bin.tar.gz

Flume, bibliotek og kildekodeoppsett

Denne kommandoen vil opprette en ny katalog kalt apache-flume-1.4.0-bin og pakke ut filer i den. Denne katalogen vil bli referert til som i resten av artikkelen.

Trinn 4) Oppsett av Flume-bibliotek

Kopier 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 til

/lib/

Det er mulig at en av eller alle de kopierte JARene må utføre tillatelse. Dette kan forårsake et problem med kompileringen av kode. Så tilbakekall utføringstillatelse på slik JAR.

I mitt tilfelle, twitter4j-core-4.0.1.jar var å måtte utføre tillatelse. Jeg tilbakekalte det som nedenfor-

sudo chmod -x twitter4j-core-4.0.1.jar

Flume, bibliotek og kildekodeoppsett

Etter denne kommandoen gir 'les' tillatelse på twitter4j-core-4.0.1.jar til alle.

sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar

Vær oppmerksom på at jeg har lastet ned-

– twitter4j-core-4.0.1.jar fra https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core

- Alle flamme JAR, dvs. flume-ng-*-1.4.0.jar fra http://mvnrepository.com/artifact/org.apache.flume

Last inn data fra Twitter ved å bruke Flume

Trinn 1) Gå til katalogen som inneholder kildekodefiler.

Trinn 2) Sett KLASSEVEIEN å inneholde /lib/* og ~/FlumeTutorial/flume/mytwittersource/*

export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"

Last inn data fra Twitter ved å bruke Flume

Trinn 3) Kompiler kildekoden ved å bruke kommandoen-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Last inn data fra Twitter ved å bruke Flume

Trinn 4)Lag en krukke

Lag først Manifest.txt fil ved hjelp av et tekstredigeringsprogram etter eget valg og legg til under linjen i den-

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

... her flume.mytwittersource.MyTwitterSourceForFlume er navnet på hovedklassen. Vær oppmerksom på at du må trykke enter-tasten på slutten av denne linjen.

Last inn data fra Twitter ved å bruke Flume

Nå, lag JAR 'MyTwitterSourceForFlume.jar' som-

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

Last inn data fra Twitter ved å bruke Flume

Trinn 5) Kopier denne krukken til /lib/

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

Last inn data fra Twitter ved å bruke Flume

Trinn 6) Gå til konfigurasjonskatalogen til Flume, /konf

Hvis flume.conf ikke eksisterer, kopier flume-conf.properties.template og gi det nytt navn til flume.conf

sudo cp flume-conf.properties.template flume.conf

Last inn data fra Twitter ved å bruke Flume

If flume-env.sh ikke eksisterer, så kopier flume-env.sh.mal og gi det nytt navn til flume-env.sh

sudo cp flume-env.sh.template flume-env.sh

Last inn data fra Twitter ved å bruke Flume

Opprette en Twitter-applikasjon

Trinn 1) Opprett en Twitter-applikasjon ved å logge på https://developer.twitter.com/

Opprette en Twitter-applikasjon

Opprette en Twitter-applikasjon

Trinn 2) Gå til "Mine applikasjoner" (Dette alternativet blir slettet når 'Egg' knappen øverst til høyre klikkes)

Opprette en Twitter-applikasjon

Trinn 3) Opprett en ny applikasjon ved å klikke "Opprett ny app"

Trinn 4) Fyll ut søknadsdetaljer ved å spesifisere navnet på søknaden, beskrivelsen og nettstedet. Du kan referere til merknadene gitt under hver inntastingsboks.

Opprette en Twitter-applikasjon

Trinn 5) Rull ned på siden og godta vilkår ved å merke 'Ja, jeg er enig' og klikk på knappen"Lag din Twitter-applikasjon"

Opprette en Twitter-applikasjon

Trinn 6) I vinduet til et nyopprettet program, gå til fanen, API-nøkler bla nedover siden og klikk på knappen "Opprett mitt tilgangstoken"

Opprette en Twitter-applikasjon

Opprette en Twitter-applikasjon

Trinn 7) Oppdater siden.

Trinn 8) Klikk på "Test OAuth". Dette vil vises 'OAuth' innstillingene til applikasjonen.

Opprette en Twitter-applikasjon

Trinn 9) endre 'flume.conf' bruker disse OAuth-innstillinger. Trinn for å endre 'flume.conf' er gitt nedenfor.

Opprette en Twitter-applikasjon

Vi må kopiere Consumer Key, Consumer Secret, Access token og Access token secret for å oppdatere 'flume.conf'.

Merk: Disse verdiene tilhører brukeren og er derfor konfidensielle, så de bør ikke deles.

Endre 'flume.conf'-filen

Trinn 1) Open 'flume.conf' i skrivemodus og angi verdier for parametrene nedenfor-

sudo gedit flume.conf

Kopier innholdet nedenfor-

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

Endre 'Flume.conf'-filen

Trinn 2) Sett også TwitterAgent.synker.HDFS.hdfs.bane som Nedenfor,

TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tvitrer/

Endre 'Flume.conf'-filen

Å vite , og , se verdien av parameteren 'fs.defaultFS' satt i $HADOOP_HOME/etc/hadoop/core-site.xml

Endre 'Flume.conf'-filen

Trinn 3) For å skylle dataene til HDFS, som når det kommer, slett oppføringen nedenfor hvis den eksisterer,

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

Eksempel: Streaming av Twitter-data ved hjelp av Flume

Trinn 1) Open 'flume-env.sh' i skrivemodus og angi verdier for parametrene nedenfor,

JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"

Streaming av Twitter-data ved hjelp av Flume

Trinn 2) Start Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Trinn 3) To av JAR-filene fra Flume tarball er ikke kompatible med Hadoop 2.2.0. Så vi må følge trinnene nedenfor i dette Apache Flume-eksemplet for å gjøre Flume kompatibel med Hadoop 2.2.0.

a. Flytt protobuf-java-2.4.1.jar ut av ' /lib'.

Gå til ' /lib'

cd /lib

sudo mv protobuf-java-2.4.1.jar ~/

Streaming av Twitter-data ved hjelp av Flume

b. Finn etter JAR-filen 'guava' som nedenfor

find . -name "guava*"

Streaming av Twitter-data ved hjelp av Flume

Flytt guava-10.0.1.jar ut av ' /lib'.

sudo mv guava-10.0.1.jar ~/

Streaming av Twitter-data ved hjelp av Flume

c. Last ned guava-17.0.jar fra http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Streaming av Twitter-data ved hjelp av Flume

Kopier nå denne nedlastede jar-filen til ' /lib'

Trinn 4) Gå til ' /bin' og start Flume som-

./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf

Streaming av Twitter-data ved hjelp av Flume

Kommandoprompt-vindu der flume henter Tweets-

Streaming av Twitter-data ved hjelp av Flume

Fra kommandovindusmeldingen kan vi se at utdataene er skrevet til /user/hduser/flume/tweets/ katalogen.

Nå åpner du denne katalogen med en nettleser.

Trinn 5) Åpne en nettleser for å se resultatet av datainnlasting http://localhost:50070/ og bla gjennom filsystemet, og gå deretter til katalogen der data er lastet inn, dvs.

/flume/tvitrer/

Streaming av Twitter-data ved hjelp av Flume