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.

  • ๐Ÿ”˜ Agentens anatomi: Hver Flume-agent er en JVM-prosess som inneholder en kilde, en eller flere kanaler og en sink.
  • โ˜‘๏ธ Pรฅlitelighet: Best-effort-levering tolererer ingen nodefeil; ende-til-ende-levering overlever flere nodefeil.
  • โœ… Oppsett: Tilpassede kildeklasser kompileres til en JAR-fil som slippes i Flume lib-katalogen.
  • ๐Ÿงช konfigurasjon: ร‰n egenskapsfil navngir kilden, kanalen og sinken og angir HDFS-banen og rullegrensene.
  • ๐Ÿ› ๏ธ lansering: Start pipelinen med flume-ng-agenten, navngi agenten og pek pรฅ flume.conf.
  • โš ๏ธ Datert eksempel: Twitter v1.1-strรธmmesluttpunktet ble stengt i mars 2023, sรฅ behandle รธvelsen som et tilpasset kildemรธnster.

Apache Flume-veiledning som dekker agentarkitektur, konfigurasjon og et eksempel pรฅ Hadoop-strรธmming

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.

Flume-arkitekturdiagram som viser en agent med en kilde, en kanal og en vask som mater HDFS

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

Terminalen bytter Linux-bruker til hduser fรธr Flume-oppsettet starter

Trinn 1) Opprett en ny katalog med navnet ยซFlumeTutorialยป.

sudo mkdir FlumeTutorial
  1. Gi lese-, skrive- og utfรธrelsestillatelser.
    sudo chmod -R 777 FlumeTutorial
  2. Kopier filene MyTwitterSource.java og MyTwitterSourceForFlume.java inn i denne katalogen.

Last ned inndatafiler herfra

Sjekk filtillatelsene til alle disse filene, som nedenfor, og gi ยซlesetillatelseยป hvis den mangler.

Terminal som viser filtillatelsene pรฅ den nedlastede filen Java kildefiler

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.

Nedlastingssiden for Apache Flume som viser den binรฆre tarball-lenken for รฅ velge

Klikk deretter videre til et speil.

Apache-speilsiden nรฅdd etter รฅ ha klikket pรฅ Flume tarball-lenken

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

Terminal extracLagre Flume-tarballen med kommandoen sudo tar -xvf

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

Terminalen tilbakekaller utfรธrelsestillatelsen pรฅ twitter4j-kjerne-JAR-filen

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

Terminal eksporterer CLASSPATH som peker pรฅ Flume-biblioteket og kildekatalogene

Trinn 3) Kompiler kildekoden ved hjelp av kommandoen nedenfor.

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Terminal som kompilerer de to Java kildefiler med javac

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.

Manifest.txt รฅpnes i en teksteditor med Main-Class-oppfรธringen

Opprett nรฅ JAR-filen 'MyTwitterSourceForFlume.jar' som fรธlger.

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

Terminalpakker de kompilerte klassene i MyTwitterSourceForFlume.jar

Trinn 5) Kopier denne JAR-filen til /lib/.

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

Terminal kopierer den tilpassede kilde-JAR-en til Flume lib-katalogen

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

Terminal kopierer flume-conf.properties.template til 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

Terminalkopiering av flume-env.sh.template til 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.

Twitter-utviklerens pรฅloggingsside som brukes for รฅ nรฅ applikasjonslisten

Hjemmesiden for Twitter-utviklerkontoen vises etter pรฅlogging

Trinn 2) Gรฅ til ยซMine applikasjonerยป (dette alternativet dukker opp nรฅr du klikker pรฅ ยซEggยป-knappen รธverst til hรธyre).

Mine applikasjoner-siden pรฅ Twitter-utviklerportalen

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.

Sรธknadsskjema for Twitter med felt for navn, beskrivelse og nettsted

Trinn 5) Bla nedover siden, godta vilkรฅrene ved รฅ merke av for ยซJa, jeg godtarยป og klikk pรฅ knappen ยซOpprett din Twitter-applikasjonยป.

Avmerkingsboksen for vilkรฅr og knappen for รฅ opprette sรธknad nederst i Twitter-skjemaet

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ยป.

API-nรธkler-fanen i den nye Twitter-applikasjonen fรธr et tilgangstoken finnes

Detaljer om tilgangstoken som vises etter at knappen Opprett tilgangstoken er brukt

Trinn 7) Oppdater siden.

Trinn 8) Klikk pรฅ ยซTest OAuthยป. Dette viser applikasjonens ยซOAuthยป-innstillinger.

Test OAuth-skjermen som viser OAuth-innstillingene for applikasjonen

Trinn 9) Endre 'flume.conf' ved hjelp av disse OAuth-innstillingene. Fremgangsmรฅten for รฅ endre 'flume.conf' er gitt nedenfor.

OAuth-innstillinger som viser forbrukernรธkkelen, forbrukerhemmeligheten og tilgangstokenverdiene

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

flume.conf-filen รฅpnes i et redigeringsprogram med MyTwitAgent-kilde-, kanal- og sink-egenskapene

Trinn 2) Angi ogsรฅ TwitterAgent.sinks.HDFS.hdfs.path som vist nedenfor.

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

HDFS-sink-egenskapen hdfs.path er satt til et vertsnavn, portnummer og HDFS-hjemmekatalog

ร… finne , og , se verdien til parameteren 'fs.defaultFS' angitt i $HADOOP_HOME/etc/hadoop/core-site.xml, vist nedenfor.

fs.defaultFS-egenskapen i core-site.xml, som oppgir vertsnavnet og porten

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"

flume-env.sh รฅpnes i en editor med JAVA_HOME og FLUME_CLASSPATH satt

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

Terminalen flytter protobuf-java-2.4.1.jar ut av Flume lib-katalogen

b. Finn JAR-filen ยซguavaยป som vist nedenfor.

find . -name "guava*"

Terminal find-kommandoen som finner den medfรธlgende guava-JAR-filen

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

sudo mv guava-10.0.1.jar ~/

Terminal flytter guava-10.0.1.jar ut av Flume lib-katalogen

c. Last ned guava-17.0.jar fra Maven-arkivet, Vist under.

Maven Repository-side for guava 17.0, erstatnings-JAR-filen for nedlasting

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

Terminal som starter Flume-agenten MyTwitAgent med flume-ng-kommandoen

Kommandopromptvinduet der Flume henter tweets ser slik ut.

Kommandoprompt som viser Flume-agenten som henter tweets og skriver dem til HDFS

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.

HDFS-nettleseren som viser flume/tweets-katalogen med de lastede tweet-filene

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.

Spรธrsmรฅl og svar

Ikke som skrevet. Sluttpunktet for strรธmmestatuser/filter i v1.1 ble pensjonert 9. mars 2023, og API v2-erstatningen krever et betalt nivรฅ. Flume-mekanikken gjelder fortsatt som en รธvelse med tilpasset kildekode.

Modellerer basislinje normalt loggvolum og meldingsform, og flagger deretter avvik som faste terskler ikke overser. De grupperer ogsรฅ gjentatte stakkdata. traces til รฉn enkelt hendelse og utarbeide en sannsynlig รฅrsak, noe som forkorter triage.

Copilot lager raskt utkast til kilde-, kanal- og sink-blokker, men den finner opp egenskapsnavn og blander utgivelser. Sjekk hver nรธkkel mot Flume-brukerhรฅndboken for din versjon fรธr du starter agenten.

Flume strรธmmer hendelsesdata som logger kontinuerlig inn i HDFS. Sqoop flytter strukturerte tabeller mellom relasjonsdatabaser og Hadoop i planlagte grupper. De dekker ulike halvdeler av inntak og kobler seg godt sammen.

En minnekanal er raskest, men mister bufferhendelser hvis agenten dรธr. En filkanal skriver til disk og overlever omstarter, med lavere gjennomstrรธmning. Foretrekk holdbarhet for alt du ikke kan sende pรฅ nytt.

Kafka er nรฅ den vanlige standarden fordi den lagrer data og betjener mange forbrukere. Flume 1.11.0, fra oktober 2022, passer fortsatt til enkel enveis logginnsamling i HDFS.

Nesten alltid en JAR-kollisjon: Flume-tarballen pakker sine egne Guava- og Protobuf-versjoner, som er i konflikt med de Hadoop laster. Fjerning av den eldre, medfรธlgende JAR-filen fjerner den vanligvis.

De bestemmer nรฅr vasken lukker en fil og รฅpner en ny: rollSize etter byte, rollCount etter antall hendelser, rollInterval etter sekunder. Null deaktiverer den bestemte utlรธseren.

Oppsummer dette innlegget med: