Detaillierte Zusammenfassung der Flume-Wissenspunkte

Inhaltsverzeichnis

 

1.Flumendefinition

1.1 Warum Flume wählen?

2.Flumeninfrastruktur

2.1 Komponenten der Rinne

2.1 Flume's Interceptors (Abfangjäger)

2.2 Flume-Kanalwähler (Selektoren)

2.3 Flume's Sink PRoccessors (Prozessoren)

3. Echtzeitüberwachung von Flume

3.1 Echtzeitüberwachung von Hive-Protokollen und Hochladen auf HDFS

3.2 Überwachen Sie mehrere neue Dateien, die auf HDFS hochgeladen wurden

4.Flume fortgeschritten

4.1 Flume-Transaktion

4.2 Internes Prinzip des Gerinne

5. Rauchstruktur

5.1 Einfache Serien

5.2 Kopieren und Multiplexen

5.3 Lastausgleich und Failover

5.4 Aggregation

6. Zusammenfassung des Problems

6.1 Einstellung der Gerinneparameter

6.2 Transaktionsmechanismus von Flume

6.3 Gehen die von Flume gesammelten Daten verloren?


1.Flumendefinition

Fiume ist ein hochverfügbares, hochzuverlässiges, verteiltes System zur Erfassung, Aggregation und Übertragung von Massenprotokollen, das von Cloudera bereitgestellt wird. Flume basiert auf einer Streaming-Architektur, die flexibel und einfach ist.

1.1 Warum Flume wählen?

Die Hauptfunktion von Flume besteht darin, die Daten in Echtzeit von der lokalen Festplatte des Servers zu lesen und in HDFS zu schreiben.

2.Flumeninfrastruktur

2.1 Komponenten der Rinne

  • Agent

Der Agent ist ein JVM-Prozess. Er sendet Daten von der Quelle in Form von Ereignissen an das Ziel. Es gibt hauptsächlich drei Teile: Quelle, Kanal und Senke.

  • Quelle

Die Komponente, die für den Empfang von Daten an Flume Agent verantwortlich ist. Die Quellkomponente kann Protokolldaten verschiedener Typen und Formate verarbeiten, einschließlich avro, thrift, exec, jms, Spooling, Verzeichnis, Netcat, Sequenz, Generator, Syslog, http, Legacy

  • Sinken

Sink fragt die Ereignisse im Kanal kontinuierlich ab und entfernt sie stapelweise. Diese Ereignisse werden stapelweise in das Speicher- oder Indizierungssystem geschrieben oder an einen anderen Flume Agent gesendet. Zu den Zielen der Sink-Komponenten gehören hdfs, logger, avro und thrift, Ipc, Datei, Hbase, Solr, Benutzerdefiniert.

  • Kanal

Kanal ist ein Puffer zwischen Quelle und Senke. Daher ermöglicht Kanal, dass Quelle und Senke mit unterschiedlichen Raten arbeiten. Der Kanal ist threadsicher und kann mehrere Quellschreibvorgänge und mehrere Sinklesevorgänge gleichzeitig ausführen.

Flume verfügt über zwei Kanäle: Speicherkanal und Dateikanal

Der Speicherkanal ist eine Warteschlange im Speicher. Der Speicherkanal wird in Situationen verwendet, in denen kein Datenverlust erforderlich ist. Wenn Sie sich um Datenverlust kümmern müssen, sollte der Speicherkanal nicht verwendet werden, da Programmtod, Maschinenstillstandszeiten oder Neustart zu Datenverlust führen.

File Channel schreibt alle Ereignisse auf die Festplatte, sodass beim Herunterfahren des Programms oder bei Ausfallzeiten des Computers keine Daten verloren gehen.

  • Veranstaltung

Die Übertragungseinheit, die Grundeinheit der Flume-Datenübertragung, sendet Daten von der Quelle zum Ziel in Form eines Ereignisses. Das Ereignis besteht aus zwei Teilen: Header und Body. Der Header wird zum Speichern einiger Attribute des Ereignisses verwendet. Es handelt sich um eine kv-Struktur. Der Body wird zum Speichern der Daten in Form eines Byte-Arrays verwendet.

2.1 Flume's Interceptors (Abfangjäger)

In Flume darf ein Interceptor Ereignisse während der Übertragung abfangen und verarbeiten. Der Interceptor muss die Schnittstelle org.apache.flume.interceptor.Interceptor implementieren. Der Interceptor kann das Ereignis gemäß den Einstellungen des Entwicklers ändern oder sogar löschen. Flume unterstützt auch die Interceptor-Kette, die aus mehreren Interceptors besteht. Durch Angabe der Reihenfolge der Interceptors im Interceptor wird das Ereignis vom Interceptor nacheinander verarbeitet.

2.2 Flume-Kanalwähler (Selektoren)

Kanalauswahl wird in Szenarien verwendet, in denen die Quellkomponente Ereignisse an mehrere Kanäle überträgt. Häufig werden Replizieren (Standard) und Multiplexen verwendet. Das Replizieren ist für das Replizieren von Ereignissen auf mehrere Kanäle verantwortlich, während das Muleiplexen auf Ereignisattributen und Konfigurationsparametern basiert durchgeführt, und die Übereinstimmung wird erfolgreich an den angegebenen Kanal gesendet.

2.3 Flume's Sink PRoccessors (Prozessoren)

Benutzer können mehrere Senken zu einer Gesamtheit (Senkengruppe) zusammenfassen. Senkenprozessoren können verwendet werden, um Lastausgleichsfunktionen für alle Senken in der Gruppe bereitzustellen oder bei einem Zeitausfall ein Failover von einer Senke zur anderen zu implementieren.

3. Echtzeitüberwachung von Flume

Die Exec-Quelle eignet sich zur Überwachung einer angehängten Echtzeitdatei, kann jedoch nicht garantieren, dass die Daten nicht verloren gehen. Spooldir Source kann garantieren, dass die Daten nicht verloren gehen, und kann die wiederaufnehmbare Übertragung beim Ausschalten, aber die Verzögerung realisieren ist hoch und kann nicht in Echtzeit überwacht werden. Das erfasste Verzeichnis ist für die Offline-Erfassung geeignet. Die Taildir-Quelle kann nicht nur die wiederaufnehmbare Übertragung beim Ausschalten realisieren, sondern auch sicherstellen, dass die Daten nicht verloren gehen, und kann auch in Echtzeit ausgeführt werden Überwachung, die für die Offline-Erfassung oder Echtzeit-Erfassung verwendet werden kann.

3.1 Echtzeitüberwachung von Hive-Protokollen und Hochladen auf HDFS

Bedarfsanalyse:

Implementierungsschritte:

1. Wenn Flume Daten an HDFS ausgeben möchte, muss es das Hadoop-bezogene JAR-Paket enthalten und in den Ordner / opt / module / flume / lib kopieren 

commons-configuration-1.6.jar、
hadoop-auth-2.7.2.jar、
hadoop-common-2.7.2.jar、
hadoop-hdfs-2.7.2.jar、
commons-io-2.4.jar、
htrace-core-3.1.0-incubating.jar

2. Erstellen Sie die Datei flume-file-hdfs.conf und fügen Sie den folgenden Inhalt hinzu

# Name the components on this agent
a2.sources = r2
a2.sinks = k2
a2.channels = c2

# Describe/configure the source
a2.sources.r2.type = exec
a2.sources.r2.command = tail -F /opt/module/hive/logs/hive.log
a2.sources.r2.shell = /bin/bash -c

# Describe the sink
a2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://bigdata02:9000/flume/%Y%m%d/%H
#上传文件的前缀
a2.sinks.k2.hdfs.filePrefix = logs-
#是否按照时间滚动文件夹
a2.sinks.k2.hdfs.round = true
#多少时间单位创建一个新的文件夹
a2.sinks.k2.hdfs.roundValue = 1
#重新定义时间单位
a2.sinks.k2.hdfs.roundUnit = hour
#是否使用本地时间戳
a2.sinks.k2.hdfs.useLocalTimeStamp = true
#积攒多少个Event才flush到HDFS一次
a2.sinks.k2.hdfs.batchSize = 100
#多久生成一个新的文件
a2.sinks.k2.hdfs.rollInterval = 60
#设置每个文件的滚动大小
a2.sinks.k2.hdfs.rollSize = 134217700
#文件的滚动与Event数量无关
a2.sinks.k2.hdfs.rollCount = 0

# Use a channel which buffers events in memory
a2.channels.c2.type = memory
a2.channels.c2.capacity = 10000
a2.channels.c2.transactionCapacity = 1000

# Bind the source and sink to the channel
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2

3. Führen Sie Flume aus

bin / flume-ng agent --conf conf / --name a2 --conf-datei job / flume-datei-hdfs.conf

4. Aktivieren Sie Hadoop und HIve, um Protokolle zu erstellen

5. Ansicht auf HDFS

3.2 Überwachen Sie mehrere neue Dateien, die auf HDFS hochgeladen wurden

Bedarfsanalyse:

1. Erstellen Sie die Konfigurationsdatei flume-dir-hdfs.conf

a3.sources = r3
a3.sinks = k3
a3.channels = c3

# Describe/configure the source
a3.sources.r3.type = spooldir
a3.sources.r3.spoolDir = /opt/module/flume/upload
a3.sources.r3.fileSuffix = .COMPLETED
#忽略所有以.tmp结尾的文件,不上传
a3.sources.r3.ignorePattern = \\S*\\.tmp

# Describe the sink
a3.sinks.k3.type = hdfs
a3.sinks.k3.hdfs.path = hdfs://bigdata02:9000/flume/upload/%Y%m%d/%H
#上传文件的前缀
a3.sinks.k3.hdfs.filePrefix = upload-
#是否按照时间滚动文件夹
a3.sinks.k3.hdfs.round = true
#多少时间单位创建一个新的文件夹
a3.sinks.k3.hdfs.roundValue = 1
#重新定义时间单位
a3.sinks.k3.hdfs.roundUnit = hour
#是否使用本地时间戳
a3.sinks.k3.hdfs.useLocalTimeStamp = true
#积攒多少个Event才flush到HDFS一次
a3.sinks.k3.hdfs.batchSize = 100
#设置文件类型,可支持压缩
a3.sinks.k3.hdfs.fileType = DataStream
#多久生成一个新的文件
a3.sinks.k3.hdfs.rollInterval = 60
#设置每个文件的滚动大小大概是128M
a3.sinks.k3.hdfs.rollSize = 134217700
#文件的滚动与Event数量无关
a3.sinks.k3.hdfs.rollCount = 0

# Use a channel which buffers events in memory
a3.channels.c3.type = memory
a3.channels.c3.capacity = 10000
a3.channels.c3.transactionCapacity = 1000

# Bind the source and sink to the channel
a3.sources.r3.channels = c3
a3.sinks.k3.channel = c3

2. Starten Sie den Überwachungsordner

 bin / flume-ng agent --conf conf / --name a3 --conf-datei job / flume-dir-hdfs.conf

3. Fügen Sie dem Upload-Ordner Dateien hinzu

Erstellen Sie einen Upload-Ordner im Verzeichnis / opt / module / flume

Fügen Sie dem Upload-Ordner Dateien hinzu

4. Zeigen Sie die Daten in HDFS an

5. Warten Sie 1s und fragen Sie den Upload-Ordner erneut ab

4.Flume fortgeschritten

4.1 Flume-Transaktion

Transaktion setzen

  • doPut: Schreiben Sie die Batch-Daten in die temporäre Puffer-Putliste
  • doCommit: Überprüfen Sie, ob die Kanalspeicherwarteschlange zum Zusammenführen ausreicht
  • doPollback: Nicht genügend Speicherplatz im Kanalspeicher, Rollback-Daten

Nehmen Sie Angelegenheiten

  • doTake: Extrahieren Sie die Daten in die temporäre Puffer-TakeList und senden Sie sie an HDFS
  • doCommit: Wenn alle Daten erfolgreich gesendet wurden, löschen Sie die temporäre Puffer-TakeList
  • doRollback: Wenn während der Datenübertragung eine Ausnahme auftritt, werden beim Rollback die Daten im temporären Puffer takeList an die Kanalspeicherwarteschlange zurückgegeben

4.2 Internes Prinzip des Gerinne

4.2.1 Wichtige Komponenten

1)ChannelSelector

Die Rolle von ChannelSelector besteht darin, auszuwählen, an welchen Kanal das Ereignis gesendet werden soll. Es gibt zwei Arten, nämlich Replizieren und Multiplexen .

ReplicatingSelector sendet dasselbe Ereignis an alle Kanäle, und Multiplexing sendet verschiedene Ereignisse gemäß den entsprechenden Prinzipien an verschiedene Kanäle.

2) SinkProcessor

Es gibt drei Arten von SinkProcessor, nämlich DefaultSinkProcessor , LoadBalancingSinkProcessor und FailoverSinkProcessor

DefaultSinkProcessor entspricht einem einzelnen Sink, LoadBalancingSinkProcessor und FailoverSinkProcessor entsprechen der Sink Group, LoadBalancingSinkProcessor kann die Funktion des Lastausgleichs realisieren und FailoverSinkProcessor kann die Funktion des Failovers realisieren .

5. Rauchstruktur

5.1 Einfache Serien

Dieser Modus verbindet mehrere Gerinne nacheinander, beginnend von der ursprünglichen Quelle bis zum Zielspeichersystem der endgültigen Senke. Dieser Modus wird nicht empfohlen, um zu viele Gerinne zu überbrücken. Übermäßige Gerinne wirken sich nicht nur auf die Übertragungsrate aus, sondern auch auf das gesamte Übertragungssystem, sobald ein Knotenkanal während des Übertragungsprozesses ausfällt.

5.2 Kopieren und Multiplexen

Flume unterstützt den Ereignisfluss zu einem oder mehreren Zielen. In diesem Modus können dieselben Daten auf mehrere Kanäle kopiert werden, oder verschiedene Daten können auf verschiedene Kanäle verteilt werden, und Senken können wählen, ob sie an verschiedene Ziele senden möchten.

5.3 Lastausgleich und Failover

Flume unterstützt die logische Gruppierung mehrerer Senken in einer Senkengruppe. Die Senkengruppe kann mit verschiedenen SinkProzessoren verwendet werden, um einen Lastausgleich und eine Fehlerbehebung zu erreichen.

5.4 Aggregation

Dieses Modell ist unser am weitesten verbreitetes und sehr praktisches. Tägliche Webanwendungen werden normalerweise auf Hunderten von Servern verteilt, sogar auf Tausenden oder Zehntausenden von Servern. Das generierte Protokoll ist auch sehr mühsam zu verarbeiten. Diese Kombination von Gerinnen kann dieses Problem gut lösen. Jeder Server stellt ein Gerinne zum Sammeln von Protokollen bereit, überträgt es an ein Gerinne, das Protokolle sammelt, und lädt das Gerinne zur Protokollanalyse auf hdfs, hive, hbase usw. hoch.

6. Zusammenfassung des Problems

6.1 Flume Parameter - Tuning

 

1. Quelle

Durch Erhöhen der Anzahl der Quellen (die Anzahl der Dateigruppen kann bei Verwendung von Tair Dir Source erhöht werden) kann die Fähigkeit der Quelle zum Lesen von Daten erhöht werden. Beispiel: Wenn in einem bestimmten Verzeichnis zu viele Dateien generiert wurden, müssen Sie das Dateiverzeichnis in mehrere Dateiverzeichnisse aufteilen und mehrere Quellen gleichzeitig konfigurieren, um sicherzustellen, dass die Quelle über genügend Möglichkeiten verfügt, die neu generierten Daten abzurufen.

Der Parameter batchSize bestimmt die Anzahl der Ereignisse, die Source stapelweise zu Channel transportiert. Wenn Sie diesen Parameter ordnungsgemäß erhöhen, kann die Leistung von Source beim Transport von Ereignissen zu Channel verbessert werden.

2. Kanal 

Der Kanal hat die beste Leistung, wenn Speicher als Typ ausgewählt ist. Daten können jedoch verloren gehen, wenn der Flume-Prozess unerwartet hängt. Der Kanal hat eine bessere Fehlertoleranz, wenn der Dateityp ausgewählt ist, aber seine Leistung ist schlechter als die des Speicherkanals.

Bei Verwendung des Dateikanals konfiguriert dataDirs mehrere Verzeichnisse unter verschiedenen Festplatten, um die Leistung zu verbessern.

Der Parameter Kapazität bestimmt die maximale Anzahl von Ereignissen, die der Kanal halten kann. Der Parameter transactionCapacity bestimmt die maximale Anzahl von Ereignissen, die Source jedes Mal in den Kanal schreibt, und die maximale Anzahl von Ereignissen, die Sink jedes Mal vom Kanal liest. Die Transaktionskapazität muss größer sein als die BatchSize- Parameter von Source und Sink .

3. Waschbecken 

Das Erhöhen der Anzahl von Senken kann die Fähigkeit von Senken erhöhen, Ereignisse zu konsumieren. Die Spüle ist nicht so groß wie möglich. Zu viele Spülen belegen Systemressourcen und verursachen unnötige Verschwendung von Systemressourcen.

Der Parameter batchSize bestimmt die Anzahl der Ereignisse, die die Senke stapelweise gleichzeitig aus dem Kanal liest. Wenn Sie diesen Parameter ordnungsgemäß erhöhen, kann dies die Leistung der Ereignisse verbessern, die die Senke aus dem Kanal verschieben.

6.2 Transaktionsmechanismus von Flume

Flumes Transaktionsmechanismus (ähnlich dem Datenbanktransaktionsmechanismus): Flume verwendet zwei unabhängige Transaktionen, um für die Ereignisübermittlung von Soucrce an Channel und von Channel an Sink verantwortlich zu sein. Beispielsweise erstellt die Spooling-Verzeichnisquelle ein Ereignis für jede Zeile der Datei. Sobald alle Ereignisse in der Transaktion an den Kanal übermittelt wurden und die Übermittlung erfolgreich war, markiert Soucrce die Datei als vollständig. Auf die gleiche Weise behandelt die Transaktion den Übertragungsprozess von Channel zu Sink auf ähnliche Weise. Wenn das Ereignis aus irgendeinem Grund nicht aufgezeichnet werden kann, wird die Transaktion zurückgesetzt. Und alle Events bleiben im Channel und warten darauf, wieder ausgeliefert zu werden.

6.3 Gehen die von Flume gesammelten Daten verloren ?

Nach den Architekturprinzipien von Flume ist es für Flume unmöglich, Daten zu verlieren. Es verfügt über einen vollständigen internen Transaktionsmechanismus. Quelle zu Kanal ist transaktional und Kanal zu Senke ist transaktional. Daher tritt bei diesen beiden Links kein Datenverlust auf Eine mögliche Datenverlustsituation besteht nur darin, dass der Kanal memoryChannel verwendet, der Agent inaktiv ist und die Daten verloren gehen oder die Speicherdaten des Kanals voll sind, wodurch die Quelle nicht mehr schreibt und die ungeschriebenen Daten verloren gehen.

Flume verliert keine Daten, kann jedoch zu Datenverdopplungen führen. Wenn beispielsweise Daten erfolgreich von Sink gesendet wurden, aber keine Antwort empfangen wurde, sendet S i nk die Daten erneut, was zu Datenverdopplungen führen kann .

 

 

Ich denke du magst

Origin blog.csdn.net/Poolweet_/article/details/109483963
Empfohlen
Rangfolge