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.
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.
- 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.
- 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.
- 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).
Schritt 1) Erstelle ein neues Verzeichnis mit dem Namen 'FlumeTutorial'.
sudo mkdir FlumeTutorial
- Erteilen Sie Lese-, Schreib- und Ausführungsberechtigungen.
sudo chmod -R 777 FlumeTutorial
- 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.
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.
Klicken Sie als Nächstes auf einen Spiegel.
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
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
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/*"
Schritt 3) Kompilieren Sie den Quellcode mit dem folgenden Befehl.
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
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.
Erstellen Sie nun die JAR-Datei 'MyTwitterSourceForFlume.jar' wie folgt.
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Schritt 5) Kopieren Sie diese JAR-Datei nach /lib/.
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
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
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
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.
Schritt 2) Gehen Sie zu „Meine Anwendungen“ (diese Option erscheint, wenn Sie auf die Schaltfläche „Ei“ in der oberen rechten Ecke klicken).
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.
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“.
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“.
Schritt 7) Lade die Seite neu.
Schritt 8) Klicken Sie auf „OAuth testen“. Dadurch werden die „OAuth“-Einstellungen der Anwendung angezeigt.
Schritt 9) Ändern Sie die Datei „flume.conf“ mithilfe dieser OAuth-Einstellungen. Die Schritte zur Änderung der Datei „flume.conf“ sind unten aufgeführt.
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
Schritt 2) Setzen Sie außerdem TwitterAgent.sinks.HDFS.hdfs.path wie folgt.
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/
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.
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"
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 ~/
b. Suchen Sie die JAR-Datei 'guava' wie unten dargestellt.
find . -name "guava*"
Verschieben Sie guava-10.0.1.jar aus dem Verzeichnis „ /lib'.
sudo mv guava-10.0.1.jar ~/
c. Laden Sie guava-17.0.jar herunter von Maven-Repository, unten gezeigt.
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
Das Befehlszeilenfenster, in dem Flume Tweets abruft, sieht folgendermaßen aus.
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.
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.


































