nosql:flume_erste_schritte
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
nosql:flume_erste_schritte [2014/09/13 16:40] – [Apache Flume im Überblick] gpipperr | nosql:flume_erste_schritte [2014/11/16 16:26] (aktuell) – [Architektur] gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ==== Apache Flume im Überblick ==== | ||
+ | Mit Apache Flume können Log Events eingesammelt und zentral auf dem HDFS abgelegt werden. | ||
+ | |||
+ | |||
+ | * Eine Art „syslog“ Demon | ||
+ | * Übernimmt den Transport der Log Daten | ||
+ | * Eine " | ||
+ | * Ein " | ||
+ | * Ein " | ||
+ | |||
+ | |||
+ | Übersicht: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | ==== Installation unter Linux auf einer Datenbank Umgebung ==== | ||
+ | |||
+ | Da die Logs der Datenbanken auf dem Host sollen eingesammelt werden sollen, wird auf dem Host Flume installiert. | ||
+ | Weitere Libraries sind nicht notwendig. | ||
+ | |||
+ | Download der Software : http:// | ||
+ | <code bash> | ||
+ | |||
+ | http:// | ||
+ | |||
+ | md5sum apache-flume-1.5.0.1-bin.tar.gz | ||
+ | fa43105db822ce045f885a5ebc0f869e | ||
+ | |||
+ | tar xfvz apache-flume-1.5.0.1-bin.tar.gz | ||
+ | |||
+ | mv apache-flume-1.5.0.1-bin / | ||
+ | |||
+ | ln -s / | ||
+ | |||
+ | cd / | ||
+ | |||
+ | # Testen ob flume sich starten läßt | ||
+ | ./flume-ng version | ||
+ | Flume 1.5.0.1 | ||
+ | |||
+ | |||
+ | #Prüfen ob auch ein " | ||
+ | |||
+ | java -version | ||
+ | |||
+ | java version " | ||
+ | |||
+ | #falls nicht installieren und mit alternatives bekannt geben! | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Aufgabe - Lesen des Listener Logs einer Oracle 11g Datenbank==== | ||
+ | |||
+ | |||
+ | === Architektur === | ||
+ | |||
+ | ==Struktur der XML Log Datei im DIAG Verzeichnis== | ||
+ | |||
+ | zum Beispiel dieser typische Eintrag unter $ORACLE_BASE/ | ||
+ | <code xml> | ||
+ | <msg time=' | ||
+ | | ||
+ | | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Da im Listener.log auch viele interne Vorgänge der Datenbanken, | ||
+ | |||
+ | Wir lesen die Logs direkt auf dem Oracle Server aus und schreiben die Einträge in den Logs über eine eigenen Agent auf dem HDFS Node 1 in das HDFS. | ||
+ | |||
+ | Übersicht: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Der Agent auf dem DB Server liest als Source die XML Log Datei des Listeners ein. | ||
+ | |||
+ | Ein Channel im Memory sorgt für die Flusssteuerung, | ||
+ | |||
+ | Der Agent auf dem HDFS Knoten hat eine Source die wiederum die serialisierten Daten im Afro Format empfangen kann, einen Channel im Memory und einen Skink vom Typ HDFS. Damit werden dann die Daten in das HDFS geschrieben. | ||
+ | |||
+ | |||
+ | == Voraussetzung == | ||
+ | |||
+ | Flume ist installiert, | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | / | ||
+ | |||
+ | ls - / | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ===Test 1 - Nur das Log auslesen und 1zu1 in das HDFS übertragen === | ||
+ | |||
+ | Im ersten Test werden die Log Daten einfach in das HDFS geschrieben, | ||
+ | |||
+ | Die Daten werden auf dem Oracle Server gelesen und auf den HDFS übertragen, | ||
+ | |||
+ | |||
+ | ==Auf dem HDFS Node 1 - der OracleBigData Lite== | ||
+ | |||
+ | Es wird ein Agent angelegt der Daten im Avro Format serialisiert annimmt und auf dann einfach auf das HDFS schreibt. | ||
+ | |||
+ | Dazu wird eine Konfiguration erstellt und der Agent gestartet: | ||
+ | <code bash> | ||
+ | |||
+ | vi / | ||
+ | |||
+ | # The configuration file needs to define the sources, the channels and the sinks | ||
+ | # Sources, channels and sinks are defined per agent, in this case called agent2 | ||
+ | |||
+ | agent2.sources | ||
+ | agent2.channels = memoryChannel | ||
+ | agent2.sinks | ||
+ | |||
+ | # Channel type avro | ||
+ | |||
+ | agent2.sources.OraLogFiles.type = avro | ||
+ | agent2.sources.OraLogFiles.bind = 10.10.10.12 | ||
+ | agent2.sources.OraLogFiles.port = 44444 | ||
+ | |||
+ | |||
+ | # The channel can be defined as follows | ||
+ | |||
+ | agent2.sources.OraLogFiles.channels = memoryChannel | ||
+ | |||
+ | |||
+ | # Each sinks type must be defined | ||
+ | agent2.sinks.hdfsSink.type = hdfs | ||
+ | agent2.sinks.hdfsSink.hdfs.path = hdfs:// | ||
+ | agent2.sinks.hdfsSink.hdfs.filePrefix = OraLogs- | ||
+ | agent2.sinks.hdfsSink.hdfs.rollCount = 1000 | ||
+ | agent2.sinks.hdfsSink.hdfs.batchSize = 10 | ||
+ | |||
+ | #Specify the channel the sink should use | ||
+ | agent2.sinks.hdfsSink.channel = memoryChannel | ||
+ | |||
+ | # Each channels type is defined | ||
+ | agent2.channels.memoryChannel.type = memory | ||
+ | agent2.channels.memoryChannel.capacity = 100 | ||
+ | |||
+ | # | ||
+ | # starten | ||
+ | # | ||
+ | |||
+ | flume-ng agent -n agent2 -c conf -f / | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ==Auf dem Oracle Server== | ||
+ | |||
+ | Eine einfache Agent Konfiguration für eine Data Source vom Type " | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | # Testen ob der Sink auf dem HDFS Node überhaupt erreichbar ist | ||
+ | |||
+ | telnet bigdatalite.localdomain 44444 | ||
+ | |||
+ | Trying 10.10.10.12... | ||
+ | Connected to bigdatalite.localdomain. | ||
+ | Escape character is ' | ||
+ | |||
+ | #OK! | ||
+ | |||
+ | |||
+ | # | ||
+ | |||
+ | vi / | ||
+ | |||
+ | # The configuration file needs to define the sources, the channels and the sinks | ||
+ | # Sources, channels and sinks are defined per agent, in this case called agent2 | ||
+ | |||
+ | agent.sources | ||
+ | agent.channels = memoryChannel | ||
+ | agent.sinks | ||
+ | |||
+ | # For each one of the sources, the type is defined | ||
+ | |||
+ | # in this example we use a command from the os | ||
+ | # Channel type exec | ||
+ | |||
+ | agent.sources.OraListener.type = exec | ||
+ | agent.sources.OraListener.command = tail -F / | ||
+ | |||
+ | # The channel can be defined as follows | ||
+ | agent.sources.OraListener.channels = memoryChannel | ||
+ | |||
+ | #sink | ||
+ | agent.sinks.avro-forward.type = avro | ||
+ | agent.sinks.avro-forward.hostname = 10.10.10.12 | ||
+ | agent.sinks.avro-forward.port = 44444 | ||
+ | |||
+ | #Specify the channel the sink should use | ||
+ | agent.sinks.avro-forward.channel = memoryChannel | ||
+ | |||
+ | # Each channels type is defined | ||
+ | agent.channels.memoryChannel.type = memory | ||
+ | agent.channels.memoryChannel.capacity = 100 | ||
+ | |||
+ | # | ||
+ | # starten | ||
+ | # | ||
+ | |||
+ | export JAVA_HOME=/ | ||
+ | |||
+ | / | ||
+ | |||
+ | # einen Eintrag in das Listener Log erzeugen | ||
+ | |||
+ | $ORACLE_HOME/ | ||
+ | |||
+ | </ | ||
+ | |||
+ | Auf dem HDFS Server: | ||
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | # Logs auf dem HDFS kontrollieren: | ||
+ | # | ||
+ | |||
+ | hdfs dfs -ls / | ||
+ | |||
+ | hdfs dfs -cat / | ||
+ | |||
+ | SEQ!org.apache.hadoop.io.LongWritable" | ||
+ | |||
+ | # Daten sind angekommen! | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | === Erweitertes Beispiel ==== | ||
+ | |||
+ | Im nächsten Schritt wird das Log vom Flume Agent mit einer eigenen Filter Source gelesen und übertragen. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Quellen ==== | ||
+ | |||
+ | |||
+ | * http:// | ||
+ | * | ||
+ | Doku: | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * https:// | ||
+ | |||
+ | Netz: | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | Vorträge: | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | XML Stream: | ||
+ | |||
+ | * http:// |
nosql/flume_erste_schritte.txt · Zuletzt geändert: 2014/11/16 16:26 von gpipperr