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