Apache Flume Tutorial: Wat is, Architectuur & 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 op basis van streaming datastromen. Apache Flume wordt gebruikt om loggegevens in logbestanden van webservers te verzamelen en voor analyse samen te voegen in HDFS.

Flume in Hadoop ondersteunt meerdere bronnen zoals -

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

In deze Apache Flume-zelfstudie leer je-

Flume-architectuur

TOT Flume-agent is een JVM proces dat 3 componenten heeft - goot bron, goot kanaal en Gootgoot - waardoor gebeurtenissen zich voortplanten nadat ze bij een externe bron zijn geïnitieerd.

Flume-architectuur



  1. In het bovenstaande diagram worden de gebeurtenissen gegenereerd door externe bron (WebServer) gebruikt door Flume Data Source. De externe bron stuurt gebeurtenissen naar de Flume-bron in een formaat dat wordt herkend door de doelbron.
  2. Flume Source ontvangt een gebeurtenis en slaat deze op in een of meer kanalen. Het kanaal fungeert als een opslagplaats die het evenement bewaart totdat het wordt geconsumeerd door de gootgootsteen. Dit kanaal kan een lokaal bestandssysteem gebruiken om deze gebeurtenissen op te slaan.
  3. Flume sink verwijdert de gebeurtenis van een kanaal en slaat deze op in een externe opslagplaats zoals bijvoorbeeld HDFS. Er kunnen meerdere gootmiddelen zijn, in welk geval gootzink 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 heeft verschillende betrouwbaarheidsniveaus te bieden, waaronder: 'best-effort levering' en een 'end-to-end levering' . Best-effort levering tolereert geen storing van de Flume-knooppunten, terwijl: 'end-to-end levering' mode garandeert levering, zelfs in het geval van meerdere uitval van knooppunten.
  • Flume draagt ​​gegevens tussen bronnen en putten. Deze verzameling van gegevens kan gepland of gebeurtenisgestuurd zijn. Flume heeft zijn eigen queryverwerkingsengine waarmee het gemakkelijk is om elke nieuwe batch gegevens te transformeren voordat deze naar de beoogde gootsteen wordt verplaatst.
  • Mogelijk Gootgootstenen erbij betrekken HDFS en HBase . Flume Hadoop kan ook worden gebruikt om gebeurtenisgegevens te transporteren, inclusief maar niet beperkt tot netwerkverkeersgegevens, gegevens gegenereerd door sociale-mediawebsites en e-mailberichten.

Installatie van Flume, bibliotheek en broncode

Voordat we beginnen met het daadwerkelijke proces, moet u ervoor zorgen dat Hadoop is geïnstalleerd. Verander de gebruiker in 'hduser' (id die wordt gebruikt tijdens de Hadoop-configuratie, u kunt overschakelen naar de gebruikers-ID die wordt gebruikt tijdens uw Hadoop-configuratie)

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

  1. Schenken a lees-, schrijf- en uitvoerrechten |_+_|
  2. Bestanden kopiëren MijnTwitterSource.java en MyTwitterSourceForFlume.java in deze map.

Download invoerbestanden van hier

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

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

Apache Flume 1.4.0 is gebruikt in deze Flume-tutorial.

Volgende klik

Stap 3) Kopieer de gedownloade tarball naar de map van uw keuze en pak de inhoud uit met het volgende commando |__+_|

Deze opdracht maakt een nieuwe map aan met de naam apache-flume-1.4.0-bin en pak er bestanden in uit. Deze map zal worden aangeduid als in de rest van het artikel.

Stap 4) Opstelling van de Flume-bibliotheek

Kopiëren 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 tot

/lib/

Het is mogelijk dat een van de of alle gekopieerde JAR machtigingen moet uitvoeren. Dit kan een probleem veroorzaken bij het compileren van code. Trek dus de uitvoeringsmachtiging voor een dergelijke JAR in.

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

Na dit commando geeft 'lees' toestemming op twitter4j-core-4.0.1.jar aan iedereen. |__+_|

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, d.w.z. 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 met daarin de broncodebestanden.

Stap 2) Set KLASSPAAT bevatten /lib/* en ~/FlumeTutorial/flume/mytwittersource/*

sudo mkdir FlumeTutorial

Stap 3) Compileer de broncode met het commando- |_+_|

Stap 4) Maak een pot

Maak eerst Manifest.txt bestand met een teksteditor naar keuze en voeg de onderstaande regel erin toe- |_+_|

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

Maak nu JAR ' MijnTwitterSourceForFlume.jar' als- |__+_|

Stap 5) Kopieer deze pot naar /lib/

sudo chmod -R 777 FlumeTutorial

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 |__+_|

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

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

Een Twitter-applicatie maken

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

Stap 2) Ga naar 'Mijn toepassingen' (Deze optie wordt weggelaten wanneer 'Ei' knop in de rechterbovenhoek is aangeklikt)

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

Stap 4) Vul de aanvraaggegevens in door de naam van de aanvraag, beschrijving en website op te geven. U kunt de opmerkingen onder elk invoervak ​​raadplegen.

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 je 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 aan'

Stap 7) Ververs de pagina.

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

Stap 9) Aanpassen '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 'flume.conf'-bestand

Stap 1) Open 'flume.conf' in schrijfmodus en stel waarden in voor onderstaande parameters- |_+_|

Kopieer onderstaande inhoud- |__+_|

Stap 2) Stel ook in TwitterAgent.sinks.HDFS.hdfs.path zoals hieronder,

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

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

Stap 3) Om de gegevens naar HDFS te spoelen, als het komt, verwijder het onderstaande item als het bestaat,

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

Voorbeeld: Twitter-gegevens streamen met Flume

Stap 1) Open 'flume-env.sh' in schrijfmodus en stel waarden in voor onderstaande parameters, |__+_| |__+_|

Stap 2) Hadoop starten |__+_| |__+_|

Stap 3) Twee van de JAR-bestanden van 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.

tot. Beweging protobuf-java-2.4.1.jar uit '/lib'.

Ga naar '/lib'

cd /lib

sudo chmod -x twitter4j-core-4.0.1.jar

B. Zoek naar JAR-bestand 'guave' zoals hieronder |__+_|

Beweging guave-10.0.1.jar uit '/lib'.

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

C. Downloaden 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 '/ben' en start Flume als- |__+_|

Opdrachtpromptvenster waar flume Tweets ophaalt-

Vanuit het opdrachtvensterbericht kunnen we zien dat de uitvoer is geschreven naar /gebruiker/hduser/flume/tweets/ map.

Open nu deze map met een webbrowser.

Stap 5) Om het resultaat van het laden van gegevens te zien, opent u een browser http://localhost:50070/ en blader door het bestandssysteem, ga dan naar de map waar de gegevens zijn geladen, dat is-

/flume/tweets/