nosql:apache_hadoop_einfuehrung
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
nosql:apache_hadoop_einfuehrung [2015/01/27 02:15] – [Quellen] gpipperr | nosql:apache_hadoop_einfuehrung [2015/04/02 22:20] (aktuell) – [MapReduce] gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | =====Apache Hadoop===== | ||
+ | Hadoop ist ein Softwareprodukt für die verteilte Speicherung von Daten und ein Framework für die Verarbeitung von großer Datenmengen über das MapReduce Konzept. | ||
+ | |||
+ | Ziele von Hadopp: | ||
+ | - Skalierbare Speicherkapazität => Hadoop Distributed FileSystem - **HDFS** | ||
+ | - Skalierbare Rechenkapazität | ||
+ | |||
+ | Zentrale Architektur Konzepte: | ||
+ | * " | ||
+ | * "Data locality" | ||
+ | * "fault tolerance" | ||
+ | |||
+ | Vorteile: | ||
+ | * Lineare Skalierung | ||
+ | * High Level Programmierung von MapReduce Jobs | ||
+ | * Batch Betrieb auf sehr großen Datenmengen | ||
+ | |||
+ | Nachteil: | ||
+ | * Redundanz Konzept und "Data locality" | ||
+ | |||
+ | ==== Warum ? Intention und Ziel ==== | ||
+ | |||
+ | Schon seit längeren setzt sich der Trend ununterbrochen fort, dass sich das zu verarbeitende Datenvolumen von Jahr zu Jahr massiv vergrößert. Das aktuelle Problem, wirklich sehr großen Datenmengen verarbeiten zu müssen, lässt sich aber einer gewissen Menge an Daten nicht mehr wirklich skalierbar mit den bestehenden Lösungen umsetzen. | ||
+ | |||
+ | Daten, die im ersten Schritt für das Tags Geschäft bisher nicht so wichtige waren, müssen vermehrt ebenfalls gespeichert und verarbeitet werden. Meist sind diese, nur am Rand gesammelten Daten, aber nicht wirklich strukturiert und im ersten Schritt auch für die maschinelle Verarbeitung nicht wirklich geeignet, wie die reine Oracle Log Files, z.B. die klassische Alert.log Datei. Auch neigt diese Art von Daten stark dazu, sich von Release zu Release immer wieder zu verändern. | ||
+ | |||
+ | Auf der anderen Seite wachsen die DWH Lösungen und benötigen immer größere und kostenintensivere Umgebungen um zum Teil nur Daten vorzuhalten, | ||
+ | Die aber noch längerfristig für das Business durchaus noch wichtig sind. Zum Beispiel um bei Compliance Überprüfungen und ähnlichen die Einhaltung von gesetzlichen Vorgaben beweisen zu können. | ||
+ | |||
+ | Zusätzlich erschweren die kommerziellen Anbieter von Datenbank Lösungen den weiteren Aufbau ihrer eigenen Umgebungen bzw. den Einstieg in ihre eigene Produkte Landschaft mit oft astronomischen Kosten und horrenden Supportgebühren. Mit diesem Rucksack an kommerziellen und qualitativen Problemen wird oft es sehr schwer im klassischen Mittelstand noch neue Projekte mit guten Gewissen und überschaubaren Risiken aufzubauen. | ||
+ | |||
+ | Hier kann es dann nicht verwundern, dass neue und von dem Grundkonzept innovative offene Produktplattformen eine breite Basis finden. Zwar halten auch diese neuen Produkte nicht alle ihre Versprechen ein und auf den zweiten Blick fehlt oft noch so manches gewohnte Feature. Auch wird hier beim Betrieb von diesen Lösungen noch viel Geduld mit der Software Qualität abverlangt, aber es ist zu erwarten das sich hier in nächster Zeit noch viel innovativ verändert. | ||
+ | |||
+ | Eine zentrale Plattform für das Archivieren und Auswerten von diversen, schwach strukturierten Daten kann dabei unterstützen, | ||
+ | |||
+ | Apache Hadoop ermöglicht mit seinem zentralen Cluster Files System nach dem „Shared Nothing“ Prinzip und einem ausgeklügelten Batch Processing Framewok den Aufbau sehr großer Umgebungen für die Verarbeitung von Massendaten mit Hilfe von vielen, im Prinzip preisgünstigen Servern. | ||
+ | |||
+ | Zahlreiche weitere Entwicklungen rund um Kern von Hadoop bieten inzwischen in den Grundzügen alles an, was für den Betrieb auch sehr großer Umgebungen notwendig ist. Und das meist mit, auf den ersten Blick, kostenarmen OpenSource Lösungen. | ||
+ | |||
+ | Es ist damit um das Produkt Hadoop eine starke Community entstanden und viele Hersteller unterstützen das Hadoop Ökosystem mit immer mehr Werkzeugen und Schnittstellen. | ||
+ | |||
+ | Durch den Open Source Ansatz wird der Einstieg in Hadoop stark erleichtert, | ||
+ | |||
+ | Durch die kommerziellen Distributionen, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ====Grundarchitektur Hadoop 2.0==== | ||
+ | |||
+ | ===Hadoop Distributed File System - HDFS:=== | ||
+ | |||
+ | |||
+ | Speichert die Dateien durch das Aufteilen in Blöcken und verhindert Datenverlust durch die Replikation der Blöcke über mehrere Knoten(Default 3). | ||
+ | |||
+ | * In Java mit nativen Libraries implementiert | ||
+ | * Liegt über einem nativen Dateisystem wie ext3, | ||
+ | * Sehr gut geeignet für große Dateien | ||
+ | * Dateien sind nicht veränderbar, | ||
+ | * Dateien werden in Blöcke aufgesplittet ( default 128MB) und redundant über das Cluster verteilt (default 3 fach) | ||
+ | * Die Blöcke einer Datei werden auf verschiedenen Knoten abgelegt | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Die Metadaten der Namespaces des HDFS (wenn man so will die Superblock und INode Daten des Filesystems) werden in einer Datei " | ||
+ | |||
+ | Diese Daten werden dann entweder bei einem Neustart des NameNodes zu einer neuen " | ||
+ | |||
+ | **NameNode: | ||
+ | * Verwaltung der Metadaten(Namespaces)- unteranderen welche Blöcke gehören zur welcher Datei und auf welchen Knoten liegt ein Block | ||
+ | * Ohne NamenNode kein Zugriff auf das HDFS möglich | ||
+ | * Kann mit einem Schattensystem gespiegelt werden | ||
+ | * Hält alle Informationen im Speicher und persistiert diese Information in zwei Dateien | ||
+ | * fsimage => Stand NameSpace letzter Checkpoint | ||
+ | * edits => Journal aller Änderungen seit letzten Checkpoint | ||
+ | * fsimage | ||
+ | |||
+ | **CheckpointNode: | ||
+ | * Performance Optimierung für den NameNode | ||
+ | * Persisitert im Zusammenspiel mit dem NameNode die Metadaten(Namespaces) | ||
+ | * Holt dazu die akutellen fsimage und edits Informationen vom NameNode, führt diese zusammen und überträgt das Ergebnis zurück | ||
+ | * Läuft auf einem anderen Knoten | ||
+ | |||
+ | **Backup Node:** (neu mit Hadoop 2.0 - vorher teil vom secondary name node) | ||
+ | * Synchronisiert sich mit dem NameNode (erhält alle Änderungen an der Datei " | ||
+ | * Auffallsicherheit | ||
+ | |||
+ | **DataNode**: | ||
+ | * Läuft typischerweise auf jeden Knoten im Cluster | ||
+ | * Speichert die Daten in Blöcken | ||
+ | * Um einen ausgefallenen Knoten zu ersetzen, sollte immer ca. 20% an Gesamtspeichervolumen im Cluster frei bleiben | ||
+ | |||
+ | Architektur siehe auch hier = [[http:// | ||
+ | |||
+ | |||
+ | Wichtige Befehle um mit der [[nosql: | ||
+ | |||
+ | |||
+ | **Überwachen HDFS über die HTML Oberfläche** | ||
+ | |||
+ | ^Komponente^Default TCP Port^Konfigurations Parameter^ | ||
+ | |HDFS NameNode |50070 | ||
+ | |DataNodes | ||
+ | |Backup Node | ||
+ | |||
+ | |||
+ | Mit [[https:// | ||
+ | * [[nosql: | ||
+ | |||
+ | |||
+ | Unter MS Windows mit Hadoop hdfs arbeiten: | ||
+ | * [[nosql: | ||
+ | |||
+ | |||
+ | ===MapReduce=== | ||
+ | |||
+ | Die verteilte Verarbeitung der Daten im Hadoop Cluster erfolgt nach dem MapReduce Muster, dabei verarbeitet jeder Knoten möglichst nur die Daten auf seinem Knoten. | ||
+ | |||
+ | * Das Framework ist in Java implementiert | ||
+ | * Automatische Parallelisierung und Verteilung über das Cluster | ||
+ | * " | ||
+ | * Seit Hadoop 2.0 YARN als Ressourcen Manager | ||
+ | |||
+ | |||
+ | Eine MapReduce Aufgabe besteht aus: | ||
+ | |||
+ | * **JOB** | ||
+ | * **TASK** - Ein laufender Verarbeitungsschritt auf einem Cluster Knoten | ||
+ | * **TASK Versuch** - Instanz innerhalb der versucht wird einen Task auszuführen | ||
+ | * Gleiche oder höhere Anzahl als TASKS ( falls ein Task fehlschlug, wird neu gestartet) | ||
+ | |||
+ | |||
+ | Übersicht über die Schichten von Hadoop für das MapReduce Verfahren mit YARN: | ||
+ | {{ : | ||
+ | |||
+ | |||
+ | [[http:// | ||
+ | |||
+ | |||
+ | YARN Services: | ||
+ | |||
+ | **ResourceManager**: | ||
+ | |||
+ | * Scheduler, der die verfügbaren Resourcen im Cluster zwischen den Applikationen verteilt | ||
+ | * Zur selben Zeit nur ein ResourceManager aktiv | ||
+ | * Zwei Hauptkomponente | ||
+ | * Scheduler | ||
+ | * Verteilung der Ressourcen Container an die verschiedenen Anwendungen im Cluster | ||
+ | * Verteilungsstrategie kann über einen Plug-In-Mechanismus angepasst werden | ||
+ | * Reiner Scheduler - keine Überwachung oder Monitorring - Keine Garantie der Wiederholung bei Fehlern | ||
+ | * ApplicationsManager | ||
+ | * Verwaltet die im Cluster laufenden ApplicationMaster | ||
+ | * Nimmt die Job Anfragen entgegen | ||
+ | * Bestimmt den ersten Container für die ApplicationMaster der Anwendung | ||
+ | * Startet und Überwacht den ApplicationMaster, | ||
+ | |||
+ | |||
+ | **NodeManager - NM**: | ||
+ | * läuft auf jeden Worker Knoten im Cluster | ||
+ | * Nimmt Anfragen vom ResourceManager an | ||
+ | * Verwaltet die Container mit den Ressourcen auf diesen einzelnen Knoten | ||
+ | * Reporting an den ResourceManager | ||
+ | |||
+ | |||
+ | **ApplicationMaster - AM**: | ||
+ | * Jeder laufende Job (Applikation) besitzt einen ApplikationMaster | ||
+ | * Führt den Job aus und ist verantwortlich das Anfragen von Ressourcen vom ResourceManager und arbeitet mit dem NodeManager zusammen, überwacht die Container | ||
+ | * Teilt die Anwendung in mehrere Tasks auf | ||
+ | * Arbeitet mit den NodeManangern zusammen, um einzelne Tasks auszuführen und zu überwachen | ||
+ | * Ist im Prinzip aber ein normaler Ressourcen Containter | ||
+ | |||
+ | **Container**: | ||
+ | * Ressourcen innerhalb eines Slave Knotens werden in einem Container verwaltet/ | ||
+ | * Werden einem Task zur Bearbeitung von Aufgaben vom zentralen ResourceManager zugeteilt | ||
+ | |||
+ | |||
+ | **Ablauf beim Start einer Anwendung in Hadoop YARN**: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | * Client sendet Anfrage an den ResourceManager | ||
+ | * ResourceManager wählt einen freien Container | ||
+ | * ResourceManager startet ApplicationMaster | ||
+ | * ApplicationMaster | ||
+ | * ApplicationMaster erhält vom ResourceManager die notwendigen Container | ||
+ | * ApplicationMaster verbindet sich mit diesen Informationen an die passenden NodeManager, | ||
+ | * Nach Ablauf des Jobs deregisitert sich der ApplicationMaster vom ResourceManager | ||
+ | |||
+ | siehe auch => http:// | ||
+ | |||
+ | |||
+ | Wichtige Befehle um mit den [[nosql: | ||
+ | |||
+ | |||
+ | **Überwachen YARN über die HTML Oberfläche** | ||
+ | |||
+ | ^Komponente^Default TCP Port^ Konfiguration Parameter^ | ||
+ | |NodeManager | ||
+ | |ResourceManager | ||
+ | |MapReduce Job History Server |19888| | ||
+ | |||
+ | |||
+ | **MapReduce Job erstellen** | ||
+ | |||
+ | * [[nosql: | ||
+ | * [[nosql: | ||
+ | |||
+ | Python Beispiel: | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | ==== Hardware Anforderung an einen typischen Hadoop Server ==== | ||
+ | |||
+ | * 64/128GB RAM | ||
+ | * Pro Core eine eigenständige Festplatte - JBOD Konfiguration => Kein Raid Level! | ||
+ | * 10G Ethernet | ||
+ | |||
+ | |||
+ | |||
+ | ====Erste Schritte mit dem Hadoop Öko System ==== | ||
+ | |||
+ | Installation | ||
+ | * [[nosql: | ||
+ | |||
+ | Apache Ambari - Hadoop Cluster aufsetzen und verwalten | ||
+ | * [[nosql: | ||
+ | |||
+ | |||
+ | ====Wichtige Projekte im Hadoop Öko System:==== | ||
+ | |||
+ | Hive - HiveSQL - SQL ähnliche Abfrage Sprache | ||
+ | * [[nosql: | ||
+ | |||
+ | Pig - Data sets manipulation language um Map Reduces Jobs zu erzeugen | ||
+ | * [[nosql: | ||
+ | |||
+ | Sqoop - Daten Transfer - eine Art SQL*Loader für Hadoop | ||
+ | * [[nosql: | ||
+ | |||
+ | Flume - eine Art syslog Demon zum Einsammlen von Log informationen | ||
+ | * [[nosql: | ||
+ | |||
+ | |||
+ | Zookeeper – distributed cluster manager | ||
+ | |||
+ | |||
+ | Oozie– workflow scheduler services | ||
+ | |||
+ | |||
+ | Cascading und Scalding - MapReduce Jobs abstrakter definieren | ||
+ | |||
+ | |||
+ | Kafka - Message Verarbeitung | ||
+ | |||
+ | |||
+ | **SQL Engines** | ||
+ | |||
+ | * Impala | ||
+ | * Spark | ||
+ | * Oracle Big Data SQL (Leider nur in einer Exadata/ | ||
+ | |||
+ | |||
+ | Storm - Realtime Hadoop | ||
+ | |||
+ | |||
+ | Eine Überblick über das Apache Hadoop Ökosystem: | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | |||
+ | === Datenbankanwendungen auf Basis von Hadoop ohne Einsatz von MapReduce === | ||
+ | |||
+ | * HBase– columnar-oriented key-value store | ||
+ | |||
+ | * SQL Anfragen ohne das MapReduce Pattern | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | |||
+ | ===Berichte und Auswertungen der Daten in Hadoop erstellen=== | ||
+ | |||
+ | Für Hadoop | ||
+ | |||
+ | Hue (http:// | ||
+ | |||
+ | * [[nosql: | ||
+ | |||
+ | |||
+ | Modern: | ||
+ | * https:// | ||
+ | * http:// | ||
+ | * Hive mti qlik => http:// | ||
+ | |||
+ | Traditionell: | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | Weitere Beispiele: | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | Komplexes Szenarien wie Realtime Analysen mit elasticsearch und Kibana umsetzen: | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | ====Integration in Bestandssysteme==== | ||
+ | |||
+ | * [[nosql: | ||
+ | |||
+ | Siehe auch meinen Vortrag zu diesem Thema auf einem DOAG Hadoop Workshop: \\ | ||
+ | => [[http:// | ||
+ | |||
+ | |||
+ | |||
+ | ====Hadoop | ||
+ | |||
+ | Eine der vielen Hadoop Distributionen ist zum Beispiel: | ||
+ | |||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | Unter [[http:// | ||
+ | |||
+ | Leider laufen in dieser Cloudera VM die VMWare Tools auf anhieb nicht (Fehler vmware-user: | ||
+ | |||
+ | |||
+ | Alternativ: | ||
+ | |||
+ | * VM von Mapr => http:// | ||
+ | * VM von hortonworks => http:// | ||
+ | |||
+ | **Tipp:** | ||
+ | |||
+ | Nach dem Download funktioniert das Netzwerk der VM's oft nicht, da es sich um 6 Linux Clone handelt ( Lösung siehe hier : [[linux: | ||
+ | |||
+ | === BigDataLite VM von Oracle === | ||
+ | |||
+ | Eine VM von Oracle zu dem Thema BigData kann hier gefunden werden: \\ | ||
+ | => http:// | ||
+ | |||
+ | |||
+ | Um die VM in VMWare zu verwenden: | ||
+ | * [[nosql: | ||
+ | |||
+ | Erste Schritte und Testes: | ||
+ | * [[nosql: | ||
+ | |||
+ | |||
+ | ====Alternativen zu Hadoop als Filesystem==== | ||
+ | |||
+ | * http:// | ||
+ | |||
+ | |||
+ | |||
+ | ===== Quellen ===== | ||
+ | |||
+ | In den Detail Artikeln zu Hadoop wird auf weitere Quellen verwiesen. | ||
+ | |||
+ | |||
+ | Vorträge: | ||
+ | |||
+ | * http:// | ||
+ | |||
+ | |||
+ | Hadoop DWH Konzepte: | ||
+ | |||
+ | * http:// | ||
+ | |||
+ | |||
+ | IBM | ||
+ | * http:// | ||
+ | * http:// |
nosql/apache_hadoop_einfuehrung.txt · Zuletzt geändert: 2015/04/02 22:20 von gpipperr