Apache Flume-Tutorial: Was ist, ArchiBeispiel für Architektur und Hadoop

⚡ Intelligente Zusammenfassung

Apache Flume ist ein verteilter Dienst zum Sammeln, Aggregieren und Verschieben großer Mengen von Protokolldaten in HDFS, der auf Agenten basiert, die eine Quelle, einen Kanal und eine Senke miteinander verketten.

  • 🔘 Agentenanatomie: Jeder Flume-Agent ist ein JVM-Prozess, der eine Quelle, einen oder mehrere Kanäle und eine Senke enthält.
  • ☑️ Zuverlässigkeit: Die Best-Effort-Übertragung toleriert keinen Knotenausfall; die End-to-End-Übertragung übersteht mehrere Knotenausfälle.
  • Fahrwerks-Konfiguration: Benutzerdefinierte Quellklassen werden zu einer JAR-Datei kompiliert, die in das Flume-Bibliotheksverzeichnis kopiert wird.
  • 🧪 Konfiguration: Eine Eigenschaftendatei benennt Quelle, Kanal und Ziel und legt den HDFS-Pfad sowie die Rollbeschränkungen fest.
  • Starten: Starten Sie die Pipeline mit dem flume-ng-Agenten, indem Sie dem Agenten einen Namen geben und auf die Datei flume.conf verweisen.
  • ⚠️ Beispiel aus dem Ausland: Der Twitter v1.1 Streaming-Endpunkt wurde im März 2023 abgeschaltet, daher sollte die Übung als benutzerdefiniertes Quellcode-Muster betrachtet werden.

Apache Flume-Tutorial mit Beschreibung der Agentenarchitektur, Konfiguration und einem Hadoop-Streaming-Beispiel

Was ist Apache Flume in Hadoop?

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

Flume in Hadoop unterstützt mehrere Datenquellen, darunter:

  • 'tail' (das Daten aus einer lokalen Datei über Flume in HDFS schreibt, ähnlich dem Unix-Befehl 'tail')
  • Systemprotokolle
  • Apache log4j (was ermöglicht Java Anwendungen zum Schreiben von Ereignissen in Dateien in HDFS über Flume).

Die aktuelle Version ist Rlume 1.11.0, veröffentlicht am 25. Oktober 2022 und erhältlich bei Apache Flume DownloadseiteDiese Anleitung wurde für Version 1.4.0 geschrieben, daher enthalten einige der folgenden Schritte einen Hinweis darauf, wo sich eine aktuelle Version anders verhält.

Ücretsiz TJ ve AG casinolarda bonus kodlarını spin → Architektur

Ein Flume-Agent ist ein JVM Der Prozess besteht aus drei Komponenten – Flume-Quelle, Flume-Kanal und Flume-Senke –, durch die sich Ereignisse nach ihrer Auslösung an einer externen Quelle ausbreiten. Das folgende Diagramm veranschaulicht die Verbindungen.

Flume-Architekturdiagramm, das einen Agenten mit einer Quelle, einem Kanal und einer Senke zeigt, die HDFS speisen.

  1. Die von der externen Quelle (einem Webserver) generierten Ereignisse werden von der Flume-Quelle verarbeitet. Die externe Quelle sendet Ereignisse an die Flume-Quelle in einem Format, das die Zielquelle erkennt.
  2. Die Flume-Quelle empfängt ein Ereignis und speichert es in einem oder mehreren Kanälen. Der Kanal dient als Speicher, der das Ereignis so lange aufbewahrt, bis es von der Flume-Senke verarbeitet wird. Dieser Kanal kann ein lokales Dateisystem zum Speichern dieser Ereignisse verwenden.
  3. Der Flume-Sink entfernt das Ereignis aus einem Kanal und speichert es in einem externen Repository wie HDFS. Es können mehrere Flume-Agenten vorhanden sein; in diesem Fall leitet der Flume-Sink das Ereignis an die Flume-Quelle des nächsten Agenten im Ablauf weiter.

Einige wichtige Merkmale der Rinne

  • Flume verfügt über ein flexibles Design, das auf Streaming-Datenflüssen basiert. Es ist fehlertolerant und robust und bietet mehrere Failover- und Wiederherstellungsmechanismen. Flume bietet verschiedene Zuverlässigkeitsstufen, darunter „Best-Effort-Lieferung“ und „End-to-End-Lieferung“. Best-Effort-Lieferung toleriert keinen Ausfall des Flume-Knotens, End-to-End-Lieferung Gewährleistet die Zustellung auch bei Ausfall mehrerer Knoten.
  • Flume überträgt Daten zwischen Quellen und Zielen. Diese Datenerfassung kann entweder geplant oder ereignisgesteuert erfolgen. Flume verfügt über eine eigene Abfrageverarbeitungs-Engine, die es vereinfacht, jeden neuen Datenbatch zu transformieren, bevor er an das Ziel übertragen wird.
  • Möglich Flume sinkt einschließlich HDFS und HBaseFlume kann auch Ereignisdaten wie Netzwerkverkehrsdaten, Daten von Social-Media-Websites und E-Mail-Nachrichten transportieren.

Einrichtung von Flume, Bibliothek und Quellcode

Bevor wir mit dem eigentlichen Prozess beginnen, stellen Sie sicher, dass Hadoop installiert ist; falls nicht, arbeiten Sie sich durch Wie installiert man Hadoop? Ändern Sie zunächst den Benutzer auf 'hduser' (die ID, die bei der Konfiguration von Hadoop verwendet wurde; Sie können zur Benutzer-ID wechseln, die Sie bei Ihrer eigenen Hadoop-Konfiguration verwendet haben).

Terminal wechselt den Linux-Benutzer zu hduser, bevor die Flume-Einrichtung beginnt

Schritt 1) Erstelle ein neues Verzeichnis mit dem Namen 'FlumeTutorial'.

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

Laden Sie hier Eingabedateien herunter

Überprüfen Sie die Dateiberechtigungen aller dieser Dateien wie unten beschrieben und erteilen Sie die Berechtigung „Lesen“, falls diese fehlt.

Terminal-Anzeige der Dateiberechtigungen der heruntergeladenen Datei Java Quelldaten

Schritt 2) Laden Sie 'Apache Flume' herunter von https://flume.apache.org/download.html.

In diesem Flume-Tutorial wurde Apache Flume 1.4.0 verwendet.

Apache Flume-Downloadseite mit dem Link zum Binär-Tarball zur Auswahl

Klicken Sie als Nächstes auf einen Spiegel.

Nach dem Klicken auf den Flume-Tarball-Link wurde die Apache-Spiegelseite aufgerufen.

Schritt 3) Kopieren Sie die heruntergeladene Tarball-Datei in das Verzeichnis Ihrer Wahl und führen Sie sie aus.tracDer Inhalt kann mit folgendem Befehl abgerufen werden.

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

Terminal extractrap das Flume-Tarball mit dem Befehl sudo tar -xvf

Dadurch wird ein neues Verzeichnis namens apache-flume-1.4.0-bin erstellt und extracDie Dateien werden hineinkopiert. Dieses Verzeichnis wird als bezeichnet im Rest des Artikels.

Schritt 4) Flume-Bibliothek einrichten. Kopieren Sie twitter4j-core-4.0.1.jar, flume-ng-configuration-1.4.0.jar, flume-ng-core-1.4.0.jar und flume-ng-sdk-1.4.0.jar nach

/lib/

Eine oder mehrere der kopierten JAR-Dateien könnten die Ausführungsberechtigung besitzen, was zu Problemen bei der Codekompilierung führen kann. Entziehen Sie diese Berechtigung daher. In meinem Fall besaß die Datei twitter4j-core-4.0.1.jar die Ausführungsberechtigung. Ich habe sie wie folgt entzogen.

sudo chmod -x twitter4j-core-4.0.1.jar

Terminal widerruft die Ausführungsberechtigung für die twitter4j-Kern-JAR-Datei

Anschließend erteilt der folgende Befehl allen Benutzern die Leseberechtigung für die Datei twitter4j-core-4.0.1.jar.

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

Bitte beachten Sie, dass ich twitter4j-core-4.0.1.jar von [Quelle einfügen] heruntergeladen habe. Maven-Repositoryund alle Flume-JAR-Dateien, z. B. flume-ng-*-1.4.0.jar, von die org.apache.flume-Artefakte.

Laden Sie Daten von Twitter mit Flume

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

Schritt 2) Setzen Sie CLASSPATH auf den Inhalt /lib/* und ~/FlumeTutorial/flume/mytwittersource/*.

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

Terminal exportiert den CLASSPATH, der auf die Flume-Bibliotheks- und Quellverzeichnisse verweist.

Schritt 3) Kompilieren Sie den Quellcode mit dem folgenden Befehl.

javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java

Terminal kompiliert die beiden Java Quelldateien mit javac

Schritt 4) Erstellen Sie eine JAR-Datei. Erstellen Sie zunächst mit einem Texteditor Ihrer Wahl eine Manifest.txt-Datei und fügen Sie die unten stehende Zeile hinzu.

Main-Class: flume.mytwittersource.MyTwitterSourceForFlume

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

Die Datei Manifest.txt mit dem Eintrag „Main-Class“ wird in einem Texteditor geöffnet.

Erstellen Sie nun die JAR-Datei 'MyTwitterSourceForFlume.jar' wie folgt.

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

Das Terminal packte die kompilierten Klassen in MyTwitterSourceForFlume.jar.

Schritt 5) Kopieren Sie diese JAR-Datei nach /lib/.

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

Terminal kopiert die benutzerdefinierte Quell-JAR-Datei in das Flume-Bibliotheksverzeichnis

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

Falls die Datei flume.conf nicht existiert, kopieren Sie die Datei flume-conf.properties.template und benennen Sie sie in flume.conf um.

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

Terminal kopiert flume-conf.properties.template nach flume.conf

Falls flume-env.sh nicht existiert, kopieren Sie flume-env.sh.template und benennen Sie die Datei in flume-env.sh um.

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

Terminal kopiert flume-env.sh.template nach flume-env.sh

Erstellen einer Twitter-Anwendung

Lies dies zuerst. Die Streaming-Version 1.1 statuses/filter Der von twitter4j 4.0.1 benötigte Endpunkt wurde am 9. März 2023 eingestellt, und die ihn ersetzende API v2 mit gefiltertem Stream ist jetzt verfügbar unter developer.x.comist nur in einer kostenpflichtigen Stufe verfügbar. Behandeln Sie die folgenden Bildschirme als benutzerdefiniertes Quellmuster und verweisen Sie dann denselben Agenten auf eine Datei-, Exec- oder Kafka-Quelle.

Schritt 1) Erstellen Sie eine Twitter-Anwendung, indem Sie sich im Entwicklerportal anmelden.

Die Twitter-Entwickler-Anmeldeseite, über die man die Anwendungsliste aufrufen konnte

Startseite des Twitter-Entwicklerkontos wird nach der Anmeldung angezeigt

Schritt 2) Gehen Sie zu „Meine Anwendungen“ (diese Option erscheint, wenn Sie auf die Schaltfläche „Ei“ in der oberen rechten Ecke klicken).

Die Seite „Meine Anwendungen“ des Twitter-Entwicklerportals

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

Schritt 4) Füllen Sie die Antragsdetails aus, indem Sie den Namen des Antrags, eine Beschreibung und eine Website angeben. Beachten Sie die Hinweise unterhalb der einzelnen Eingabefelder.

Twitter-Antragsformular mit den Feldern Name, Beschreibung und Website

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

Kontrollkästchen für die Nutzungsbedingungen und die Schaltfläche „Anwendung erstellen“ am Ende des Twitter-Formulars

Schritt 6) Im Fenster der neu erstellten Anwendung gehen Sie zum Tab „API-Schlüssel“, scrollen Sie auf der Seite nach unten und klicken Sie auf die Schaltfläche „Mein Zugriffstoken erstellen“.

Registerkarte „API-Schlüssel“ der neuen Twitter-Anwendung, bevor ein Zugriffstoken existiert

Die Details zum Zugriffstoken werden angezeigt, nachdem die Schaltfläche „Mein Zugriffstoken erstellen“ verwendet wurde.

Schritt 7) Lade die Seite neu.

Schritt 8) Klicken Sie auf „OAuth testen“. Dadurch werden die „OAuth“-Einstellungen der Anwendung angezeigt.

Testbildschirm für OAuth, der die OAuth-Einstellungen der Anwendung anzeigt

Schritt 9) Ändern Sie die Datei „flume.conf“ mithilfe dieser OAuth-Einstellungen. Die Schritte zur Änderung der Datei „flume.conf“ sind unten aufgeführt.

OAuth-Einstellungen, die den Verbraucherschlüssel, das Verbrauchergeheimnis und die Zugriffstokenwerte auflisten

Um die Datei 'flume.conf' zu aktualisieren, müssen wir den Consumer-Key, das Consumer-Secret, das Access-Token und das Access-Token-Secret kopieren.

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

Ändern Sie die Datei „flume.conf“.

Schritt 1) Öffnen Sie die Datei 'flume.conf' im Schreibmodus und legen Sie die Werte für die folgenden Parameter fest.

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

Die Datei flume.conf wird in einem Editor geöffnet und enthält die Eigenschaften für Quelle, Kanal und Senke von MyTwitAgent.

Schritt 2) Setzen Sie außerdem TwitterAgent.sinks.HDFS.hdfs.path wie folgt.

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

Die HDFS-Senken-Eigenschaft hdfs.path ist auf einen Hostnamen, eine Portnummer und das HDFS-Home-Verzeichnis festgelegt.

Um zu finden , Und Siehe den Wert des Parameters 'fs.defaultFS', der in $HADOOP_HOME/etc/hadoop/core-site.xml festgelegt ist, wie unten dargestellt.

Die Eigenschaft fs.defaultFS in der Datei core-site.xml gibt den Hostnamen und den Port an.

Schritt 3) Um die Daten bei Bedarf in HDFS zu schreiben, löschen Sie den unten stehenden Eintrag, falls er existiert.

TwitterAgent.sinks.HDFS.hdfs.rollInterval = 600

Beispiel: Twitter-Daten mit Flume streamen

Schritt 1) Öffnen Sie 'flume-env.sh' im Schreibmodus und legen Sie die Werte für die unten aufgeführten Parameter fest.

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

Öffnen Sie flume-env.sh in einem Editor, wobei JAVA_HOME und FLUME_CLASSPATH gesetzt sein müssen.

Schritt 2) Hadoop starten.

$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 befolgen wir in diesem Apache-Flume-Beispiel die unten beschriebenen Schritte, um Flume mit Hadoop 2.2.0 kompatibel zu machen. Dieser JAR-Austausch ist eine Korrektur aus der Zeit von Version 1.4.0; Flume 1.11.0 enthält bereits aktuelle Protobuf- und Guava-Versionen, sodass ein moderner Tarball diese normalerweise nicht mehr benötigt.

a. Verschieben Sie protobuf-java-2.4.1.jar aus dem Verzeichnis „ /lib'. Wechseln Sie zuerst in dieses Verzeichnis.

CD /lib

sudo mv protobuf-java-2.4.1.jar ~/

Terminal verschiebt protobuf-java-2.4.1.jar aus dem Flume-Bibliotheksverzeichnis

b. Suchen Sie die JAR-Datei 'guava' wie unten dargestellt.

find . -name "guava*"

Terminalbefehl zum Auffinden der mitgelieferten Guava-JAR-Datei

Verschieben Sie guava-10.0.1.jar aus dem Verzeichnis „ /lib'.

sudo mv guava-10.0.1.jar ~/

Terminal verschiebt guava-10.0.1.jar aus dem Flume-Bibliotheksverzeichnis

c. Laden Sie guava-17.0.jar herunter von Maven-Repository, unten gezeigt.

Maven-Repository-Seite für Guava 17.0, die Ersatz-JAR-Datei zum Herunterladen

Kopieren Sie nun die heruntergeladene JAR-Datei nach ' /lib'.

Schritt 4) Gehe zu ' /bin' und starten Sie Flume wie folgt.

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

Terminal startet den Flume-Agenten namens MyTwitAgent mit dem Befehl flume-ng

Das Befehlszeilenfenster, in dem Flume Tweets abruft, sieht folgendermaßen aus.

Die Eingabeaufforderung zeigt, wie der Flume-Agent Tweets abruft und in HDFS schreibt.

Aus der Meldung im Befehlsfenster geht hervor, dass die Ausgabe in das Verzeichnis /user/hduser/flume/tweets/ geschrieben wird. Öffnen Sie dieses Verzeichnis nun mit einem Webbrowser.

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

/flume/tweets/

Port 50070 ist die NameNode-Weboberfläche bei Hadoop 2; bei Hadoop 3 wurde dieselbe Seite auf Port 9870 verschoben.

Der HDFS-Browser zeigt das Verzeichnis flume/tweets mit den geladenen Tweet-Dateien an.

Die Spülung ist die eine Hälfte der Aufnahme: Sqoop importiert Tabellen in Batches, Flume-Streams-Ereignisse, dann Schwein or Hive die Dateien formen und oozie plant die Kette. Siehe auch Big-Data-Analysetools, MapReduce-Joins und Zähler und Talend.

Häufig gestellte Fragen

Das entspricht nicht der Beschreibung. Der Streaming-Status-/Filter-Endpunkt (Version 1.1) wurde am 9. März 2023 eingestellt, und die API-Version 2 als Ersatz ist kostenpflichtig. Die Flume-Mechanik ist weiterhin als benutzerdefinierter Quellcode anwendbar.

Die Modelle ermitteln das normale Log-Volumen und die Nachrichtenform als Basis und kennzeichnen anschließend Abweichungen, die von festen Schwellenwerten nicht erfasst werden. Außerdem gruppieren sie wiederholte Nachrichtenstapel. traces zu einem einzigen Vorfall zusammenfassen und eine wahrscheinliche Ursache entwerfen, wodurch die Triage verkürzt wird.

Copilot erstellt schnell Quell-, Kanal- und Senkenblöcke, vergibt aber willkürliche Eigenschaftsnamen und vermischt verschiedene Releases. Überprüfen Sie vor dem Start des Agenten jeden Schlüssel anhand der Flume-Benutzeranleitung für Ihre Version.

Flume streamt Ereignisdaten wie Protokolle kontinuierlich in HDFS. Sqoop verschiebt strukturierte Tabellen in geplanten Batches zwischen relationalen Datenbanken und Hadoop. Sie decken unterschiedliche Aspekte der Datenerfassung ab und ergänzen sich gut.

Ein Speicherkanal ist am schnellsten, verliert aber zwischengespeicherte Ereignisse, wenn der Agent ausfällt. Ein Dateikanal schreibt auf die Festplatte und übersteht Neustarts, bietet aber einen geringeren Durchsatz. Daten, die nicht erneut gesendet werden können, sollten Sie auf Datenbeständigkeit setzen.

Kafka ist mittlerweile der Standard, da es Daten speichert und viele Konsumenten bedienen kann. Flume 1.11.0 (ab Oktober 2022) eignet sich weiterhin für die einfache, unidirektionale Protokollsammlung in HDFS.

Fast immer liegt es an einem JAR-Konflikt: Das Flume-Tarball enthält eigene Guava- und Protobuf-Versionen, die mit den von Hadoop geladenen Versionen in Konflikt stehen. Das Entfernen der älteren, mitgelieferten JAR-Datei behebt das Problem in der Regel.

Sie legen fest, wann die Senke eine Datei schließt und eine neue öffnet: rollSize in Bytes, rollCount in Ereignisanzahl, rollInterval in Sekunden. Null deaktiviert diesen Auslöser.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: