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.

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

Opsætning af flume, bibliotek og kildekode

Trin 1) Opret en ny mappe med navnet 'FlumeTutorial'

sudo mkdir FlumeTutorial
  1. Giv tilladelse til at læse, skrive og udføre
    sudo chmod -R 777 FlumeTutorial
  2. Kopier filer MyTwitterSource.java og MyTwitterSourceForFlume.java i denne mappe.

Download inputfiler herfra

Kontroller filtilladelserne for alle disse filer, og hvis "læse"-tilladelser mangler, så giv samme-

Opsætning af flume, bibliotek og kildekode

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.

Opsætning af flume, bibliotek og kildekode

Næste Klik

Opsætning af flume, bibliotek og kildekode

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

Opsætning af flume, bibliotek og kildekode

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

Opsætning af flume, bibliotek og kildekode

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

Indlæs data fra Twitter ved hjælp af Flume

Trin 3) Kompiler kildekode ved hjælp af kommandoen-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Indlæs data fra Twitter ved hjælp af Flume

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.

Indlæs data fra Twitter ved hjælp af Flume

Opret nu JAR 'MyTwitterSourceForFlume.jar' som-

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

Indlæs data fra Twitter ved hjælp af Flume

Trin 5) Kopier denne krukke til /lib/

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

Indlæs data fra Twitter ved hjælp af Flume

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

Indlæs data fra Twitter ved hjælp af Flume

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

Indlæs data fra Twitter ved hjælp af Flume

Oprettelse af en Twitter-applikation

Trin 1) Opret en Twitter-applikation ved at logge ind på https://developer.twitter.com/

Oprettelse af en Twitter-applikation

Oprettelse af en Twitter-applikation

Trin 2) Gå til 'Mine ansøgninger' (Denne mulighed forsvinder når 'Æg' knappen i øverste højre hjørne klikkes)

Oprettelse af en Twitter-applikation

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.

Oprettelse af en Twitter-applikation

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'

Oprettelse af en 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'

Oprettelse af en Twitter-applikation

Oprettelse af en Twitter-applikation

Trin 7) Opdatér siden.

Trin 8) Klik på 'Test OAuth'. Dette vil blive vist 'OAuth' indstillinger for applikationen.

Oprettelse af en Twitter-applikation

Trin 9) Ændre 'flume.conf' ved hjælp af disse OAuth-indstillinger. Trin til at ændre 'flume.conf' er anført nedenfor.

Oprettelse af en Twitter-applikation

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

Rediger 'Flume.conf'-fil

Trin 2) Sæt også TwitterAgent.sinks.HDFS.hdfs.path som nedenfor,

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

Rediger 'Flume.conf'-fil

At vide , og , se værdi af parameter 'fs.defaultFS' sat i $HADOOP_HOME/etc/hadoop/core-site.xml

Rediger 'Flume.conf'-fil

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"

Streaming af Twitter-data ved hjælp af Flume

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

Streaming af Twitter-data ved hjælp af Flume

b. Find JAR-filen 'guava' som nedenfor

find . -name "guava*"

Streaming af Twitter-data ved hjælp af Flume

Flyt guava-10.0.1.krukke ud af ' /lib'.

sudo mv guava-10.0.1.jar ~/

Streaming af Twitter-data ved hjælp af Flume

c. Hent guava-17.0.krukke fra http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Streaming af Twitter-data ved hjælp af Flume

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

Streaming af Twitter-data ved hjælp af Flume

Kommandopromptvindue, hvor flume henter tweets-

Streaming af Twitter-data ved hjælp af Flume

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/

Streaming af Twitter-data ved hjælp af Flume