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.

- 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.
- 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.
- 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)
Trinn 1) Opprett en ny katalog med navnet "FlumeTutorial"
sudo mkdir FlumeTutorial
- Gi lese-, skrive- og utføringstillatelser
sudo chmod -R 777 FlumeTutorial
- Kopier filer MyTwitterSource.java og MyTwitterSourceForFlume.java i denne katalogen.
Sjekk filtillatelsene til alle disse filene, og hvis "lese"-tillatelser mangler, gi de samme-
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.
Neste Klikk
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
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
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/*"
Trinn 3) Kompiler kildekoden ved å bruke kommandoen-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
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.
Nå, lag JAR 'MyTwitterSourceForFlume.jar' som-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Trinn 5) Kopier denne krukken til /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
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
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
Opprette en Twitter-applikasjon
Trinn 1) Opprett en Twitter-applikasjon ved å logge på https://developer.twitter.com/
Trinn 2) Gå til "Mine applikasjoner" (Dette alternativet blir slettet når 'Egg' knappen øverst til høyre klikkes)
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.
Trinn 5) Rull ned på siden og godta vilkår ved å merke 'Ja, jeg er enig' og klikk på knappen"Lag din 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"
Trinn 7) Oppdater siden.
Trinn 8) Klikk på "Test OAuth". Dette vil vises 'OAuth' innstillingene til applikasjonen.
Trinn 9) endre 'flume.conf' bruker disse OAuth-innstillinger. Trinn for å endre 'flume.conf' er gitt nedenfor.
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
Trinn 2) Sett også TwitterAgent.synker.HDFS.hdfs.bane som Nedenfor,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tvitrer/
Å vite , og , se verdien av parameteren 'fs.defaultFS' satt i $HADOOP_HOME/etc/hadoop/core-site.xml
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"
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 ~/
b. Finn etter JAR-filen 'guava' som nedenfor
find . -name "guava*"
Flytt guava-10.0.1.jar ut av ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Last ned guava-17.0.jar fra http://mvnrepository.com/artifact/com.google.guava/guava/17.0
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
Kommandoprompt-vindu der flume henter Tweets-
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/