nosql:flume_erste_schritte
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | Nächste ÜberarbeitungBeide Seiten der Revision | ||
nosql:flume_erste_schritte [2014/09/13 16:20] – [Quellen] gpipperr | nosql:flume_erste_schritte [2014/09/13 16:40] – [Apache Flume im Überblick] 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: | ||
- | |||
- | {{ : | ||
- | |||
- | |||
- | == Vorraussetzung == | ||
- | |||
- | 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