Apache Flume-Tutorial: Was ist, Architektur und Hadoop-Beispiel

Was ist Apache Flume in Hadoop?

Apache Flume ist ein zuverlässiges und verteiltes System zum Sammeln, Aggregieren und Verschieben riesiger Mengen an Protokolldaten. Es verfügt über eine einfache, aber flexible Architektur, die auf Streaming-Datenflüssen basiert. Apache Flume wird verwendet, um Protokolldaten in Protokolldateien von Webservern zu sammeln und sie zur Analyse in HDFS zu aggregieren.

Flume in Hadoop unterstützt mehrere Quellen wie –

  • „tail“ (der Daten aus einer lokalen Datei weiterleitet und über Flume in HDFS schreibt, ähnlich dem Unix-Befehl „tail“)
  • Systemprotokolle
  • Apache log4j (Ermöglichen Sie Java-Anwendungen, Ereignisse über Flume in Dateien in HDFS zu schreiben.)

Flume-Architektur

A Flume-Agent ist eine JVM Prozess, der aus 3 Komponenten besteht –Flume-Quelle, Flume-Kanal und Flume Waschbecken– durch die sich Ereignisse ausbreiten, nachdem sie von einer externen Quelle ausgelöst wurden.

Flume-Architektur
Flume-Architektur
  1. Im obigen Diagramm werden die von einer externen Quelle (WebServer) generierten Ereignisse von der Flume-Datenquelle verarbeitet. Die externe Quelle sendet Ereignisse in einem Format an die Flume-Quelle, das von der Zielquelle erkannt wird.
  2. Flume Source empfängt ein Ereignis und speichert es in einem oder mehreren Kanälen. Der Kanal fungiert als Speicher, der das Ereignis speichert, bis es von der Gerinne-Senke verbraucht wird. Dieser Kanal verwendet möglicherweise ein lokales Dateisystem, um diese Ereignisse zu speichern.
  3. Flume Sink entfernt das Ereignis aus einem Kanal und speichert es in einem externen Repository wie z. B. HDFS. Es können mehrere Flume-Agenten vorhanden sein. In diesem Fall leitet die Flume-Senke das Ereignis an die Flume-Quelle des nächsten Flume-Agenten im Fluss weiter.

Einige wichtige Funktionen von FLUME

  • Flume verfügt über ein flexibles Design, das auf Streaming-Datenflüssen basiert. Es ist fehlertolerant und robust und verfügt über mehrere Failover- und Wiederherstellungsmechanismen. Flume Big Data bietet verschiedene Zuverlässigkeitsstufen, darunter: „Best-Effort-Lieferung“ und ein „End-to-End-Lieferung“. Best-Effort-Lieferung toleriert keinen Ausfall eines Flume-Knotens „End-to-End-Lieferung“ Der Modus garantiert die Zustellung auch bei Ausfällen mehrerer Knoten.
  • Flume überträgt Daten zwischen Quellen und Senken. Diese Datenerfassung kann entweder geplant oder ereignisgesteuert erfolgen. Flume verfügt über eine eigene Abfrageverarbeitungs-Engine, die es einfach macht, jeden neuen Datenstapel zu transformieren, bevor er in die vorgesehene Senke verschoben wird.
  • Möglich Flume sinkt das HDFS und HBase. Flume Hadoop kann auch zum Transport von Ereignisdaten verwendet werden, einschließlich, aber nicht beschränkt auf Netzwerkverkehrsdaten, von Social-Media-Websites generierte Daten und zmail Nachrichten.

Einrichtung von Flume, Bibliothek und Quellcode

Bevor wir mit dem eigentlichen Prozess beginnen, stellen Sie sicher, dass Sie Hadoop installiert haben. Ändern Sie den Benutzer in „hduser“ (ID, die während der Hadoop-Konfiguration verwendet wird; Sie können zu der Benutzer-ID wechseln, die während Ihrer Hadoop-Konfiguration verwendet wird).

Einrichtung von Flume, Bibliothek und Quellcode

Schritt 1) Erstellen Sie ein neues Verzeichnis mit dem Namen „FlumeTutorial“.

sudo mkdir FlumeTutorial
  1. Erteilen Sie Lese-, Schreib- und Ausführungsberechtigungen
    sudo chmod -R 777 FlumeTutorial
  2. Dateien kopieren MyTwitterSource.java und MyTwitterSourceForFlume.java in diesem Verzeichnis.

Laden Sie hier Eingabedateien herunter

Überprüfen Sie die Dateiberechtigungen aller dieser Dateien. Wenn Leseberechtigungen fehlen, erteilen Sie diese.

Einrichtung von Flume, Bibliothek und Quellcode

Schritt 2) Laden Sie „Apache Flume“ von einer Website herunter. https://flume.apache.org/download.html

In diesem Flume-Tutorial wurde Apache Flume 1.4.0 verwendet.

Einrichtung von Flume, Bibliothek und Quellcode

Weiter Klicken

Einrichtung von Flume, Bibliothek und Quellcode

Schritt 3) Kopieren Sie den heruntergeladenen Tarball in das Verzeichnis Ihrer Wahl und extrahieren Sie den Inhalt wie folgtwing Befehl

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

Einrichtung von Flume, Bibliothek und Quellcode

Dieser Befehl erstellt ein neues Verzeichnis mit dem Namen Apache-flume-1.4.0-bin und extrahieren Sie Dateien hinein. Dieses Verzeichnis wird als bezeichnet im Rest des Artikels.

Schritt 4) Einrichtung der Flume-Bibliothek

Kopieren 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 zu

/lib/

Es ist möglich, dass eine oder alle der kopierten JAR-Dateien eine Ausführungsberechtigung benötigen. Dies kann zu Problemen bei der Codekompilierung führen. Entziehen Sie also die Ausführungsberechtigung für ein solches JAR.

In meinem Fall, twitter4j-core-4.0.1.jar war eine Ausführungserlaubnis benötigen. Ich habe es wie folgt widerrufen:

sudo chmod -x twitter4j-core-4.0.1.jar

Einrichtung von Flume, Bibliothek und Quellcode

Nach diesem Befehl wird die Leseberechtigung erteilt twitter4j-core-4.0.1.jar an alle.

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

Bitte beachten Sie, dass ich heruntergeladen habe-

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

- Alle Flammen-JARs, d. h. flume-ng-*-1.4.0.jar von http://mvnrepository.com/artifact/org.apache.flume

Laden Sie Daten von Twitter mit Flume

Schritt 1) Gehen Sie in das Verzeichnis, das die Quellcodedateien enthält.

Schritt 2) Festlegung von KLASSENPFAD zu enthalten /lib/* und ~/FlumeTutorial/flume/mytwittersource/*

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

Laden Sie Daten von Twitter mit Flume

Schritt 3) Kompilieren Sie den Quellcode mit dem Befehl-

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Laden Sie Daten von Twitter mit Flume

Schritt 4)Erstellen Sie ein Glas

Zuerst erstellen Manifest.txt Datei mit einem Texteditor Ihrer Wahl und fügen Sie die folgende Zeile ein:

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

.. Hier flume.mytwittersource.MyTwitterSourceForFlume ist der Name der Hauptklasse. Bitte beachten Sie, dass Sie am Ende dieser Zeile die Eingabetaste drücken müssen.

Laden Sie Daten von Twitter mit Flume

Erstellen Sie nun JAR 'MyTwitterSourceForFlume.jar' wie-

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

Laden Sie Daten von Twitter mit Flume

Schritt 5) Kopieren Sie dieses Glas nach /lib/

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

Laden Sie Daten von Twitter mit Flume

Schritt 6) Gehen Sie in das Konfigurationsverzeichnis von Flume. /conf

Wenn flume.conf nicht vorhanden ist, kopieren Sie flume-conf.properties.template und benennen Sie es in flume.conf um

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

Laden Sie Daten von Twitter mit Flume

If flume-env.sh existiert nicht, dann kopieren flume-env.sh.template und benenne es um in flume-env.sh

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

Laden Sie Daten von Twitter mit Flume

Erstellen einer Twitter-Anwendung

Schritt 1) Erstellen Sie eine Twitter-Anwendung, indem Sie sich anmelden https://developer.twitter.com/

Erstellen einer Twitter-Anwendung

Erstellen einer Twitter-Anwendung

Schritt 2) Gehen Sie zu 'Meine Anwendungen' (Diese Option wird gelöscht, wenn 'Ei' (die Schaltfläche oben rechts wird angeklickt)

Erstellen einer Twitter-Anwendung

Schritt 3) Erstellen Sie eine neue Anwendung, indem Sie auf klicken „Neue App erstellen“

Schritt 4) Bewerbung de ausfüllentails durch Angabe des Anwendungsnamens, der Beschreibung und der Website. Sie können sich auf die Hinweise unter jeder Eingabe beziehen box.

Erstellen einer Twitter-Anwendung

Schritt 5) Scrollen Sie auf der Seite nach unten und akzeptieren Sie die Bedingungen durch Markieren 'Ja, ich stimme zu' und klicken Sie auf die Schaltfläche„Erstellen Sie Ihre Twitter-Anwendung“

Erstellen einer Twitter-Anwendung

Schritt 6) Gehen Sie im Fenster einer neu erstellten Anwendung auf die Registerkarte, 'API-Schlüssel' Scrollen Sie auf der Seite nach unten und klicken Sie auf die Schaltfläche „Mein Zugriffstoken erstellen“

Erstellen einer Twitter-Anwendung

Erstellen einer Twitter-Anwendung

Schritt 7) Lade die Seite neu.

Schritt 8) Klicken Sie auf „OAuth testen“. Dies wird angezeigt 'OAuth' Einstellungen der Anwendung.

Erstellen einer Twitter-Anwendung

Schritt 9) Ändern 'flume.conf' diese verwenden OAuth-Einstellungen. Schritte zum Ändern 'flume.conf' sind unten angegeben.

Erstellen einer Twitter-Anwendung

Wir müssen den Verbraucherschlüssel, das Verbrauchergeheimnis, das Zugriffstoken und das Zugriffstokengeheimnis kopieren, um „flume.conf“ zu aktualisieren.

Hinweis: Diese Werte gehören dem Benutzer und sind daher vertraulich und sollten daher nicht weitergegeben werden.

Ändern Sie die Datei „flume.conf“.

Schritt 1) Offen 'flume.conf' im Schreibmodus und stellen Sie Werte für die folgenden Parameter ein:

sudo gedit flume.conf

Kopieren Sie den folgenden Inhalt:

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

Ändern Sie die Datei „Flume.conf“.

Schritt 2) Auch einstellen TwitterAgent.sinks.HDFS.hdfs.path wie nachstehend,

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

Ändern Sie die Datei „Flume.conf“.

Wissen , und , siehe Wert des Parameters 'fs.defaultFS' setzen in $HADOOP_HOME/etc/hadoop/core-site.xml

Ändern Sie die Datei „Flume.conf“.

Schritt 3) Um die Daten an HDFS zu übertragen, löschen Sie ggf. den folgenden Eintrag, falls vorhanden.

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

Beispiel: Twitter-Daten mit Flume streamen

Schritt 1) Offen 'flume-env.sh' im Schreibmodus und stellen Sie Werte für die folgenden Parameter ein,

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

Streaming von Twitter-Daten mit Flume

Schritt 2) Starten Sie Hadoop

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

Schritt 3) Zwei der JAR-Dateien aus dem Flume-Tarball sind nicht mit Hadoop 2.2.0 kompatibel. Daher müssen wir die folgenden Schritte in diesem Apache Flume-Beispiel befolgen, um Flume mit Hadoop 2.2.0 kompatibel zu machen.

a. Bewegung protobuf-java-2.4.1.jar von ' /lib'.

Gehen Sie zu ' /lib'

CD /lib

sudo mv protobuf-java-2.4.1.jar ~/

Streaming von Twitter-Daten mit Flume

b. Suchen Sie wie folgt nach der JAR-Datei „Guava“.

find . -name "guava*"

Streaming von Twitter-Daten mit Flume

Bewegung Guave-10.0.1.jar von ' /lib'.

sudo mv guava-10.0.1.jar ~/

Streaming von Twitter-Daten mit Flume

c. Herunterladen Guave-17.0.jar von http://mvnrepository.com/artifact/com.google.guava/guava/17.0

Streaming von Twitter-Daten mit Flume

Kopieren Sie nun diese heruntergeladene JAR-Datei nach ' /lib'

Schritt 4) Gehen Sie zu ' /Behälter' und starten Sie Flume als-

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

Streaming von Twitter-Daten mit Flume

Eingabeaufforderungsfenster, in dem Flume Tweets abruft.

Streaming von Twitter-Daten mit Flume

Anhand der Meldung im Befehlsfenster können wir erkennen, dass in die Ausgabe geschrieben wird /user/hduser/flume/tweets/ Verzeichnis.

Öffnen Sie nun dieses Verzeichnis mit einem Webbrowser.

Schritt 5) Um das Ergebnis des Datenladens anzuzeigen, öffnen Sie einen Browser http://localhost:50070/ Durchsuchen Sie das Dateisystem und gehen Sie dann zu dem Verzeichnis, in das die Daten geladen wurden.

/flume/tweets/

Streaming von Twitter-Daten mit Flume