Apache Flume-Tutorial: Was ist, ArchiBeispiel für Architektur und Hadoop
Was ist Apache Flume in Hadoop?
Apache Flume ist ein zuverlässiges und verteiltes System zum Sammeln, Aggregieren und Verschieben großer Mengen von Protokolldaten. Es verfügt über eine einfache, aber flexible Architektur, die auf Streaming-Datenflüssen basiert. Apache Flume wird verwendet, um in Protokolldateien von Webservern vorhandene Protokolldaten zu sammeln und 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 (aktivieren Java Anwendungen zum Schreiben von Ereignissen in Dateien in HDFS über Flume).
Ücretsiz TJ ve AG casinolarda bonus kodlarını spin → 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.
- 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.
- 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.
- 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, darunter unter anderem Netzwerkverkehrsdaten, von Social-Media-Websites generierte Daten und E-Mail-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).
Schritt 1) Erstellen Sie ein neues Verzeichnis mit dem Namen „FlumeTutorial“.
sudo mkdir FlumeTutorial
- Erteilen Sie Lese-, Schreib- und Ausführungsberechtigungen
sudo chmod -R 777 FlumeTutorial
- 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.
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.
Weiter Klicken
Schritt 3) Kopieren Sie das heruntergeladene Tarball in das Verzeichnis Ihrer Wahl und extrahieren Sie den Inhalt mit dem folgenden Befehl
sudo tar -xvf apache-flume-1.4.0-bin.tar.gz
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
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 für https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core
- Alle Flammen-JARs, d. h. flume-ng-*-1.4.0.jar für 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) Stelle den KLASSENPFAD zu enthalten /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 Befehl-
javac -d . MyTwitterSourceForFlume.java MyTwitterSource.java
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.
Erstellen Sie nun JAR 'MyTwitterSourceForFlume.jar' wie-
jar cfm MyTwitterSourceForFlume.jar Manifest.txt flume/mytwittersource/*.class
Schritt 5) Kopieren Sie dieses Glas nach /lib/
sudo cp MyTwitterSourceForFlume.jar <Flume Installation Directory>/lib/
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
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
Erstellen einer Twitter-Anwendung
Schritt 1) Erstellen Sie eine Twitter-Anwendung, indem Sie sich anmelden https://developer.twitter.com/
Schritt 2) Gehen Sie zu 'Meine Anwendungen' (Diese Option wird gelöscht, wenn 'Ei' (die Schaltfläche oben rechts wird angeklickt)
Schritt 3) Erstellen Sie eine neue Anwendung, indem Sie auf klicken „Neue App erstellen“
Schritt 4) Füllen Sie die Anwendungsdetails aus, indem Sie den Namen der Anwendung, eine Beschreibung und eine Website angeben. Sie können die Hinweise unter jedem Eingabefeld beachten.
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“
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“
Schritt 7) Lade die Seite neu.
Schritt 8) Klicken Sie auf „OAuth testen“. Dies wird angezeigt 'OAuth' Einstellungen der Anwendung.
Schritt 9) Ändern 'flume.conf' diese verwenden OAuth-Einstellungen. Schritte zum Ändern 'flume.conf' sind unten angegeben.
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) Öffnen '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
Schritt 2) Auch einstellen TwitterAgent.sinks.HDFS.hdfs.path wie nachstehend,
TwitterAgent.sinks.HDFS.hdfs.path = hdfs:// : / /flume/tweets/
Wissen , und , siehe Wert des Parameters 'fs.defaultFS' setzen in $HADOOP_HOME/etc/hadoop/core-site.xml
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) Öffnen '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"
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 ~/
b. Suchen Sie wie folgt nach der JAR-Datei „Guava“.
find . -name "guava*"
Bewegung Guave-10.0.1.jar von ' /lib'.
sudo mv guava-10.0.1.jar ~/
c. Herunterladen Guave-17.0.jar für http://mvnrepository.com/artifact/com.google.guava/guava/17.0
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
Eingabeaufforderungsfenster, in dem Flume Tweets abruft.
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/