nosql:flume_erste_schritte

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
nosql:flume_erste_schritte [2014/09/13 16:17] – [Quellen] gpipperrnosql: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 "Source" ließt die Quelle ein
 +  * Ein "Channel" puffert zwischen
 +  * Ein "Shink"   liefert die Daten ab / schreibt die Daten z.B. auf das HDFS
 +
 +
 +Übersicht:
 +
 +{{ :hadoop:apache_flume_v01.png?400 | Apache Flume Architektur}}
 +
 +
 +
 +==== 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://flume.apache.org/download.html und prüfen der md5 Summe:
 +<code bash>
 +
 +http://ftp-stud.hs-esslingen.de/pub/Mirrors/ftp.apache.org/dist/flume/1.5.0.1/apache-flume-1.5.0.1-bin.tar.gz 
 +
 +md5sum apache-flume-1.5.0.1-bin.tar.gz
 +fa43105db822ce045f885a5ebc0f869e  apache-flume-1.5.0.1-bin.tar.gz
 +
 +tar xfvz apache-flume-1.5.0.1-bin.tar.gz
 +
 +mv apache-flume-1.5.0.1-bin /usr/lib/apache-flume-1.5.0.1-bin
 +
 +ln -s /usr/lib/apache-flume-1.5.0.1-bin  /usr/lib/flume-ng
 +
 +cd /usr/lib/flume-ng/bin
 +
 +# Testen ob flume sich starten läßt
 +./flume-ng version
 +Flume 1.5.0.1
 +
 +
 +#Prüfen ob auch ein "echtes" Java 7 ist installiert!
 +
 +java -version
 +
 +java version "1.7.0_67"
 +
 +#falls nicht installieren und mit alternatives bekannt geben!
 +
 +</code>
 +
 +==== 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/diag/tnslsnr/<your-server>/listener/alert/log.xml:
 +<code xml>
 +<msg time='2014-09-06T11:21:44.179+02:00' org_id='oracle' comp_id='tnslsnr'
 + type='UNKNOWN' level='16' host_id='JUPITER'
 + host_addr='127.0.0.1'>
 + <txt>06-SEP-2014 11:21:44 * (CONNECT_DATA=(SID=GPI)(CID=(PROGRAM=null)(HOST=__jdbc__)(USER=null))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.10.10.1)(PORT=49831)) * establish * GPI * 0
 + </txt>
 +</msg>
 +</code>
 +
 +Da im Listener.log auch viele interne Vorgänge der Datenbanken, speziell im Cluster Umfeld, protokolliert werden, sollen bereits beim Lesen bestimmte Events ausgefiltert werden. Dazu muss dann später eine eigene "Source" definiert werden.
 +
 +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:
 +
 +{{ :hadoop:read_listener_log_oracle_flume_v01.png?500 | Auslesen Oracle Listener Log mit Apache Fume}}
 +
 +
 +== Vorraussetzung ==
 +
 +Flume ist installiert, Verzeichnis für die Konfiguration ist bekannt.
 +
 +<code bash>
 +
 +/usr/lib/flume-ng/bin/flume-ng version
 +
 +ls - /usr/lib/flume-ng/conf
 +
 +</code>
 +
 +
 +===Test 1  - Nur das Log auslesen und 1zu1 in das HDFS übertragen ===
 +
 +Im ersten Test werden die Log Daten einfach in das HDFS geschrieben, um die Grundarchitektur und Konfiguration besser zu verstehen und um die Umgebung zu testen.
 +
 +Die Daten werden auf dem Oracle Server gelesen und auf den HDFS übertragen, dort übernimmt ein weitere Agent die Daten und schreibt das in das HDFS.
 +
 +
 +==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 /etc/flume-ng/conf/agent2-conf.properties
 +
 +# 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  = OraLogFiles
 +agent2.channels = memoryChannel
 +agent2.sinks    = hdfsSink
 +
 +# 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://bigdatalite.localdomain:8020/user/oracle/gpi
 +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 /etc/flume-ng/conf/agent2-conf.properties
 +
 +</code>
 +
 +
 +==Auf dem Oracle Server==
 +
 +Eine einfache Agent Konfiguration für eine Data Source vom Type "exec" erstellen (mit dem Typ **exec** wird ein OS Kommando als Datenquelle angegeben) und als Sink den Agent auf dem Hadoop Node angeben:
 +
 +<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!
 +
 +
 +#Konfiguration anlegen
 +
 +vi /usr/lib/flume-ng/conf/agent-conf.properties
 +
 +# 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  = OraListener
 +agent.channels = memoryChannel
 +agent.sinks    = avro-forward
 +
 +# 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 /opt/oracle/diag/tnslsnr/oradb12c01/listener/alert/log.xml
 +
 +# 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=/usr/java/jdk1.7.0_67
 +
 +/usr/lib/flume-ng/bin/flume-ng agent -n agent -c /usr/lib/flume-ng/conf -f /usr/lib/flume-ng/conf/agent-conf.properties
 +
 +# einen Eintrag in das Listener Log erzeugen
 +
 +$ORACLE_HOME/bin/lsnrctl status
 +
 +</code>
 +
 +Auf dem HDFS Server:
 +
 +<code bash>
 +#
 +# Logs auf dem HDFS kontrollieren:
 +#
 +
 +hdfs dfs -ls /user/oracle/gpi/
 +
 +hdfs dfs -cat /user/oracle/gpi/OraLogs-.1410615198350
 +
 +SEQ!org.apache.hadoop.io.LongWritable"org.apache.hadoop.io.BytesWritabl]dñ´AZ¤¯¨ QHo9eU </txtHo9eV</msg>Ho9eWK<msg time='2014-09-13T15:34:58.686+02:00' org_id='oracle' comp_id='tnslsnr'Ho9eW= type='UNKNOWN' level='16' host_id='oradb12c01.pipperr.local'Ho9eW host_addr='10.10.10.110'>Ho9eX= <txt>WARNING: Subscription for node down event still pendinHo9eX </txtHo9eX</msg>Ho9eXK"
 +
 +# Daten sind angekommen!
 +
 +</code>
 +
 +
 +=== Erweitertes Beispiel ====
 +
 +Im nächsten Schritt wird das Log vom Flume Agent mit einer eigenen Filter Source gelesen und übertragen.
 +
 +
 +
 +
 +==== Quellen ====
 +
 +
 +  * http://flume.apache.org
 +  * 
 +Doku:
 +  * http://flume.apache.org/releases/content/1.5.0.1/FlumeUserGuide.html
 +  * http://flume.apache.org/FlumeUserGuide.html
 +  * https://blogs.apache.org/flume/entry/flume_ng_architecture
 +
 +Netz:
 +  * http://yourstory.com/2012/04/hive-for-retail-analysis/
 +  * http://www.lopakalogic.com/articles/hadoop-articles/log-files-flume-hive/
 +  * http://harish11g.blogspot.de/2012/05/retail-analysis-hive-flume-hadoop.html
 +  * http://www.implementhadoop.com/use-case-1-apache-log-analysis/
 +  * http://www.vmware.com/files/pdf/products/vsphere/VMware-vSphere-Data-Ingestion-Solution-Guide.pdf 
 +  * http://www.rittmanmead.com/2014/05/trickle-feeding-webserver-log-files-to-hdfs-using-apache-flume/
 +  * http://sanjivblogs.blogspot.de/2011/04/quick-flume-installation-and.html
 +
 +
 +Vorträge:
 +  * http://archive.apachecon.com/na2013/presentations/27-Wednesday/Big_Data/11:45-Mastering_Sqoop_for_Data_Transfer_for_Big_Data-Arvind_Prabhakar/Arvind%20Prabhakar%20-%20Planning%20and%20Deploying%20Apache%20Flume.pdf
 +
 +
 +XML Stream:
 +
 +  * http://www.ibm.com/developerworks/opensource/library/bd-flumews/index.html
nosql/flume_erste_schritte.txt · Zuletzt geändert: 2014/11/16 16:26 von gpipperr