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.

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

Installation av flume, bibliotek och källkod

Steg 1) Skapa en ny katalog med namnet "FlumeTutorial"

sudo mkdir FlumeTutorial
  1. Ge läs-, skriv- och körrättigheter
    sudo chmod -R 777 FlumeTutorial
  2. 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-

Installation av flume, bibliotek och källkod

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.

Installation av flume, bibliotek och källkod

Nästa Klicka

Installation av flume, bibliotek och källkod

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

Installation av flume, bibliotek och källkod

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

Installation av flume, bibliotek och källkod

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

Ladda data från Twitter med Flume

Steg 3) Kompilera källkod med kommandot-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Ladda data från Twitter med Flume

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.

Ladda data från Twitter med Flume

Skapa nu JAR 'MyTwitterSourceForFlume.jar' som-

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

Ladda data från Twitter med Flume

Steg 5) Kopiera denna burk till /lib/

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

Ladda data från Twitter med Flume

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

Ladda data från Twitter med Flume

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

Ladda data från Twitter med Flume

Skapa en Twitter-applikation

Steg 1) Skapa en Twitter-applikation genom att logga in på https://developer.twitter.com/

Skapa en Twitter-applikation

Skapa en Twitter-applikation

Steg 2) Gå till "Mina applikationer" (Detta alternativ tas bort när 'Ägg' knappen i det övre högra hörnet klickas)

Skapa en Twitter-applikation

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.

Skapa en Twitter-applikation

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"

Skapa en 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"

Skapa en Twitter-applikation

Skapa en Twitter-applikation

Steg 7) Uppdatera sidan.

Steg 8) Klicka på "Testa OAuth". Detta kommer att visas 'OAuth' inställningarna för programmet.

Skapa en Twitter-applikation

Steg 9) Ändra 'flume.conf' använder dessa OAuth-inställningar. Steg för att ändra 'flume.conf' anges nedan.

Skapa en Twitter-applikation

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

Ändra 'Flume.conf'-fil

Steg 2) Ställ också in TwitterAgent.sänker.HDFS.hdfs.path som nedan,

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

Ändra 'Flume.conf'-fil

Att veta , och , se parameterns värde 'fs.defaultFS' ange $HADOOP_HOME/etc/hadoop/core-site.xml

Ändra 'Flume.conf'-fil

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"

Streama Twitter-data med Flume

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

Streama Twitter-data med Flume

b. Sök efter JAR-filen 'guava' enligt nedan

find . -name "guava*"

Streama Twitter-data med Flume

Flytta guava-10.0.1.burk ut ur ' /lib'.

sudo mv guava-10.0.1.jar ~/

Streama Twitter-data med Flume

c. Download guava-17.0.burk från http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Streama Twitter-data med Flume

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

Streama Twitter-data med Flume

Kommandotolksfönster där flume hämtar Tweets-

Streama Twitter-data med Flume

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/

Streama Twitter-data med Flume