Apache Flume Tutorial: Vad är, Architecture & Hadoop Exempel
Vad är Apache Flume i Hadoop?
Apache Flume är ett tillförlitligt och distribuerat system för att samla in, aggregera och flytta enorma mängder loggdata. Den har en enkel men flexibel arkitektur baserad på strömmande dataflöden. Apache Flume används för att samla in loggdata som finns i loggfiler från webbservrar och aggregera den till HDFS för analys.
Flume i Hadoop stöder flera källor som -
- 'tail' (som skickar data från en lokal fil och skriver till HDFS via Flume, liknande Unix-kommandot 'tail')
- Systemloggar
- Apache log4j (Gör det möjligt Java applikationer för att skriva händelser till filer i HDFS via Flume).
Flume Architecture
A Rörmedel är en JVM process som har 3 komponenter -Rökkälla, Rörkanal och Flume Sink– genom vilken händelser sprider sig efter att ha initierats vid en extern källa.

- I diagrammet ovan konsumeras händelserna som genereras av extern källa (WebServer) av Flume Data Source. Den externa källan skickar händelser till Flume-källan i ett format som känns igen av målkällan.
- Flume Source tar emot en händelse och lagrar den i en eller flera kanaler. Kanalen fungerar som ett lager som håller evenemanget tills det förbrukas av rännan. Denna kanal kan använda ett lokalt filsystem för att lagra dessa händelser.
- Flume sink tar bort händelsen från en kanal och lagrar den i ett externt arkiv som t.ex. HDFS. Det kan finnas flera flummedel, i vilket fall flumsänka vidarebefordrar händelsen till flumkällan för nästa flummedel i flödet.
Några viktiga funktioner hos FLUME
- Flume har en flexibel design baserad på strömmande dataflöden. Den är feltolerant och robust med flera failovers och återställningsmekanismer. Flume Big data har olika nivåer av tillförlitlighet att erbjuda vilket inkluderar "leverans på bästa sätt" och en 'end-to-end-leverans'. Bästa leverans tolererar inte något fel i Flume-noden 'end-to-end-leverans' läge garanterar leverans även i händelse av flera nodfel.
- Flume transporterar data mellan källor och sänkor. Denna insamling av data kan antingen vara schemalagd eller händelsestyrd. Flume har sin egen frågebehandlingsmotor som gör det enkelt att transformera varje ny batch av data innan den flyttas till den avsedda diskbänken.
- Möjligt Flume sjunker innefattar HDFS och HBase. Flume Hadoop kan också användas för att transportera händelsedata inklusive men inte begränsat till nätverkstrafikdata, data som genereras av webbplatser för sociala medier och e-postmeddelanden.
Installation av flume, bibliotek och källkod
Innan vi börjar med själva processen, se till att du har Hadoop installerat. Ändra användare till 'hduser' (id som används under Hadoop-konfiguration, du kan byta till användar-id som användes under din Hadoop-konfiguration)
Steg 1) Skapa en ny katalog med namnet "FlumeTutorial"
sudo mkdir FlumeTutorial
- Ge läs-, skriv- och körrättigheter
sudo chmod -R 777 FlumeTutorial
- Kopiera filer MyTwitterSource.java och MyTwitterSourceForFlume.java i den här katalogen.
Ladda ner indatafiler härifrån
Kontrollera filbehörigheterna för alla dessa filer och om "läs"-behörigheter saknas, ge samma-
Steg 2) Ladda ner 'Apache Flume' från en webbplats- https://flume.apache.org/download.html
Apache Flume 1.4.0 har använts i denna Flume-handledning.
Nästa Klicka
Steg 3) Kopiera den nedladdade tarballen till den katalog du väljer och extrahera innehållet med följande kommando
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
Detta kommando kommer att skapa en ny katalog med namnet apache-flume-1.4.0-bin och extrahera filer i den. Denna katalog kommer att kallas i resten av artikeln.
Steg 4) Installation av flumbibliotek
Kopiera 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 till
/lib/
Det är möjligt att någon av eller alla de kopierade JAR:erna måste köra tillstånd. Detta kan orsaka problem med kompileringen av kod. Så, återkalla exekveringstillstånd för sådan JAR.
I mitt fall, twitter4j-core-4.0.1.jar var måste utföra tillstånd. Jag återkallade det enligt nedan-
sudo chmod -x twitter4j-core-4.0.1.jar
Efter detta kommando ger "läs" behörighet på twitter4j-core-4.0.1.jar till alla.
sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar
Observera att jag har laddat ner-
– twitter4j-core-4.0.1.jar från https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
- Alla flame JARs dvs. flume-ng-*-1.4.0.jar från http://mvnrepository.com/artifact/org.apache.flume
Ladda data från Twitter med Flume
Steg 1) Gå till katalogen som innehåller källkodsfiler.
Steg 2) uppsättning KLASSVÄG att innehålla /lib/* och ~/FlumeTutorial/flume/mytwittersource/*
export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"
Steg 3) Kompilera källkod med kommandot-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
Steg 4)Skapa en burk
Skapa först Manifest.txt fil med en valfri textredigerare och lägg till nedanstående rad i den-
Main-Class: flume.mytwittersource.MyTwitterSourceForFlume
... här flume.mytwittersource.MyTwitterSourceForFlume är namnet på huvudklassen. Observera att du måste trycka på enter-tangenten i slutet av denna rad.
Skapa nu JAR 'MyTwitterSourceForFlume.jar' som-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Steg 5) Kopiera denna burk till /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
Steg 6) Gå till konfigurationskatalogen för Flume, /konf
Om flume.conf inte finns, kopiera sedan flume-conf.properties.template och byt namn på den till flume.conf
sudo cp flume-conf.properties.template flume.conf
If flume-env.sh inte finns, kopiera sedan flume-env.sh.mall och byta namn på det till flume-env.sh
sudo cp flume-env.sh.template flume-env.sh
Skapa en Twitter-applikation
Steg 1) Skapa en Twitter-applikation genom att logga in på https://developer.twitter.com/
Steg 2) Gå till "Mina applikationer" (Detta alternativ tas bort när 'Ägg' knappen i det övre högra hörnet klickas)
Steg 3) Skapa en ny applikation genom att klicka "Skapa ny app"
Steg 4) Fyll i ansökningsinformation genom att ange namnet på ansökan, beskrivning och webbplats. Du kan hänvisa till anteckningarna under varje inmatningsruta.
Steg 5) Scrolla ner på sidan och acceptera villkoren genom att markera 'Ja jag håller med' och klicka på knappen"Skapa din Twitter-applikation"
Steg 6) I fönstret för ett nyskapat program, gå till fliken, API-nycklar scrolla ner på sidan och klicka på knappen "Skapa min åtkomsttoken"
Steg 7) Uppdatera sidan.
Steg 8) Klicka på "Testa OAuth". Detta kommer att visas 'OAuth' inställningarna för programmet.
Steg 9) Ändra 'flume.conf' använder dessa OAuth-inställningar. Steg för att ändra 'flume.conf' anges nedan.
Vi måste kopiera konsumentnyckel, konsumenthemlighet, åtkomsttoken och åtkomsttokenhemlighet för att uppdatera 'flume.conf'.
Obs: Dessa värden tillhör användaren och är därför konfidentiella, så de bör inte delas.
Ändra 'flume.conf'-filen
Steg 1) Öppen 'flume.conf' i skrivläge och ställ in värden för nedanstående parametrar-
sudo gedit flume.conf
Kopiera innehållet nedan-
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
Steg 2) Ställ också in TwitterAgent.sänker.HDFS.hdfs.path som nedan,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/
Att veta , och , se parameterns värde 'fs.defaultFS' ange $HADOOP_HOME/etc/hadoop/core-site.xml
Steg 3) För att spola data till HDFS, som en när den kommer, ta bort posten nedan om den finns,
TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600
Exempel: Streama Twitter-data med Flume
Steg 1) Öppen 'flume-env.sh' i skrivläge och ställ in värden för nedanstående parametrar,
JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"
Steg 2) Starta Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Steg 3) Två av JAR-filerna från Flume tarball är inte kompatibla med Hadoop 2.2.0. Så vi måste följa stegen nedan i detta Apache Flume-exempel för att göra Flume kompatibel med Hadoop 2.2.0.
a. Flytta protobuf-java-2.4.1.jar ut ur ' /lib'.
Gå till ' /lib'
CD /lib
sudo mv protobuf-java-2.4.1.jar ~/
b. Sök efter JAR-filen 'guava' enligt nedan
find . -name "guava*"
Flytta guava-10.0.1.burk ut ur ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Download guava-17.0.burk från http://mvnrepository.com/artifact/com.google.guava/guava/17.0
Kopiera nu den här nedladdade jar-filen till ' /lib'
Steg 4) Gå till ' /bin' och starta Flume som-
./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf
Kommandotolksfönster där flume hämtar Tweets-
Från kommandofönstermeddelandet kan vi se att utgången är skriven till /user/hduser/flume/tweets/ katalog.
Öppna nu den här katalogen med en webbläsare.
Steg 5) För att se resultatet av dataladdning, öppna en webbläsare http://localhost:50070/ och bläddra i filsystemet, gå sedan till katalogen där data har laddats, dvs.
/flume/tweets/