Apache Flume-tutorial: wat is, Architecture & Hadoop-voorbeeld

Wat is Apache Flume in Hadoop?

Apache Flume is een betrouwbaar en gedistribueerd systeem voor het verzamelen, aggregeren en verplaatsen van enorme hoeveelheden loggegevens. Het heeft een eenvoudige maar flexibele architectuur gebaseerd op streaming datastromen. Apache Flume wordt gebruikt om loggegevens te verzamelen die aanwezig zijn in logbestanden van webservers en deze te aggregeren in HDFS voor analyse.

Flume in Hadoop ondersteunt meerdere bronnen zoals –

  • 'tail' (die gegevens uit een lokaal bestand doorsluist en via Flume naar HDFS schrijft, vergelijkbaar met Unix-commando 'tail')
  • Systeemlogboeken
  • Apache-log4j (inschakelen Java toepassingen om gebeurtenissen naar bestanden in HDFS te schrijven via Flume).

Flume Architectuur

A Flume-agent is een JVM proces dat uit 3 componenten bestaat –Flume-bron, Flume kanaal en Gootsteen– waardoor gebeurtenissen zich voortplanten nadat ze bij een externe bron zijn geïnitieerd.

Flume Architectuur
Flume Architectuur
  1. In het bovenstaande diagram worden de gebeurtenissen gegenereerd door een externe bron (WebServer) verbruikt door Flume Data Source. De externe bron verzendt gebeurtenissen naar de Flume-bron in een formaat dat door de doelbron wordt herkend.
  2. Flume Source ontvangt een gebeurtenis en slaat deze op in een of meer kanalen. Het kanaal fungeert als een opslagplaats die de gebeurtenis bewaart totdat deze door de gootsteen wordt verbruikt. Dit kanaal kan een lokaal bestandssysteem gebruiken om deze gebeurtenissen op te slaan.
  3. Flume sink verwijdert de gebeurtenis uit een kanaal en slaat deze op in een externe opslagplaats zoals bijvoorbeeld HDFS. Er kunnen meerdere gootmiddelen zijn, in welk geval de goot de gebeurtenis doorstuurt naar de gootbron van het volgende gootmiddel in de stroom.

Enkele belangrijke kenmerken van FLUME

  • Flume heeft een flexibel ontwerp gebaseerd op streaming datastromen. Het is fouttolerant en robuust met meerdere failovers en herstelmechanismen. Flume Big data biedt verschillende niveaus van betrouwbaarheid, waaronder: 'best effort levering' en een 'end-to-end levering'. Best mogelijke levering tolereert geen storing van de Flume-knooppunten, terwijl 'end-to-end levering' modus garandeert levering, zelfs in het geval van uitval van meerdere knooppunten.
  • Flume vervoert gegevens tussen bronnen en putten. Deze verzameling van gegevens kan gepland of gebeurtenisgestuurd zijn. Flume heeft een eigen engine voor het verwerken van zoekopdrachten, waarmee u eenvoudig elke nieuwe batch gegevens kunt transformeren voordat deze naar de beoogde sink wordt verplaatst.
  • Mogelijk Flume zinkt omvatten HDFS en HBaseFlume Hadoop kan ook worden gebruikt om gebeurtenisgegevens te transporteren, waaronder maar niet beperkt tot netwerkverkeersgegevens, gegevens gegenereerd door sociale-mediawebsites en e-mailberichten.

Installatie van Flume, bibliotheek en broncode

Voordat we met het eigenlijke proces beginnen, zorg ervoor dat Hadoop is geïnstalleerd. Wijzig de gebruiker in 'hduser' (ID gebruikt tijdens de Hadoop-configuratie, u kunt overschakelen naar de userid die u tijdens uw Hadoop-configuratie gebruikt)

Installatie van Flume, bibliotheek en broncode

Stap 1) Maak een nieuwe map aan met de naam 'FlumeTutorial'

sudo mkdir FlumeTutorial
  1. Geef lees-, schrijf- en uitvoerrechten
    sudo chmod -R 777 FlumeTutorial
  2. Kopieer bestanden MijnTwitterSource.java en MijnTwitterSourceForFlume.java in deze map.

Download hier invoerbestanden

Controleer de bestandsrechten van al deze bestanden en als 'lees'-rechten ontbreken, verleen dan dezelfde-

Installatie van Flume, bibliotheek en broncode

Stap 2) Download 'Apache Flume' van een site- https://flume.apache.org/download.html

In deze Flume-tutorial is Apache Flume 1.4.0 gebruikt.

Installatie van Flume, bibliotheek en broncode

Volgende klik

Installatie van Flume, bibliotheek en broncode

Stap 3) Kopieer de gedownloade tarball naar de directory van uw keuze en pak de inhoud uit met behulp van de volgende opdracht

sudo tar -xvf apache-flume-1.4.0-bin.tar.gz

Installatie van Flume, bibliotheek en broncode

Met deze opdracht wordt een nieuwe map gemaakt met de naam apache-flume-1.4.0-bin en pak er bestanden in uit. Deze map zal worden genoemd in de rest van het artikel.

Stap 4) Flume bibliotheekopstelling

Kopiëren twitter4j-core-4.0.1.jar, flume-ng-configuratie-1.4.0.jar, flume-ng-core-1.4.0.jar, flume-ng-sdk-1.4.0.jar naar

/lib/

Het is mogelijk dat een of alle gekopieerde JAR-rechten moeten worden uitgevoerd. Dit kan een probleem veroorzaken bij het compileren van code. Trek dus de uitvoeringsrechten voor een dergelijke JAR in.

In mijn geval, twitter4j-core-4.0.1.jar was toestemming moeten uitvoeren. Ik heb het ingetrokken zoals hieronder-

sudo chmod -x twitter4j-core-4.0.1.jar

Installatie van Flume, bibliotheek en broncode

Na dit commando wordt 'lezen' toestemming gegeven twitter4j-core-4.0.1.jar aan iedereen.

sudo chmod +rrr /usr/local/apache-flume-1.4.0-bin/lib/twitter4j-core-4.0.1.jar

Houd er rekening mee dat ik heb gedownload-

– twitter4j-core-4.0.1.jar van https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core

- Alle vlam-JAR's, dwz flume-ng-*-1.4.0.jar van http://mvnrepository.com/artifact/org.apache.flume

Laad gegevens van Twitter met Flume

Stap 1) Ga naar de map die de broncodebestanden bevat.

Stap 2) Zet de KLASPAD bevatten /lib/* en ~/FlumeTutorial/flume/mijntwittersource/*

export CLASSPATH="/usr/local/apache-flume-1.4.0-bin/lib/*:~/FlumeTutorial/flume/mytwittersource/*"

Laad gegevens van Twitter met Flume

Stap 3) Compileer de broncode met behulp van de opdracht-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Laad gegevens van Twitter met Flume

Stap 4)Maak een pot

Maak eerst Manifest.txt bestand met behulp van een teksteditor naar keuze en voeg onderstaande regel erin toe-

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

.. hier flume.mytwittersource.MyTwitterSourceForFlume is de naam van de hoofdklasse. Houd er rekening mee dat u aan het einde van deze regel op de Enter-toets moet drukken.

Laad gegevens van Twitter met Flume

Maak nu JAR 'MijnTwitterBronForFlume.jar' net zo-

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

Laad gegevens van Twitter met Flume

Stap 5) Kopieer deze pot naar /lib/

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

Laad gegevens van Twitter met Flume

Stap 6) Ga naar de configuratiemap van Flume, /conf

Als flume.conf niet bestaat, kopieer dan flume-conf.properties.template en hernoem het naar flume.conf

sudo cp flume-conf.properties.template flume.conf

Laad gegevens van Twitter met Flume

If flume-env.sh bestaat niet, kopieer dan flume-env.sh.sjabloon en hernoem het naar flume-env.sh

sudo cp flume-env.sh.template flume-env.sh

Laad gegevens van Twitter met Flume

Een Twitter-applicatie maken

Stap 1) Maak een Twitter-applicatie door u aan te melden bij https://developer.twitter.com/

Een Twitter-applicatie maken

Een Twitter-applicatie maken

Stap 2) Ga naar 'Mijn toepassingen' (Deze optie wordt verwijderd wanneer 'Ei' knop in de rechterbovenhoek wordt geklikt)

Een Twitter-applicatie maken

Stap 3) Maak een nieuwe applicatie aan door op te klikken 'Nieuwe app maken'

Stap 4) Vul de applicatiedetails in door de naam van de applicatie, beschrijving en website op te geven. U kunt verwijzen naar de notities die onder elk invoerveld staan.

Een Twitter-applicatie maken

Stap 5) Scroll naar beneden op de pagina en accepteer de voorwaarden door te markeren 'Ja, ik ben het ermee eens' en klik op de knop'Maak uw Twitter-applicatie'

Een Twitter-applicatie maken

Stap 6) Ga in het venster van een nieuw gemaakte applicatie naar het tabblad 'API-sleutels' scroll naar beneden op de pagina en klik op de knop 'Maak mijn toegangstoken'

Een Twitter-applicatie maken

Een Twitter-applicatie maken

Stap 7) Ververs de pagina.

Stap 8) Klik op 'OAuth testen'. Dit wordt weergegeven: 'OAuth' instellingen van de applicatie.

Een Twitter-applicatie maken

Stap 9) wijzigen 'flume.conf' deze gebruiken OAuth-instellingen. Stappen om te wijzigen 'flume.conf' worden hieronder gegeven.

Een Twitter-applicatie maken

We moeten de Consumentensleutel, het Consumentengeheim, het Toegangstoken en het Toegangstokengeheim kopiëren om 'flume.conf' bij te werken.

Opmerking: deze waarden zijn eigendom van de gebruiker en zijn daarom vertrouwelijk en mogen dus niet worden gedeeld.

Wijzig het bestand 'flume.conf'

Stap 1) Openen 'flume.conf' in schrijfmodus en stel waarden in voor onderstaande parameters-

sudo gedit flume.conf

Kopieer onderstaande inhoud-

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

Wijzig het 'Flume.conf'-bestand

Stap 2) Ook instellen TwitterAgent.sinks.HDFS.hdfs.pad zoals hieronder,

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

Wijzig het 'Flume.conf'-bestand

Weten , en , zie waarde van parameter 'fs.defaultFS' ingesteld $HADOOP_HOME/etc/hadoop/core-site.xml

Wijzig het 'Flume.conf'-bestand

Stap 3) Om de gegevens naar HDFS te spoelen, verwijdert u onderstaande vermelding als deze bestaat:

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

Voorbeeld: Twitter-gegevens streamen met Flume

Stap 1) Openen 'goot-env.sh' in schrijfmodus en stel waarden in voor onderstaande parameters,

JAVA_HOME=<Installation directory of Java>
FLUME_CLASSPATH="<Flume Installation Directory>/lib/MyTwitterSourceForFlume.jar"

Twitter-gegevens streamen met Flume

Stap 2) Hadoop starten

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Stap 3) Twee van de JAR-bestanden uit de Flume-tarball zijn niet compatibel met Hadoop 2.2.0. We zullen dus de onderstaande stappen in dit Apache Flume-voorbeeld moeten volgen om Flume compatibel te maken met Hadoop 2.2.0.

a. Verplaatsen protobuf-java-2.4.1.jar van ' /lib'.

Ga naar ' /lib'

CD /lib

sudo mv protobuf-java-2.4.1.jar ~/

Twitter-gegevens streamen met Flume

b. Zoek naar JAR-bestand 'guava' zoals hieronder

find . -name "guava*"

Twitter-gegevens streamen met Flume

Verplaatsen guave-10.0.1.jar van ' /lib'.

sudo mv guava-10.0.1.jar ~/

Twitter-gegevens streamen met Flume

c. Download guave-17.0.jar van http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Twitter-gegevens streamen met Flume

Kopieer nu dit gedownloade jar-bestand naar ' /lib'

Stap 4) Ga naar ' /bin' en start Flume als-

./flume-ng agent -n MyTwitAgent -c conf -f <Flume Installation Directory>/conf/flume.conf

Twitter-gegevens streamen met Flume

Opdrachtpromptvenster waar Flume tweets ophaalt-

Twitter-gegevens streamen met Flume

Uit het opdrachtvensterbericht kunnen we zien dat er naar de uitvoer wordt geschreven /gebruiker/hduser/flume/tweets/ directory.

Open nu deze map met een webbrowser.

Stap 5) Om het resultaat van het laden van gegevens te zien, gebruikt u een geopende browser http://localhost:50070/ en blader door het bestandssysteem en ga vervolgens naar de map waar de gegevens zijn geladen, dat wil zeggen:

/flume/tweets/

Twitter-gegevens streamen met Flume