Benutzer-Werkzeuge

Webseiten-Werkzeuge


nosql:hadoop_first_setup

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
nosql:hadoop_first_setup [2014/08/22 16:59] – [Eine Hadoop 2.4 Test Umgebung installieren und konfigurieren] gpipperrnosql:hadoop_first_setup [2014/08/22 17:00] – [Quellen] gpipperr
Zeile 1: Zeile 1:
 +===== Eine Hadoop 2.4 Test Umgebung installieren und konfigurieren =====
 +Ziel: Hadoop Cluster für den Einstieg in das Thema Hadoop als 3 Knoten Cluster aufsetzen.
 +
 +
 +Ablauf:
 +  - Standard Linux Installation
 +  - Java 8 installieren
 +  - Hadoop auf Node 1 aufsetzen
 +  - Node 2 und 3  in das Cluster aufnehmen
 +
 +<note tip>Erweiterung auf 3 Knoten in  Arbeit</note>
 +
 +=== Grundarchitektur ===
 +
 +Hadoop 2.0:
 +
 +{{ :hadoop:hadoop_architecture_v01.png?300 | Übersicht über die Schichten von Hadoop}}
 +
 +
 +
 +
 +Hadoop HDFS:
 +
 +{{ :hadoop:hadoop_architecture_hdfs_v02.png?500 | HDFS Übersicht}}
 +
 +
 +Hadoop Services:
 +
 +
 +  * **ResourceManager**: Ein Scheduler der die verfügbaren Resourcen im cluster zwischen den Applications verteilt
 +  * **NodeManager**: läuft auf jeden Knoten im Cluster und nimmt Anfragen vom ResourceManager an. Verwaltet die Resourcen auf diesen einzelnen Knoten
 +  * **ApplicationMaster**: Eine Instance einer Instance von einer framework-specific library, führt YARN job aus und ist verantwortlich das Anfragen von Resources vom ResourceManager und arbeitet mit dem NodeManager zusammen, monitored Containers.
 +==== Standard Linux Installation mit Java 8====
 +
 +Je eine VM mit Oracle Linux 6.5 64 Bit in einer Standard Installation als Server ohne X Umgebung.
 +
 +Ablauf:
 +  * Betriebssystem auf den Servern bereitstellen
 +  * Java auf den Servern aufsetzen
 +  * FW Konfiguration planen, falls FW zwischen den Hadoop Cluster und der eigentlichen Anwendung
 + 
 +=== Download Software ===
 +
 +Die benötigte Software:
 +  * [[http://hadoop.apache.org/releases.html#Download| Hadoop 2.4.X - current stable 2.x version]]
 +  * Oracle Linux 6.5 - Download über [[https://edelivery.hadoop.com/EPD/Download/get_form?egroup_aru_number=16064752| edelivery ]]
 +  * Java Kit 8 - Download über [[http://www.hadoop.com/technetwork/java/javase/downloads/index.html|hadoop Java SE Downloads ]]
 +
 +=== Installation Linux Umgebung ===
 +
 +  * Installation Oracle Linux 6.5 Basis ( Desktop Umgebung nur bei Bedarf) 
 +  * Yum Repository prüfen, Konfiguration bei Bedarf anlegen <code bash>
 +cd /etc/yum.repos.d
 +wget http://public-yum.hadoop.com/public-yum-ol6.repo
 +</code> 
 +  * Update mit "yum update"
 +  * SELinux deaktiviert :<code bash>
 +[root@nosqldb01 ~]# 
 +vi /etc/selinux/config
 +..
 +SELINUX=disabled
 +..
 +
 +[root@nosqldb01 ~]#  reboot
 +
 +[root@nosqldb01  ~]#  getenforce
 +
 +</code>
 +  * Firewall Einstellungen prüfen und je nach Umgebung einstellen!
 +  * Auf die richtige Uhrzeit achten und per ntpd die Zeit auf allen Servern im Store immer richtig einstellen lassen!
 +  * IP V6 ausschalten<code bash>
 +vi /etc/sysctl.conf
 +# disable ipv6
 +net.ipv6.conf.all.disable_ipv6 = 1
 +net.ipv6.conf.default.disable_ipv6 = 1
 +net.ipv6.conf.lo.disable_ipv6 = 1
 +
 +#Testen mit:
 +
 +cat /proc/sys/net/ipv6/conf/all/disable_ipv6
 +
 +1
 +
 +# 1=Ausgeschaltet!
 +</code>
 +
 +
 +===Linux hadoop User anlegen===
 +
 +<code bash>
 +groupadd -g 2000 hinstall
 +useradd -u 2100 -g hinstall hadoop
 +passwd hadoop
 +</code>
 +
 +
 +Password setzen:
 +<code bash>
 + passwd hadoop
 +</code>
 +
 +
 +===Software Verzeichnis anlegen ===
 +
 +<code bash>
 +mkdir -p /opt/hadoop
 +chown -R hadoop:hinstall /opt/hadoop
 +chmod -R 775 /opt/hadoop
 +</code>
 +
 +===Java Version prüfen - JDK 8u5 nach Bedarf installieren===
 +
 +** Als User root! **
 +\\
 +
 +Kopieren von [[http://download.oracle.com/otn-pub/java/jdk/8u5-b13/jdk-8u5-linux-x64.rpm]] installieren und aktivieren.
 +
 +<code bash>
 +# Java installieren
 +yum install  --nogpgcheck jdk-8u5-linux-x64.rpm
 +
 +
 +# Java aktivieren
 +
 +# Neue Java Version dem OS bekannt geben
 +/usr/sbin/alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_05/bin/java 1805
 +
 +# Versionen anzeigen
 +/usr/sbin/alternatives --display java
 +
 +# Version einstellen
 +/usr/sbin/alternatives --config java
 +# Version auswählen
 +
 +# testen
 +java -version
 +java version "1.8.0.5"
 +
 +# alte Java Version deinstallieren
 + yum list java*
 +
 +yum erase java-1.6.0-openjdk.x86_64 java-1.7.0-openjdk.x86_64 
 +
 +</code>
 +
 +Nach einem Java Upgrade muss das Kommando jps wieder neu verlinkt werden:
 +
 +Das Programm jps sollte auf dem Server im Pfad liegen/funktionieren, ist sehr hilfreich für die Wartung
 +
 +<code bash>
 +jps-m
 + 
 +# falls fehler
 +# über /usr/bin verlinken
 +rm /usr/bin/jps
 +ln -s /usr/java/jdk1.8.0_05/bin/jps /usr/bin/jps
 +
 +</code>
 +
 +=== FW Konfiguration planen, falls FW zwischen den Knoten und der eigentlichen Anwendung ===
 +
 +Soll eine FW den Zugriff zwischen den Store und der Applikation kontrollieren, sind die folgenden Regeln zu beachten:
 +
 +**in Arbeit**
 +
 +
 +Ports:
 +
 +  * 9000
 +  * 50070
 +  * 50075
 +  * ??
 +
 +
 +siehe auch :http://blog.cloudera.com/blog/2009/08/hadoop-default-ports-quick-reference/
 +
 +
 +Der Client/Applikation Server, der mit dem Cluster arbeiten soll, muss auf JEDEN Knoten des Cluster über den passenden Port zugreifen können!
 +
 +
 +==== Hadoop Software auf den Server kopieren und entpacken/installieren ====
 +
 +**User hadoop!**
 +
 +
 +
 +\\
 +Entpacken der Software in das Verzeichnis /opt/hadoop/product/2.4.1, damit ist die eigentliche Installation der Software auch schon abgeschlossen.
 +
 +<code bash>
 +mkdir -p /opt/hadoop/product/2.4.1
 +
 +# check hash see hadoop-2.4.1.tar.gz.mds for hashes 
 +md5sum hadoop-2.4.1.tar.gz
 +0ce4cfd282002b7aa42cf71df4145150  hadoop-2.4.1.tar.gz
 +
 +#entpacken
 +tar -xf hadoop-2.4.1.tar.gz  -C /opt/hadoop/product
 +
 +
 +#Verlinken um bei späteren Updates nicht die Pfade zu ändern
 +
 +ln -s /opt/hadoop/product/hadoop-2.4.1 /opt/hadoop/product/hadoop
 +
 +</code>
 +
 +Umgebungsvariable HADOOP_HOME in der Bash setzen und je nach Vorlieben permanent einrichten:
 +<code bash>
 +vi .bashrc
 +..
 +#Hadoop Home
 +export HADOOP_HOME=/opt/hadoop/product/hadoop
 +
 +# Avoid Java Lib errros
 +export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
 +export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
 +
 +# Hadoop Environment Variables
 +export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
 +export HADOOP_MAPRED_HOME=$HADOOP_HOME
 +export HADOOP_COMMON_HOME=$HADOOP_HOME
 +
 +#HDFS
 +export HADOOP_HDFS_HOME=$HADOOP_HOME
 +
 +#YARN
 +export YARN_HOME=$HADOOP_HOME
 +
 +#JAVA
 +export JAVA_HOME=/usr/java/default
 +
 +#Defaults
 +export PATH=$HADOOP_HOME/bin:$PATH
 +
 +
 +..
 +
 +. .bashrc
 +</code>
 +
 +Testen der Installation mit:
 +<code bash>
 +
 +# zeigt die installierte Software Version
 +
 +hadoop version
 +
 +Hadoop 2.4.1
 +...
 +
 +</code>
 +
 +=== Anlegen der Cluster Location ===
 +
 +**User hadoop!**
 +\\
 +
 +Anlegen des Hadoop Data Verzeichnisses, hier werden später dann die Daten abgelegt.
 +
 +<code bash>
 +
 +# HDFS Base directory
 +mkdir /opt/hadoop/hdata
 +
 +#Name node directoy
 +mkdir /opt/hadoop/hdata/namenode
 +
 +# Data node directory
 +mkdir /opt/hadoop/hdata/datanode
 +
 +</code>
 +
 +
 +
 +==== Klonen der Umgebung um die weiteren Storage Node zu konfigurieren ====
 +
 +Die bestehende Umgebung stoppen und als Klon Template verwenden um die Hosts 2 und 3 (dient später dazu einen neuen Knoten hinzufügen zu können) anzulegen.
 +
 +Tipp:
 +Daran denken dass nach einem Klone einer Linux 6 Maschine die Netzwerkkarten Konfiguration stark verbogen wird, siehe [[http://www.cyberciti.biz/tips/vmware-linux-lost-eth0-after-cloning-image.html|UDEV nach Klone reparieren]] !
 +
 +Die Namensauflösung zwischen den Knoten prüfen und bei Bedarf die Namen in der hosts Datei eintragen. Darauf achten, dass auch der eigene Name des Servers richtig aufgelöst wird.
 +
 +
 +
 +=== SSH Konfiguration root und Hadoop User ===
 +Als User Hadoop!
 +
 +Für die Vereinfachung der Wartung zwischen den Knoten SSH Key einrichten, siehe [[windows:putty_pscp_ssh_key_connect#ssh_key_s_bzw_ssh_key_struktur_auf_dem_linux_system_erzeugen|SSH Keys verteilen]]
 +
 +<code bash>
 +#generate key on every node
 +ssh-keygen -t dsa
 +ssh nosqldb01 ssh-keygen -t dsa
 +ssh nosqldb03 ssh-keygen -t dsa
 + 
 +# Copy public key from one node to the other
 + 
 +#2/3 to 1
 +ssh nosqldb01 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
 +ssh nosqldb03 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
 +#1/3 to 2
 +ssh nosqldb01
 + ssh nosqldb02 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
 + ssh nosqldb03 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
 +#1/2 to 3
 +ssh nosqldb03
 + ssh nosqldb02 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
 + ssh nosqldb01 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
 +
 +# auf die localen Knoten auch per localhost ohne Password anmelden
 +ssh localhost
 +ssh 0.0.0.0
 +
 +</code>
 +
 +Darauf achten, das auch auf den lokalen Knoten ein Connect über den Servernamen / Localhost und 0.0.0.0 möglich ist.
 +
 +
 +==== Hadoop Cluster Single Server Konfiguration einrichten ====
 +
 +Ziel ist es zwar ein Cluster mit zum Schluss 3 Servern ein zurichten, im ersten Schritt wird aber zuerst nur der Knoten 1 konfiguriert.
 +
 +Die Konfiguration wird unter **$HADOOP_HOME/etc/hadoop** einrichtet.
 +
 +
 +Die folgende Konfigurationsdateien werden anpassen/erstellen:
 + 
 +  * core-site.xml
 +  * hdfs-site.xml
 +  * [[http://hadoop.apache.org/docs/r2.4.0/hadoop-yarn/hadoop-yarn-common/yarn-default.xml|yarn-site.xml]]
 +  * mapred-site.xml
 +
 +core-site.xml:
 +<code mxl>
 +<configuration>
 +  <property>
 +     <name>fs.defaultFS</name>
 +     <value>hdfs://localhost:9000</value>
 +  </property>
 +</configuration>
 +</code>
 +
 +
 +hdfs-site.xml:
 +<code xml>
 +<configuration>
 + <property>
 +    <name>dfs.replication</name>
 +    <value>1</value>
 + </property>
 + <property>
 +  <name>dfs.name.dir</name>
 +   <value>file:/opt/hadoop/hdata/namenode</value>
 + </property>
 + <property>
 +   <name>dfs.datanode.data.dir</name>
 + <value>file:/opt/hadoop/hdata/datanode</value>
 + </property>
 +</configuration>
 +</code>
 +
 +yarn-site.xml:
 +<code xml>
 +<configuration>
 + <property>
 +  <name>yarn.nodemanager.aux-services</name>
 +  <value>mapreduce_shuffle</value>
 + </property>
 + <property>
 +   <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
 +   <value>org.apache.hadoop.mapred.ShuffleHandler</value>
 + </property>
 +
 +</configuration>
 +</code>
 +
 +Für ein kleines System mit diesen Einstellungen experimentieren:
 +<code bash>
 +<!-- memory settings for small systems - sometimes to small! -->
 +<property>
 +  <name>yarn.nodemanager.resource.memory-mb</name>
 +  <value>2048</value>
 +  <description>Amount of physical memory, in MB, that can be allocated for containers.</description>
 +</property>
 + 
 +<property>
 +  <name>yarn.scheduler.minimum-allocation-mb</name>
 +  <value>512</value>
 +</property>
 +
 +</code>
 +
 +Konfiguration für MapReduce\\
 +mapred-site.xml:
 +<code>
 +<configuration>
 +  <property>
 +    <name>mapreduce.framework.name</name>
 +    <value>yarn</value>
 +  </property>
 +</configuration>
 +</code>
 +
 +
 +http://hadoop.apache.org/docs/r2.4.0/hadoop-project-dist/hadoop-common/SingleNodeSetup.html
 +
 +
 +=== HDFS File System formatieren ===
 +
 +<code bash>
 +
 +# Basis Verzeichnisse prüfen
 +
 +ls -la  /opt/hadoop/hdata
 +
 +# formatieren
 +
 +$HADOOP_HOME/bin/hdfs namenode -format
 +
 +...
 +14/07/10 22:16:36 INFO common.Storage: Storage directory /opt/hadoop/hdata/namenode has been successfully formatted.
 +....
 +
 +</code>
 +
 +
 +==== Hadoop starten ====
 +
 +
 +Im ersten Schritt Name Node, Data Nodes für HDFS starten:
 +<code bash>
 +
 +Bzw. alles auf einmal über
 +
 +$HADOOP_HOME/sbin/start-dfs.sh
 +
 +# prüfen ob alle Prozesse laufen:
 +
 +jps -l
 +..
 +4208 org.apache.hadoop.hdfs.server.datanode.DataNode
 +4087 org.apache.hadoop.hdfs.server.namenode.NameNode
 +4363 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
 +
 +</code>
 +
 +YARN Ressource Manager,Nodemanager starten:
 +
 +<code bash>
 +
 +$HADOOP_HOME/sbin/start-yarn.sh
 +
 +
 +# Jetzt läuft:
 +jps -l
 +
 +4208 org.apache.hadoop.hdfs.server.datanode.DataNode
 +4087 org.apache.hadoop.hdfs.server.namenode.NameNode
 +4363 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
 +
 +4571 org.apache.hadoop.yarn.server.resourcemanager.ResourceManager
 +4669 org.apache.hadoop.yarn.server.nodemanager.NodeManager
 +
 +</code>
 +
 +History Server starten:
 +
 +<code bash>
 +
 +$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver
 +starting historyserver, logging to /opt/hadoop/product/hadoop/logs/mapred-hadoop-historyserver-nosqldb01.out
 +
 +#Jetzt läuft zusätzlich:
 +jps -l
 +..
 +4705 org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer
 +..
 +
 +</code>
 +
 +
 +
 +=== Im Browser prüfen ob alles läuft ===
 +
 +  * NameNode URL aufrufen:            <nowiki>http://localhost:50070/dfshealth.jsp</nowiki>
 +  * JobHistory status aufrufen:       <nowiki>http://localhost:19888/jobhistory</nowiki>
 +  * Yarn ResourceManager aufrufen:    <nowiki>http://localhost:8088/cluster/cluster</nowiki>
 +
 +
 +Falls kein X zur Hand. lynx verwenden:
 +<code bash>
 + lynx http://localhost:50070/dfshealth.jsp
 +</code>
 +
 +=== HDFS - Erste Schritte ===
 +
 +User Files System anlegen
 +
 +<code bash>
 +hdfs dfs -mkdir /user
 +hdfs dfs -mkdir /user/gpipperr
 +</code>
 +
 +
 +Eine Datei auf in das Hadoop Filesystem kopieren:
 +
 +<code bash>
 +
 +cd $HADOOP_HOME
 +
 +hdfs dfs -copyFromLocal README.txt /user/gpipperr
 +
 +hdfs dfs -ls /user/gpipperr
 +
 +Found 1 items
 +-rw-r--r--   1 hadoop supergroup       1366 2014-07-13 12:39 /user/gpipperr/README.txt
 +
 +</code>
 +
 +
 +=== Java Fehler beheben ===
 +
 +<code bash>
 +hdfs dfs -ls /user
 +
 +Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /opt/hadoop/product/hadoop-2.4.1/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.
 +It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
 +
 +14/07/10 22:27:20 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
 +
 +</code>
 +
 +**1. Lösung**
 +<code bash>
 +export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
 +export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
 +
 +hdfs dfs -ls /user
 +
 +14/07/10 22:33:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
 +-rw-r--r--   1 hadoop supergroup       1366 2014-07-10 22:25 /user
 +
 +</code>
 +
 +
 +see:  
 +  * http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-common/NativeLibraries.html
 +
 +
 +Leider ist in der Apache Download Version die 32bit Libary nur enthalten, 64bit muss selber aus dem Code erzeugt werden.
 +
 +==== Hadoop Cluster stoppen ====
 +
 +<code bash>
 +
 +cd $HADOOP_HOME/sbin
 +
 +
 +jps -m
 +
 +4208 DataNode
 +5027 JobHistoryServer
 +4087 NameNode
 +5323 Jps -m
 +4571 ResourceManager
 +4363 SecondaryNameNode
 +4669 NodeManager
 +
 +
 +$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh stop historyserver
 +
 +./stop-yarn.sh
 +./stop-dfs.sh
 +
 +jps -m
 +
 +</code>
 +
 +
 +
 +
 +
 +==== Benutzerberechtigungen in Hadoop====
 +
 +siehe:
 +
 +  * http://blog.cloudera.com/blog/2012/03/authorization-and-authentication-in-hadoop/
 +
 +
 +==== Map Reduce im Hadoop Cluster testen ====
 +
 +Nach der erfolgreichen Installation einen ersten Test mit einer Beispiel Klasse durchführen:
 +<code bash>
 +
 +cd $HADOOP_HOME/share/hadoop/mapreduce
 +
 +#see all examples
 +yarn jar hadoop-mapreduce-examples-2.4.1.jar
 +
 +
 +
 +#Starten:
 +# pi: A map/reduce program that estimates Pi using a quasi-Monte Carlo method.
 +
 +yarn jar hadoop-mapreduce-examples-2.4.1.jar pi 1 1 
 +
 +# mit daten in dfs 
 +# randomwriter: A map/reduce program that writes 10GB of random data per node.
 +
 +yarn jar hadoop-mapreduce-examples-2.4.1.jar randomwriter random-data
 +
 +
 +..
 +Job started: Sun Aug 10 14:28:05 CEST 2014
 +..
 +..
 +
 +14/08/10 14:28:08 INFO mapreduce.Job: Running job: job_1407602714166_0003
 +
 +
 +# Auflisten lassen:
 +
 +yarn application -list
 +...
 +
 + Application-Id      Application-Name        Application-Type          User           Queue                   State             Final-State             Progress                        Tracking-URL
 +
 +application_1407602714166_0002     Sqoop: GPI AUDIT2               MAPREDUCE        hadoop         default                ACCEPTED               UNDEFINED                   0%                                 N/A
 +
 +
 +</code>
 +
 +Hier sollte nun der Job auch erfolgreich durchlaufen UND nicht im Status "ACCEPTED" hängen bleiben.
 +
 +siehe auch als Beispiel: http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1-latest/bk_using-apache-hadoop/content/running_mapreduce_examples_on_yarn.html
 +
 +
 +==== Hadoop auf dem System aus den Quellen aufbauen ====
 +
 +Da auf dem System Fehler mit dem "nativen" Libraries auftreten, Hadoop aus dem Sourcen aufbauen:
 +
 +
 +siehe http://manchev.org/2014/07/compiling-and-installing-hadoop-2-4-on-64-bit-oracle-linux-6/
 +
 +
 +
 +
 +===== Quellen =====
 +
 +Apache:
 +  * https://wiki.apache.org/hadoop/FrontPage
 +  * http://hadoop.apache.org/docs/r2.4.0/hadoop-project-dist/hadoop-common/ClusterSetup.html
 +
 +Netz:
 +
 +  * http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/
 +  * http://www.edureka.in/blog/apache-hadoop-2-0-and-yarn/
 +  * http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.3/bk_installing_manually_book/content/rpm-chap1.html
 +  * http://www.oracle.com/technetwork/systems/hands-on-labs/hol-setup-hadoop-solaris-2041770.html
 +  * https://developer.yahoo.com/hadoop/tutorial/index.html
 +  * http://radar.oreilly.com/2014/01/an-introduction-to-hadoop-2-0-understanding-the-new-data-operating-system.html
 +
  
nosql/hadoop_first_setup.txt · Zuletzt geändert: 2014/08/23 17:28 von gpipperr