Sonntag, 29. November 2015

Hadoop

Apache Hadoop

  • Projekt zur Entwicklung offener Software für sichere, skalierbare und verteilte Systeme
  • Software Bibliothek die einen Framework bereit stellt, der es ermöglicht großen Datenmengen die in Computer Cluster verteilt sind, unter zu Hilfenahme einfacher Programmiermodellen zu verwalten
  • Skalierbarkeit von einem Server bis hin zu mehreren tausend Servern, jeder mit eigenem Speicher und Berechnungen
  • dabei stellt die Library selbst sicher, dass Fehler auf dem Application Layer direkt behoben werden, um so einen hochverfügbaren Service mit geringer Anfälligkeit zu erzeugen
  • Apache Hadoop selbst besteht aus folgenden Modulen:
    • Hadoop Common: Allgemeine Werkzeuge, die die anderen Module unterstützen
    • Hadoop Distributed File System (HDFS): verteiltes Dateisystem, welches eine schnelle Zugriffszeit auf Daten bereit stellt
    • Hadoop YARN: Framework um die Cluster-Resourcen und Jobs zu organisieren. Dabei ist die Definition eines Jobs, die Verarbeitung eines vollstängen Datensatzes durch ein Programm. Im Gegensatz dazu ist ein Task ein einzelner Map- und Reducevorgang innerhalb des Jobs
    • Hadoop MapReduce: ein YARN basierter Framework um große Datensätze parallel bearbeiten zu können
  • dann gibt es auch noch weitere Hadoop-relevante Projekte:
    • Ambari: ein web-basiertes Tool zur Versorgung, Verwaltung und Überwachung von Hadoop Clustern. Enthält Support für HDFS, Hadoop MapReduce, Hive, HCatalog, HBase, ZooKeeper, Oozie, Pig und Sqoop. Ambari stellt ebenfalls ein Dashboard zur Darstellung der Cluster-Health in Form von Heatmaps und der Diagnose der Perfomance Charakteristik mit Hilfe von MapReduce, Pig und Hive
    • Avro: System um Daten zu ordnen
    • Cassandra: Eine skalierbare Multi-Master Datenbank ohne "Einzelpunkt-Fehler" (??) (Single-Point failure)
    • Chukwa: Daten-Sammler für große verteilte Systeme
    • HBase: skalierbare, verteile Datenbank, die strukturierten Datenspeicher für große Tabellen unterstützt
    • Hive: Daten Warehouse Infrastructure, die Datensammlungen und ad hoc Abfragen bereit stellt
    • Mahout: a scalable machine learning and data mining library
    • Pig: Platform zur Programmierung von MapReduce Programmen mit Hilfe der Programmiersprache Pig Latin
    • Spark: Schnelle und allgemeine Rechenmaschine für Hadoop-Daten. Unterstützt einfaches, eindrucksvolles Programmiermodell, welches eine große Anzahl von Anwendungen (inkl. ETL), maschinelles Lernen, Stream processing und grafische Berechnungen beinhaltet.
    • Tez: Allgemeiner Framework für Datenfluß-Programmierung, der auf YARN aufbaut. Er stellt eine starke und flexible Maschine zur Verfügung, die eine beliebige Zahl von DAGs (Database Availability Group) für passive und aktive Anwendungsfälle verarbeiten kann
    • ZooKeeper: ein hochperformanter Koordinations-Service für verteilte Anwendungen

Hadoop Single Node Installation


Single Node Hadoop Installation

Anleitung:
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html

Vorraussetzungen:
  • Java muss installiert sein -> musste ich noch machen sudo apt-get install openjdk-7-jre icedtea-7-plugin Nach Sichtung der Readme-Datei auf der Downloadseite für das aktuelle Release, habe ich erst einmal entschieden, dass ich keinen Key brauche, da ich ja schon einen Server mit ssh in Betrieb habe. Ich gehe derzeit davon aus, dass ich diese User ebenfalls für Hadoop verwenden kann. Nachdem ich soweit war und erste Versuche unternahm, bestätigte sich diese Annahme. Für die Installation des Single Nodes habe ich den Standarduser meines Servers genutzt. Die Einstellungen für den Server finden sich unter dem Post zur OpenStack Installation.
  • Ich habe mich dazu entschlossen, das Archiv "hadoop-2.7.1.tar.gz" herunter zu laden Da ich ja mit einem Ubuntuserver in einer VirtualBox arbeite, musste ich nun das Archiv irgendwie auf den Server bringen, um es dort entpacken zu können. Daher kopierte ich das Archiv in den gemeinsamen Ordner, der auf dem Server dann unter /media/sf_Gemeinsamer_Ordner zu finden war. Ich habe das Archiv dann nach home/davinia/hadoop kopiert. (Anlage des Verzeichnis "hadoop" mit mkdir, kopieren mit cp aus dem media-Verzeichnis heraus nach ~/hadoop) Entpacken des Archivs mit dem Befehl tar -xzf hadoop-2.7.1.tar.gz im Verzeichnis (die Optionen -xzf bedeuten: x = Dateien aus Archiv extrahieren, z = Archiv zusätzlich mit gzip(de) komprimieren, f = Dateien in den angegebenen Ordner extrahieren. Wenn kein Zielordner angegeben ist, wird das aktuelle Verzeichnis verwendet)
  • Nach dem Entpacken in das hadoop-Verzeichnis wechseln. Dort wechseln wir wiederum in das Verzeichnis etc/hadoop wechseln um die Datei hadoop-env.sh bearbeiten. In meinem Fall nutze ich den Editor "nano" zur Bearbeitung der Files. nano hadoop-env.sh Es ist dabei zu beachten, dass die Angaben für Java geändert werden müssen.
  • Danach soll das Kommando $bin/hadoop probiert werden. Diese Angaben beziehen sich alle auf die entpackte Ordnerstruktur von Hadoop. In meinem Fall ~/hadoop/hadoop-2.7.1
  • Nachdem die Einstellungen Java betreffend vorgenommen wurden, gehe ich zum nächsten Schritt über: einen Hadoop Cluster im Standalone Mode starten. Die Anleitung lässt uns erst einen neuen Ordner "input" anlegen. Auch hier ist in meinem Fall zu beachten, dass ich mich im Verzeichnis ~/hadoop/hadoop-2.7.1 befinde, da sonst das Skript nicht aufgerufen werden kann (habe ich gestestet, indem ich den Ordner an einem anderen Ort angelegt habe ;-)
  • Kopieren aller xml-Files hat funktioniert ($ cp etc/hadoop/* .xml input).
  • Allerdings gibt es bei dem Aufruf des Scriptes ($ bin/hadoop jar share/hadoop/mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+') eine Fehlermeldung bezüglich der Java-Version.Nach langem Suchen und diversen Fehlermeldungen (z.B. dass er das Verzeichnis /usr/bin/java//bin/java nicht findet; wird auch schwierig, wegen der beiden Slashs hintereinander...) habe ich die Lösung für den Java Pfad in einem Forum gefunden: http://stackoverflow.com/questions/20303815/hadoop-single-node-cluster-installation-on-ubuntu Ich habe nach dieser Anleitung einen Softlink ($ ln -s java-7-openjdk-amd64/ jdk) erstellt. Naürlich habe ich mich vorher davon überzeugt, dass an der Stelle die entsprechende Datei bzw. Ordner vorhanden ist. Diesen habe ich dann in die Datei hadoop-env.sh eingetragen. Entgegen der Bescheibung aus dem Forum habe ich den Eintrag in der bashrc nicht geändert, da ich diese auch gar nicht gefunden habe. Nach diesen Schritten lies sich der Befehl aus der Hadoop Anleitung ohne Fehlermeldung ausführen
  • $ bin/hadoop jar share/hadoop/mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+' mit bin/hadoop wird das Skript aus der Datei hadoop im Verzeichnis bin unter ~/hadoop/hadoop-2.7.1 aufgerufen. Innerhalb dieses Scripts wird mit dem Befehl jar wiederum die Klasse org.apache.hadoop.util.RunJar aufgerufen, die einen Hadoop job jar ausführt. Dabei wird ein .jar Archiv ausgeführt und nach input kopiert. In diesem Archiv werden dann mit grep nach dem definierten String gesucht und alle Übereinstimmungen in dem Ordner output abgelegt. Nach erfolgreichem Durchlauf des Befehls erzeugte der Befehl die Datei part-r-00000
Die "Installation" von Hadoop scheint lediglich in dem Entpacken des herunter geladenen Archivs zu bestehen.
Und mal wieder muss ich zum Ende feststellen, dass ich die Aufgabe zwar erfolgreich bewältigt habe, aber keine Ahnung habe, was ich damit anfangen soll.

Sonntag, 8. November 2015

Welche Cloud, wann?

Quelle: Canonical_Checklist_04_1012.pdf

Public Cloud:

Budget
  • kein CAPEX Budget verfügbar
  • minimales OPEX Budget verwendbar
  • das Projekt soll kostengünstig gestaltet werden
Resourcen
  • kleines technisches Team
  • Team hat keinerlei Erfahrung mit Virtualisierung oder Clouding
  • Einstellung von Entwicklern oder Systemadmins mit Fachkenntnissen stellt ein Problem dar
Projektdauer
  • Das Projekt soll schnell an den Start kommen
Anforderungen
  • Anforderungen an Anwendungen oder Services im Vorfeld nicht kalkulierbar
  • Anforderung an Cloud Betreuer würde extreme Spitzen und Täler beinhalten
  • Aktuelle IT Infrastruktur würde mit dem Workload Handling Probleme haben
Compliance 
  • Anwendungen und Daten sollen an externer Stelle gespeichert werden
  • Verfügbarkeit der Anwendungen und Daten für Kunden über das öffentliche Internet ist völlig ausreichend
Beachten, dass die Erzeugung einer unbekannten Menge an virtuellen Maschinen auf Grundlage lizenzbasierter System eine massive Kostenspirale verursachen kann -> Alternativ können kostenfreie Lizenzen eingesetzt werden (z.B. Ubuntu)

Private Cloud:


Budget
  • CAPEX ist verfügbar, d.h. neue Hardware zum Aufbau einer Cloud Infrastruktur kann beschafft werden
  • Ebenfalls ist OPEX Kapital verfügbar um die benötigte Infrastruktur aufzubauen
  • Das Projekt hat ein Budget zur Verfügung, welches die Betreuung und Verwaltung der entstandenen Infrastruktur erlaubt
Resourcen
  • Technisches Team intern ist gut aufgestellt
  • Das Team hat Erfahrung in Virtualizierung und Clouding
  • Es ist Budget vorhanden, um weitere Entwickler und Systemadministratoren mit Cloud-Erfahrung zu aquirieren
Projektdauer
  • Es gibt die Möglichkeit vor der Entwicklung des eigentlichen Projektes die Cloud Infrastruktur zu planen und vorzuhalten
  • Eine Cloud-Infrastruktur ist schon vorhanden
Anforderungen
  • Die aktuelle Struktur ist in der Lage auch hohe Anforderungen durch User (Kunden) abzufangen
Compliance 
  • Es sind Daten vorhanden, die unbedingt privat bleiben müssen
  • Die Compliance sieht vor, dass eigene Daten unbedingt auf eigenen Systemen beheimated sein müssen
  • Und zusätzlich sollten die Daten ebenfalls im eigenen Land bleiben
  • Diese Vorgaben sind auch in den SLAs/ IT Governance verankert 

Hybrid Cloud:


Budget
  • CAPEX ist verfügbar, d.h. neue Hardware zum Aufbau/ Erweiterung einer Cloud Infrastruktur kann beschafft werden
  • Ebenfalls ist OPEX Kapital verfügbar um die benötigte Infrastruktur aufzubauen/ zu erweitern
  • Das Projekt hat ein Budget zur Verfügung, welches die Betreuung und Verwaltung der Infrastruktur erlaubt
  • Zusätzlich ist auch Budget vorhanden, um Public Cloud Resourcen bei Bedarf zu aktivieren 
Resourcen
  • Eine Cloud Infrastruktur ist schon vorhanden und kann genutzt werden
  • Technisches Team intern ist gut aufgestellt
  • Das Team hat Erfahrung in Virtualizierung und Clouding
  • Es ist Budget vorhanden, um weitere Entwickler und Systemadministratoren mit Cloud-Erfahrung zu aquirieren
Projektdauer
  • Es gibt die Möglichkeit vor der Entwicklung des eigentlichen Projektes die Cloud Infrastruktur zu planen und vorzuhalten
Aber: Es wird flexibler Zugang zu Resourcen und Fähigkeiten benötigt, den das Team nicht decken kann und die Abdeckung ziemlich kostenintensiv wäre
 
Anforderungen 
  • Die interne Cloud Infrastruktur wird wahrscheinlich nicht in der Lage sein, extreme Anforderungs-Spitzen durch User- oder App-Anfragen zu bewältigen
  • Außerdem wird die Infrastruktur ebenfalls die angestiegenen Anforderungen der Daten-Verarbeitung bzw. -Analytik nicht bewältigen können
Compliance 
  • Es sind Daten vorhanden, die unbedingt privat bleiben müssen
  • Die Compliance sieht vor, dass eigene Daten unbedingt auf eigenen Systemen beheimated sein müssen
  • Und zusätzlich sollten die Daten ebenfalls im eigenen Land bleiben
  • Diese Vorgaben sind auch in den SLAs/ IT Governance verankert
Aber: Es soll eine Infrastruktur bereit gestellt werden, in der die Anwendungen und Buisness-Logik in der Public Cloud bereit gestellt werden, die Daten aber weiterhin im eigenen Bereich verbleiben.

Außerdem sollen die Möglichkeiten erhalten bleiben, das Projekt in Zukunft sowohl vollständig in die Private Cloud, oder auch in die Public Cloud um zu ziehen.