Apache Flume Tutorial: Hva er, Architecture & Hadoop Eksempel
โก Smart oppsummering
Apache Flume er en distribuert tjeneste for innsamling, aggregering og flytting av store mengder loggdata til HDFS, bygget rundt agenter som kjeder sammen en kilde, en kanal og en sink.
Hva er Apache Flume i Hadoop?
Apache Flume er et pรฅlitelig og distribuert system for innsamling, aggregering og flytting av enorme mengder loggdata. Det har en enkel, men fleksibel arkitektur basert pรฅ strรธmming av dataflyter. 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, inkludert:
- 'tail' (som overfรธrer data fra en lokal fil og skriver dem til HDFS via Flume, likt Unix-kommandoen 'tail')
- Systemlogger
- Apache log4j (som muliggjรธr Java applikasjoner for รฅ skrive hendelser til filer i HDFS via Flume).
Den nรฅvรฆrende utgivelsen er Rennerenne 1.11.0, publisert 25. oktober 2022 og tilgjengelig fra Apache Flume nedlastingssideDenne gjennomgangen ble skrevet mot versjon 1.4.0, sรฅ flere trinn nedenfor inneholder en merknad der en gjeldende utgivelse oppfรธrer seg annerledes.
Flume Architecture
Et Flume-middel er et JVM prosess med tre komponenter โ rennekilde, rennekanal og rennevask โ som hendelser forplanter seg gjennom etter รฅ ha blitt initiert ved en ekstern kilde. Diagrammet nedenfor viser hvordan de kobles sammen.
- Hendelsene som genereres av den eksterne kilden (en webserver) forbrukes av Flume-kilden. Den eksterne kilden sender hendelser til Flume-kilden i et format som mรฅlkilden gjenkjenner.
- Flume-kilden mottar en hendelse og lagrer den i รฉn eller flere kanaler. Kanalen fungerer som et lager som oppbevarer hendelsen til den forbrukes av Flume-sinken. Denne kanalen kan bruke et lokalt filsystem for รฅ lagre disse hendelsene.
- Flume-sinken fjerner hendelsen fra en kanal og lagrer den i et eksternt arkiv, for eksempel HDFS. Det kan vรฆre flere Flume-agenter, og i sรฅ fall videresender Flume-sinken hendelsen til Flume-kilden til den neste agenten i flyten.
Noen viktige funksjoner ved Flume
- Flume har en fleksibel design basert pรฅ strรธmming av dataflyter. Den er feiltolerant og robust, med flere failover- og gjenopprettingsmekanismer. Flume tilbyr ulike nivรฅer av pรฅlitelighet, inkludert "levering pรฅ best mulig mรฅte" og "ende-til-ende levering". Best mulig levering tolererer ikke noen feil i Flume-noden, mens ende-til-ende levering garanterer levering selv ved flere nodefeil.
- Flume overfรธrer data mellom kilder og sinker. Denne datainnsamlingen kan enten vรฆre planlagt eller hendelsesdrevet. Flume har sin egen spรธrrebehandlingsmotor, som gjรธr det enkelt รฅ transformere hver nye datamengde fรธr den flyttes til den tiltenkte sinken.
- Mulig Flume synker inkluderer HDFS og HBaseFlume kan ogsรฅ transportere hendelsesdata som nettverkstrafikkdata, data generert av nettsteder for sosiale medier og e-postmeldinger.
Flume, bibliotek og kildekodeoppsett
Fรธr vi starter med selve prosessen, sรธrg for at du har Hadoop installert. Hvis ikke, jobb deg gjennom hvordan installere Hadoop fรธrst. Endre brukeren til 'hduser' (ID-en som ble brukt under konfigurasjonen av Hadoop; du kan bytte til bruker-ID-en som ble brukt under din egen Hadoop-konfigurasjon).
Trinn 1) Opprett en ny katalog med navnet ยซFlumeTutorialยป.
sudo mkdir FlumeTutorial
- Gi lese-, skrive- og utfรธrelsestillatelser.
sudo chmod -R 777 FlumeTutorial
- Kopier filene MyTwitterSource.java og MyTwitterSourceForFlume.java inn i denne katalogen.
Sjekk filtillatelsene til alle disse filene, som nedenfor, og gi ยซlesetillatelseยป hvis den mangler.
Trinn 2) Last ned ยซApache Flumeยป fra https://flume.apache.org/download.html.
Apache Flume 1.4.0 har blitt brukt i denne Flume-opplรฆringen.
Klikk deretter videre til et speil.
Trinn 3) Kopier den nedlastede tarballen til katalogen du รธnsker og f.eks.tract innholdet ved รฅ bruke fรธlgende kommando.
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Dette oppretter en ny katalog med navnet apache-flume-1.4.0-bin og extracts filene inn i den. Den katalogen kalles i resten av artikkelen.
Trinn 4) Oppsett av Flume-biblioteket. Kopier twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar og flume-ng-sdk-1.4.0.jar til
/lib/
En eller alle de kopierte JAR-filene kan ha utfรธrelsestillatelsen satt, noe som kan forรฅrsake et problem med kompilering av kode, sรฅ tilbakekal den. I mitt tilfelle hadde twitter4j-core-4.0.1.jar utfรธrelsestillatelsen. Jeg tilbakekalte den som vist nedenfor.
sudo chmod -x twitter4j-core-4.0.1.jar
Etter dette gir kommandoen nedenfor ยซlesetillatelseยป 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 lastet ned twitter4j-core-4.0.1.jar fra Maven-arkivet, og alle Flume JAR-filer, f.eks. flume-ng-*-1.4.0.jar, fra org.apache.flume-artefaktene.
Last inn data fra Twitter ved รฅ bruke Flume
Trinn 1) Gรฅ til katalogen som inneholder kildekodefilene.
Trinn 2) Sett CLASSPATH til รฅ 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 hjelp av kommandoen nedenfor.
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Trinn 4) Opprett en JAR-fil. Fรธrst oppretter du en Manifest.txt-fil med et tekstredigeringsprogram du velger selv, og legger til linjen nedenfor i den.
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
Her er flume.mytwittersource.MyTwitterSourceForFlume navnet pรฅ hovedklassen. Vรฆr oppmerksom pรฅ at du mรฅ trykke enter-tasten pรฅ slutten av denne linjen, som vist nedenfor.
Opprett nรฅ JAR-filen 'MyTwitterSourceForFlume.jar' som fรธlger.
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Trinn 5) Kopier denne JAR-filen til /lib/.
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Trinn 6) Gรฅ til konfigurasjonskatalogen til Flume, /konf.
Hvis flume.conf ikke finnes, kopier flume-conf.properties.template og gi den nytt navn til flume.conf.
sudo cp flume-conf.properties.template flume.conf
Hvis flume-env.sh ikke finnes, kopier flume-env.sh.template og gi den nytt navn til flume-env.sh.
sudo cp flume-env.sh.template flume-env.sh
Opprette en Twitter-applikasjon
Les dette fรธrst. V1.1-strรธmmingen statuses/filter endepunktet som twitter4j 4.0.1 trenger ble pensjonert 9. mars 2023, og API v2-filtrerte strรธmmen som erstattet det, nรฅ pรฅ utvikler.x.com, ligger bak et betalt nivรฅ. Behandle skjermbildene nedenfor som et tilpasset kildemรธnster, og pek deretter den samme agenten mot en fil, exec eller Kafka-kilde.
Trinn 1) Opprett en Twitter-applikasjon ved รฅ logge pรฅ utviklerportalen.
Trinn 2) Gรฅ til ยซMine applikasjonerยป (dette alternativet dukker opp nรฅr du klikker pรฅ ยซEggยป-knappen รธverst til hรธyre).
Trinn 3) Opprett en ny applikasjon ved รฅ klikke pรฅ ยซOpprett ny appยป.
Trinn 4) Fyll ut sรธknadsdetaljene ved รฅ oppgi navnet pรฅ sรธknaden, en beskrivelse og et nettsted. Du kan se merknadene under hver boks.
Trinn 5) Bla nedover siden, godta vilkรฅrene ved รฅ merke av for ยซJa, jeg godtarยป og klikk pรฅ knappen ยซOpprett din Twitter-applikasjonยป.
Trinn 6) I vinduet til den nyopprettede applikasjonen gรฅr du til fanen ยซAPI-nรธklerยป, blar nedover siden og klikker pรฅ knappen ยซOpprett tilgangstokenยป.
Trinn 7) Oppdater siden.
Trinn 8) Klikk pรฅ ยซTest OAuthยป. Dette viser applikasjonens ยซOAuthยป-innstillinger.
Trinn 9) Endre 'flume.conf' ved hjelp av disse OAuth-innstillingene. Fremgangsmรฅten for รฅ endre 'flume.conf' er gitt nedenfor.
Vi mรฅ kopiere forbrukernรธkkelen, forbrukerhemmeligheten, tilgangstokenet og tilgangstokenhemmeligheten 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) ร pne 'flume.conf' i skrivemodus og angi verdier for parameterne 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) Angi ogsรฅ TwitterAgent.sinks.HDFS.hdfs.path som vist nedenfor.
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tvitrer/
ร finne , og , se verdien til parameteren 'fs.defaultFS' angitt i $HADOOP_HOME/etc/hadoop/core-site.xml, vist nedenfor.
Trinn 3) For รฅ kunne overfรธre dataene til HDFS nรฅr de kommer, slett oppfรธringen nedenfor hvis den finnes.
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Eksempel: Streaming av Twitter-data ved hjelp av Flume
Trinn 1) ร pne 'flume-env.sh' i skrivemodus og angi verdier for parameterne 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-tarballen er ikke kompatible med Hadoop 2.2.0, sรฅ i dette Apache Flume-eksemplet fรธlger vi trinnene nedenfor for รฅ gjรธre Flume kompatibel med Hadoop 2.2.0. Denne JAR-byttet er en fiks fra 1.4.0-รฆraen; Flume 1.11.0 leverer allerede nรฅvรฆrende protobuf- og Guava-bygg, sรฅ en moderne tarball trenger vanligvis ikke noe av det.
a. Flytt protobuf-java-2.4.1.jar ut av ' /lib'. Gรฅ til den katalogen fรธrst.
cd /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Finn JAR-filen ยซguavaยป som vist 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 Maven-arkivet, Vist under.
Kopier nรฅ denne nedlastede JAR-filen til ' /lib'.
Trinn 4) Gรฅ til ' /bin' og start Flume som fรธlger.
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Kommandopromptvinduet der Flume henter tweets ser slik ut.
Fra kommandovindumeldingen kan vi se at utdataene er skrevet til katalogen /user/hduser/flume/tweets/. ร pne nรฅ denne katalogen med en nettleser.
Trinn 5) For รฅ se resultatet av datainnlastingen, รฅpne http://localhost:50070/ i en nettleser, bla gjennom filsystemet og gรฅ deretter til katalogen der dataene er lastet inn, det vil si
/flume/tvitrer/
Port 50070 er NameNode-nettgrensesnittet pรฅ Hadoop 2; Hadoop 3 flyttet den samme siden til port 9870.
Flume er den ene halvdelen av inntak: Sqoop importerer tabeller i grupper, Flume strรธmmer hendelser, deretter Pig or Hive form filene og oozie planlegger kjeden. Se ogsรฅ store dataanalyseverktรธy, MapReduce-koblinger og tellere og Talent.


































