Apache Flume Tutorial: Hvad er, Architecture & Hadoop Eksempel
Hvad er Apache Flume i Hadoop?
Apache Flume er et pålideligt og distribueret system til at indsamle, aggregere og flytte enorme mængder logdata. Den har en enkel, men fleksibel arkitektur baseret på streaming af datastrømme. Apache Flume bruges til at indsamle logdata, der findes i logfiler fra webservere og aggregere dem i HDFS til analyse.
Flume in Hadoop understøtter flere kilder som -
- 'tail' (som sender data fra en lokal fil og skriver ind i HDFS via Flume, svarende til Unix-kommandoen 'tail')
- System logs
- Apache log4j (aktiver Java applikationer til at skrive hændelser til filer i HDFS via Flume).
Flume Architecture
A Flue agent er en FMV proces, der har 3 komponenter -Rørkilde, Rørkanal og Flume vask– hvorigennem hændelser udbredes efter iværksat ved en ekstern kilde.

- I ovenstående diagram forbruges hændelser genereret af ekstern kilde (WebServer) af Flume Data Source. Den eksterne kilde sender hændelser til Flume-kilden i et format, der genkendes af målkilden.
- Flume Source modtager en begivenhed og gemmer den i en eller flere kanaler. Kanalen fungerer som et lager, der opbevarer arrangementet, indtil det er opbrugt af rendevasken. Denne kanal kan bruge et lokalt filsystem til at gemme disse begivenheder.
- Flume sink fjerner hændelsen fra en kanal og gemmer den i et eksternt lager som f.eks. HDFS. Der kan være flere flume-midler, i hvilket tilfælde flume-synk videresender hændelsen til rendekilden for det næste flumemiddel i flowet.
Nogle vigtige funktioner i FLUME
- Flume har et fleksibelt design baseret på streaming af datastrømme. Den er fejltolerant og robust med flere failovers og gendannelsesmekanismer. Flume Big data har forskellige niveauer af pålidelighed at tilbyde, hvilket inkluderer 'best-effort levering' og en 'ende-til-ende levering'. Bedste-indsats levering tolererer ikke nogen Flume-knudefejl, hvorimod 'ende-til-ende levering' tilstand garanterer levering selv i tilfælde af flere knudefejl.
- Flume fører data mellem kilder og dræn. Denne indsamling af data kan enten være planlagt eller hændelsesdrevet. Flume har sin egen forespørgselsbehandlingsmotor, som gør det nemt at transformere hver ny batch af data, før den flyttes til den tilsigtede vask.
- Mulig Flume synker omfatter HDFS og HBase. Flume Hadoop kan også bruges til at transportere begivenhedsdata, herunder men ikke begrænset til netværkstrafikdata, data genereret af sociale medier-websteder og e-mail-beskeder.
Rør, bibliotek og kildekode opsætning
Før vi starter med selve processen, skal du sikre dig, at du har Hadoop installeret. Skift bruger til 'hduser' (id brugt under Hadoop-konfiguration, du kan skifte til det bruger-id, der blev brugt under din Hadoop-konfiguration)
Trin 1) Opret en ny mappe med navnet 'FlumeTutorial'
sudo mkdir FlumeTutorial
- Giv tilladelse til at læse, skrive og udføre
sudo chmod -R 777 FlumeTutorial
- Kopier filer MyTwitterSource.java og MyTwitterSourceForFlume.java i denne mappe.
Kontroller filtilladelserne for alle disse filer, og hvis "læse"-tilladelser mangler, så giv samme-
Trin 2) Download 'Apache Flume' fra et websted- https://flume.apache.org/download.html
Apache Flume 1.4.0 er blevet brugt i denne Flume-tutorial.
Næste Klik
Trin 3) Kopier den downloadede tarball i mappen efter eget valg, og udtræk indholdet ved hjælp af følgende kommando
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Denne kommando vil oprette en ny mappe med navnet apache-flume-1.4.0-bin og udpak filer ind i den. Denne mappe vil blive omtalt som i resten af artiklen.
Trin 4) Opsætning af Flume bibliotek
Kopi 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 muligt, at en af eller alle de kopierede JAR'er skal udføre tilladelse. Dette kan forårsage et problem med kompileringen af kode. Så tilbagekald eksekveringstilladelsen på en sådan JAR.
I mit tilfælde, twitter4j-core-4.0.1.jar var at skulle udføre tilladelse. Jeg tilbagekaldte det som nedenfor-
sudo chmod -x twitter4j-core-4.0.1.jar
Efter denne kommando giver 'læse' tilladelse til 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
Bemærk venligst, at jeg har downloadet-
– twitter4j-core-4.0.1.jar fra https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
- Alle flamme JAR'er, dvs. flume-ng-*-1.4.0.jar fra http://mvnrepository.com/artifact/org.apache.flume
Indlæs data fra Twitter ved hjælp af Flume
Trin 1) Gå til den mappe, der indeholder kildekodefiler.
Trin 2) sæt KLASSESTI at indeholde /lib/* og ~/FlumeTutorial/flume/mytwittersource/*
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
Trin 3) Kompiler kildekode ved hjælp af kommandoen-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Trin 4)Lav en krukke
Først skal du oprette Manifest.txt fil ved hjælp af en teksteditor efter eget valg og tilføj den nedenstående linje i den-
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
.. her flume.mytwittersource.MyTwitterSourceForFlume er navnet på hovedklassen. Bemærk venligst, at du skal trykke på Enter-tasten i slutningen af denne linje.
Opret nu JAR 'MyTwitterSourceForFlume.jar' som-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Trin 5) Kopier denne krukke til /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Trin 6) Gå til konfigurationsmappen for Flume, /konf
Hvis flume.conf ikke eksisterer, så kopier flume-conf.properties.template og omdøb den til flume.conf
sudo cp flume-conf.properties.template flume.conf
If flume-env.sh eksisterer ikke, så kopier flume-env.sh.skabelon og omdøb den til flume-env.sh
sudo cp flume-env.sh.template flume-env.sh
Oprettelse af en Twitter-applikation
Trin 1) Opret en Twitter-applikation ved at logge ind på https://developer.twitter.com/
Trin 2) Gå til 'Mine ansøgninger' (Denne mulighed forsvinder når 'Æg' knappen i øverste højre hjørne klikkes)
Trin 3) Opret en ny applikation ved at klikke 'Opret ny app'
Trin 4) Udfyld ansøgningsoplysninger ved at angive navnet på ansøgningen, beskrivelsen og webstedet. Du kan henvise til bemærkningerne under hver inputboks.
Trin 5) Rul ned på siden og accepter vilkårene ved at markere 'Ja jeg er enig' og klik på knappen'Opret din Twitter-applikation'
Trin 6) I vinduet i et nyoprettet program skal du gå til fanen, API nøgler rul ned på siden og klik på knappen 'Opret mit adgangstoken'
Trin 7) Opdatér siden.
Trin 8) Klik på 'Test OAuth'. Dette vil blive vist 'OAuth' indstillinger for applikationen.
Trin 9) Ændre 'flume.conf' ved hjælp af disse OAuth-indstillinger. Trin til at ændre 'flume.conf' er anført nedenfor.
Vi skal kopiere forbrugernøgle, forbrugerhemmelighed, adgangstoken og adgangstokenhemmelighed for at opdatere 'flume.conf'.
Bemærk: Disse værdier tilhører brugeren og er derfor fortrolige, så de bør ikke deles.
Rediger 'flume.conf' fil
Trin 1) Åbne 'flume.conf' i skrivetilstand og indstille værdier for nedenstående parametre-
sudo gedit flume.conf
Kopiér nedenstående indhold-
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
Trin 2) Sæt også TwitterAgent.sinks.HDFS.hdfs.path som nedenfor,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/
At vide , og , se værdi af parameter 'fs.defaultFS' sat i $HADOOP_HOME/etc/hadoop/core-site.xml
Trin 3) For at tømme dataene til HDFS, som en når det kommer, skal du slette nedenstående post, hvis den findes,
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Eksempel: Streaming af Twitter-data ved hjælp af Flume
Trin 1) Åbne 'flume-env.sh' i skrivetilstand og indstille værdier for nedenstående parametre,
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
Trin 2) Start Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Trin 3) To af JAR-filerne fra Flume tarball er ikke kompatible med Hadoop 2.2.0. Så vi bliver nødt til at følge nedenstående trin i dette Apache Flume-eksempel for at gøre Flume kompatibel med Hadoop 2.2.0.
a. Flyt protobuf-java-2.4.1.jar ud af ' /lib'.
Gå til ' /lib'
cd /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Find JAR-filen 'guava' som nedenfor
find . -name "guava*"
Flyt guava-10.0.1.krukke ud af ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Hent guava-17.0.krukke fra http://mvnrepository.com/artifact/com.google.guava/guava/17.0
Kopier nu denne downloadede jar-fil til ' /lib'
Trin 4) Gå til ' /beholder' og start Flume som-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Kommandopromptvindue, hvor flume henter tweets-
Fra kommandovinduemeddelelsen kan vi se, at outputtet er skrevet til /bruger/hduser/flume/tweets/ mappe.
Åbn nu denne mappe ved hjælp af en webbrowser.
Trin 5) For at se resultatet af dataindlæsning, skal du åbne en browser http://localhost:50070/ og gennemse filsystemet, gå derefter til den mappe, hvor data er blevet indlæst, dvs.
/flume/tweets/