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.

- 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.
- 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.
- 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)
Stap 1) Maak een nieuwe map aan met de naam 'FlumeTutorial'
sudo mkdir FlumeTutorial
- Geef lees-, schrijf- en uitvoerrechten
sudo chmod -R 777 FlumeTutorial
- Kopieer bestanden MijnTwitterSource.java en MijnTwitterSourceForFlume.java in deze map.
Controleer de bestandsrechten van al deze bestanden en als 'lees'-rechten ontbreken, verleen dan dezelfde-
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.
Volgende klik
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
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
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/*"
Stap 3) Compileer de broncode met behulp van de opdracht-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
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.
Maak nu JAR 'MijnTwitterBronForFlume.jar' net zo-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Stap 5) Kopieer deze pot naar /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
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
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
Een Twitter-applicatie maken
Stap 1) Maak een Twitter-applicatie door u aan te melden bij https://developer.twitter.com/
Stap 2) Ga naar 'Mijn toepassingen' (Deze optie wordt verwijderd wanneer 'Ei' knop in de rechterbovenhoek wordt geklikt)
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.
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'
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'
Stap 7) Ververs de pagina.
Stap 8) Klik op 'OAuth testen'. Dit wordt weergegeven: 'OAuth' instellingen van de applicatie.
Stap 9) wijzigen 'flume.conf' deze gebruiken OAuth-instellingen. Stappen om te wijzigen 'flume.conf' worden hieronder gegeven.
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
Stap 2) Ook instellen TwitterAgent.sinks.HDFS.hdfs.pad zoals hieronder,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/
Weten , en , zie waarde van parameter 'fs.defaultFS' ingesteld $HADOOP_HOME/etc/hadoop/core-site.xml
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"
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 ~/
b. Zoek naar JAR-bestand 'guava' zoals hieronder
find . -name "guava*"
Verplaatsen guave-10.0.1.jar van ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Download guave-17.0.jar van http://mvnrepository.com/artifact/com.google.guava/guava/17.0
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
Opdrachtpromptvenster waar Flume tweets ophaalt-
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/