Video: PIPIEX | Tutorial | #011 | Daten protokollieren 2024
Einige der Daten, die im Hadoop Distributed File System (HDFS) landen, können dort über Datenbankladevorgänge oder andere Arten von Batch-Prozessen landen. Wenn Sie die Daten erfassen möchten, die in Datenströmen mit hohem Durchsatz fließen, z. B. Anwendungsprotokolldaten? Apache Flume ist der derzeit übliche Weg, dies einfach, effizient und sicher zu machen.
Apache Flume , ein weiteres Top-Level-Projekt der Apache Software Foundation, ist ein verteiltes System zur Aggregation und Übertragung großer Mengen von Streaming-Daten aus verschiedenen Quellen an einen zentralen Datenspeicher.
Anders ausgedrückt ist Flume für die kontinuierliche Aufnahme von Daten in HDFS ausgelegt. Bei den Daten kann es sich um beliebige Daten handeln, aber Flume eignet sich besonders gut für die Verarbeitung von Protokolldaten, wie z. B. Protokolldaten von Webservern. Einheiten der Daten, die Flume verarbeitet, werden Ereignisse genannt; Ein Beispiel für ein Ereignis ist ein Protokollsatz.
Um zu verstehen, wie Flume innerhalb eines Hadoop-Clusters funktioniert, müssen Sie wissen, dass Flume als ein oder mehrere Agenten ausgeführt wird und dass jeder Agent drei steckbare Komponenten hat: Quellen, Kanäle und Senken:
-
Quellen rufen Daten ab und senden sie an Kanäle.
-
Kanäle enthalten Datenwarteschlangen und dienen als Leitungen zwischen Quellen und Senken, was nützlich ist, wenn die eingehende Flussrate die ausgehende Flussrate übersteigt.
-
Sinkt verarbeitet Daten, die von Kanälen erfasst wurden, und überträgt sie an ein Ziel, z. B. HDFS.
Ein Agent muss mindestens eine Komponente ausführen, und jeder Agent ist in seiner eigenen Instanz der Java Virtual Machine (JVM) enthalten.
Ein Ereignis, das von einer Quelle in einen Kanal geschrieben wird, wird erst dann aus diesem Kanal entfernt, wenn es von einer Senke durch eine Transaktion entfernt wird. Wenn ein Netzwerkfehler auftritt, behalten Kanäle ihre Ereignisse in Warteschlange, bis die Senken sie in den Cluster schreiben können. Ein speicherinterner Kanal kann Ereignisse schnell verarbeiten, ist jedoch flüchtig und kann nicht wiederhergestellt werden, während ein dateibasierter Kanal Persistenz bietet und im Fehlerfall wiederhergestellt werden kann.
Jeder Agent kann mehrere Quellen, Kanäle und Senken haben, und obwohl eine Quelle auf viele Kanäle schreiben kann, kann eine Senke Daten von nur einem Kanal aufnehmen.
Ein Agent ist nur eine JVM, die Flume ausführt, und die Senken für jeden Agentenknoten im Hadoop-Cluster senden Daten an Collector-Knoten , die die Daten von vielen Agenten aggregieren. Schreiben Sie es in HDFS, wo es von anderen Hadoop-Tools analysiert werden kann.
Agenten können miteinander verkettet werden, sodass die Senke von einem Agenten Daten von einem anderen Agenten an die Quelle sendet.Avro, das Remote-Call-and-Serialization-Framework von Apache, ist die übliche Art, Daten mit Flume über ein Netzwerk zu senden, da es als nützliches Werkzeug für die effiziente Serialisierung oder Umwandlung von Daten in ein kompaktes Binärformat dient.
Im Zusammenhang mit Flume ist die Kompatibilität wichtig: Ein Avro-Ereignis erfordert beispielsweise eine Avro-Quelle, und eine Senke muss Ereignisse liefern, die für das Ziel geeignet sind.
Was diese große Kette von Quellen, Kanälen und Senken ausmacht, ist die Flume-Agentenkonfiguration, die in einer lokalen Textdatei gespeichert ist, die wie eine Java-Eigenschaftsdatei strukturiert ist. Sie können mehrere Agenten in derselben Datei konfigurieren. Schauen Sie sich eine Beispieldatei an, die als flume-agent bezeichnet wird. conf - es wird ein Agent namens shaman konfiguriert:
# Identifizieren Sie die Komponenten auf dem Agenten shaman: shaman. Quellen = netcat_s1 Schamane. Senken = hdfs_w1 Schamane. channels = in-mem_c1 # Konfiguriere die Quelle: Schamane. Quellen. netcat_s1. Typ = Netcat Schamane. Quellen. netcat_s1. binden = localhost Schamane. Quellen. netcat_s1. port = 44444 # Beschreibe die Spüle: Schamane. sinkt. hdfs_w1. Typ = hdfs Schamane. sinkt. hdfs_w1. hdfs. Pfad = hdfs: // Schamane. sinkt. hdfs_w1. hdfs. writeFormat = Textschamane. sinkt. hdfs_w1. hdfs. fileType = DataStream # Konfigurieren Sie einen Kanal, der Ereignisse im Speicher puffert: shaman. Kanäle. in-mem_c1. Typ = Gedächtnisschamane. Kanäle. in-mem_c1. Kapazität = 20000 Schamane. Kanäle. in-mem_c1. transactionCapacity = 100 # Binde die Quelle und die Senke an den Kanal: Schamane. Quellen. netcat_s1. Kanäle = In-mem_c1 Schamane. sinkt. hdfs_w1. channels = in-mem_c1
Die Konfigurationsdatei enthält Eigenschaften für jede Quelle, jeden Kanal und jede Senke im Agenten und gibt an, wie sie verbunden sind. In diesem Beispiel hat Agent Schamane eine Quelle, die Daten (Nachrichten an Netcat) auf Port 44444 abliest, einen Kanal, der Ereignisdaten im Speicher puffert, und eine Senke, die Ereignisdaten an die Konsole protokolliert.
Diese Konfigurationsdatei könnte verwendet worden sein, um mehrere Agenten zu definieren. Hier konfigurieren Sie nur eines, um die Dinge einfach zu halten.
Verwenden Sie zum Starten des Agenten ein Shell-Skript namens flume-ng, das sich im bin-Verzeichnis der Flume-Distribution befindet. Geben Sie über die Befehlszeile den Befehl agent aus und geben Sie den Pfad zur Konfigurationsdatei und den Namen des Agenten an.
Der folgende Beispielbefehl startet den Flume-Agenten:
flume-ng agent -f / -n Schaman
Das Log des Flume-Agenten sollte Einträge enthalten, die bestätigen, dass die Quelle, der Kanal und die Senke erfolgreich gestartet wurden.
Um die Konfiguration weiter zu testen, können Sie von einem anderen Terminal aus eine Verbindung mit Port 44444 herstellen und Flume ein Ereignis senden, indem Sie eine beliebige Textzeichenfolge eingeben. Wenn alles in Ordnung ist, gibt das ursprüngliche Flume-Terminal das Ereignis in einer Protokollnachricht aus, die Sie im Protokoll des Agenten sehen können.