You are previewing Big Data - Entwicklung und Programmierung von Systemen für große Datenmengen und Einsatz der Lambda-Architektur.
O'Reilly logo
Big Data - Entwicklung und Programmierung von Systemen für große Datenmengen und Einsatz der Lambda-Architektur

Book Description

Techniken und Best Practices für Datensysteme

  • Einführung in Big-Data-Systeme
  • Echtzeitverarbeitung sehr großer Datenmengen
  • Tools wie Hadoop, Cassandra und Storm

Bei Anwendungen in der Größenordnung von sozialen Netzwerken, der Datenverkehrsanalyse in Echtzeit oder E-Commerce-Websites entstehen sehr schnell so große Datenmengen, dass herkömmliche Datenbanksysteme ihnen nicht mehr gewachsen sind. Solche Anwendungen erfordern Architekturen, die dafür ausgelegt sind, Datenmengen nahezu beliebigen Umfangs zu speichern und zu verarbeiten.

Dieses Buch erklärt die Einrichtung solcher Datenhaltungssysteme anhand einer speziell für große Datenmengen ausgelegten Architektur. Der Autor erläutert die Theorie von Big-Data-Systemen und zeigt, wie der Leser dies in die Praxis umsetzen kann. Darüber hinaus werden Technologien wie Hadoop, Storm und NoSQL-Datenbanken eingeführt.

Table of Contents

  1. Impressum
  2. Vorwort
  3. Danksagungen
  4. Über dieses Buch
  5. Kapitel 1: Ein neues Paradigma für Big Data
    1. 1.1 Aufbau des Buches
    2. 1.2 Skalierung mit einer herkömmlichen Datenbank​
      1. 1.2.1 Skalierung mit einer Warteschlange​
      2. 1.2.2 Skalierung durch Sharding​
      3. 1.2.3 Erste Probleme mit der Fehlertoleranz​
      4. 1.2.4 Probleme mit fehlerhaften Daten​
      5. 1.2.5 Was ist schiefgegangen?
      6. 1.2.6 Inwiefern sind Big-Data-Verfahren hilfreich?
    3. 1.3 NoSQL ist kein Allheilmittel​
    4. 1.4 Grundlagen
    5. 1.5 Erwünschte Eigenschaften eines Big-Data-Systems
      1. 1.5.1 Belastbarkeit und Fehlertoleranz
      2. 1.5.2 Lesen und Aktualisieren mit geringen Latenzzeiten
      3. 1.5.3 Skalierbarkeit
      4. 1.5.4 Allgemeingültigkeit​
      5. 1.5.5 Erweiterbarkeit​
      6. 1.5.6 Ad-hoc-Abfragen​
      7. 1.5.7 Minimaler Wartungsaufwand
      8. 1.5.8 Fehlerbehebung
    6. 1.6 Schwierigkeiten vollständig inkrementeller Architekturen
      1. 1.6.1 Komplexität im Betrieb
      2. 1.6.2 Extreme Komplexität, um letztendliche Konsistenz zu erzielen
      3. 1.6.3 Keine Fehlertoleranz gegenüber menschlichem Versagen
      4. 1.6.4 Vollständig inkrementelle Lösung kontra Lambda-Architektur
    7. 1.7 Lambda-Architektur​
      1. 1.7.1 Batch-Layer
      2. 1.7.2 Serving-Layer​
      3. 1.7.3 Batch- und Serving-Layer erfüllen fast alle Anforderungen
      4. 1.7.4 Speed-Layer​
    8. 1.8 Die neuesten Trends
      1. 1.8.1 Prozessoren werden kaum noch schneller
      2. 1.8.2 Elastic Clouds​
      3. 1.8.3 Ein lebhaftes Open-Source-Ökosystem für Big Data
    9. 1.9 Beispielanwendung: SuperWebAnalytics.com
    10. 1.10 Zusammenfassung
  6. Teil I: Batch-Layer
  7. Kapitel 2: Das Datenmodell für Big Data
    1. 2.1 Die Eigenschaften von Daten​
      1. 2.1.1 Daten sind ursprünglich
      2. 2.1.2 Daten sind unveränderlich
      3. 2.1.3 Daten sind beständig korrekt
    2. 2.2 Das faktenbasierte Modell zur Repräsentierung von Daten​​
      1. 2.2.1 Faktenbeispiele und ihre Eigenschaften
      2. 2.2.2 Vorteile des faktenbasierten Modells
    3. 2.3 Graphenschemata
      1. 2.3.1 Elemente eines Graphenschemas
      2. 2.3.2 Die Notwendigkeit, dem Schema zu gehorchen
    4. 2.4 Ein vollständiges Datenmodell für SuperWebAnalytics.com
    5. 2.5 Zusammenfassung
  8. Kapitel 3: Das Datenmodell für Big Data: Praxis
    1. 3.1 Wozu ein Serialisierungs-Framework?
    2. 3.2 Apache Thrift​​
      1. 3.2.1 Knoten​
      2. 3.2.2 Kanten​
      3. 3.2.3 Eigenschaften​
      4. 3.2.4 Alles in Datenobjekten zusammenfassen
      5. 3.2.5 Weiterentwicklung des Schemas
    3. 3.3 Für Serialisierungs-Frameworks geltende Beschränkungen
    4. 3.4 Zusammenfassung
  9. Kapitel 4: Datenspeicherung im Batch-Layer
    1. 4.1 Speicheranforderungen des Stammdatensatzes
    2. 4.2 Auswahl einer Speicherlösung für den Batch-Layer
      1. 4.2.1 Schlüssel-Werte-Datenbank zum Speichern des Stammdatensatzes verwenden
      2. 4.2.2 Verteilte Dateisysteme
    3. 4.3 Funktionsweise verteilter Dateisysteme
    4. 4.4 Speichern des Stammdatensatzes mit einem verteilten Dateisystem
    5. 4.5 Vertikale Partitionierung
    6. 4.6 Verteilte Dateisysteme sind maschinennah
    7. 4.7 Speichern des SuperWebAnalytics.com-Stammdatensatzes in einem verteiltem Dateisystem
    8. 4.8 Zusammenfassung
  10. Kapitel 5: Datenspeicherung im Batch-Layer: Praxis
    1. 5.1 Verwendung des Hadoop Distributed File Systems
      1. 5.1.1 Das Problem mit kleinen Dateien
      2. 5.1.2 Eine allgemeinere Abstrahierung
    2. 5.2 Datenspeicherung im Batch-Layer mit Pail
      1. 5.2.1 Grundlegende Pail-Operationen​
      2. 5.2.2 Objekte serialisieren und in Pails speichern
      3. 5.2.3 Pail-Operationen​
      4. 5.2.4 Vertikale Partitionierung mit Pail
      5. 5.2.5 Pail-Dateiformat und Komprimierung
      6. 5.2.6 Vorteile von Pail zusammengefasst
    3. 5.3 Speichern des Stammdatensatzes für SuperWebAnalytics.com
      1. 5.3.1 Ein strukturiertes Pail für Thrift-Objekte
      2. 5.3.2 Ein einfaches Pail für SuperWebAnalytics.com
      3. 5.3.3 Ein geteiltes Pail zur vertikalen Partitionierung des Datensatzes
    4. 5.4 Zusammenfassung
  11. Kapitel 6: Batch-Layer
    1. 6.1 Beispiele
      1. 6.1.1 Anzahl der Pageviews innerhalb eines bestimmten Zeitraums
      2. 6.1.2 Vorhersage des Geschlechts
      3. 6.1.3 Einflussreiche Tweets
    2. 6.2 Berechnungen im Batch-Layer​
    3. 6.3 Neuberechnungsalgorithmen kontra inkrementelle Algorithmen
      1. 6.3.1 Performance
      2. 6.3.2 Fehlertoleranz gegenüber menschlichem Versagen
      3. 6.3.3 Allgemeine Anwendbarkeit des Algorithmu​s
      4. 6.3.4 Auswahl eines Algorithmustyps
    4. 6.4 Skalierbarkeit im Batch-Layer
    5. 6.5 MapReduce: Ein Paradigma für Big-Data-Berechnungen​
      1. 6.5.1 Skalierbarkeit
      2. 6.5.2 Fehlertoleranz
      3. 6.5.3 Allgemeine Anwendbarkeit von MapReduce
    6. 6.6 Maschinennähe
      1. 6.6.1 Berechnungen in mehreren Schritten sind nicht intuitiv
      2. 6.6.2 Die manuelle Implementierung von Joins ist sehr kompliziert
      3. 6.6.3 Enge Kopplung der logischen und physischen Ausführung
    7. 6.7 Pipe-Diagramme: Eine allgemeinere Auffassung von Stapelverarbeitungsberechnungen
      1. 6.7.1 Konzepte der Pipe-Diagramme
      2. 6.7.2 Ausführen von Pipe-Diagrammen via MapReduce
      3. 6.7.3 Combiner-Aggregator
      4. 6.7.4 Beispiele für Pipe-Diagramme
    8. 6.8 Zusammenfassung
  12. Kapitel 7: Batch-Layer: Praxis
    1. 7.1 Ein Beispiel zur Veranschaulichung
    2. 7.2 Typische Schwierigkeiten Daten verarbeitender Tools
      1. 7.2.1 Proprietäre Sprachen
      2. 7.2.2 Mangelhaft einbindungsfähige Abstraktionen
    3. 7.3 Einführung in JCascalog
      1. 7.3.1 Das JCascalog-Datenmodell
      2. 7.3.2 Aufbau einer JCascalog-Abfrage​
      3. 7.3.3 Abfragen mehrerer Datensätze
      4. 7.3.4 Gruppierung und Aggregatoren​​
      5. 7.3.5 Schrittweise Abarbeitung einer Abfrage
      6. 7.3.6 Benutzerdefinierte Prädikate​
    4. 7.4 Einbindung​
      1. 7.4.1 Subqueries kombinieren​
      2. 7.4.2 Dynamisch erzeugte Subqueries
      3. 7.4.3 Prädikatmakros​
      4. 7.4.4 Dynamisch erzeugte Prädikatmakros
    5. 7.5 Zusammenfassung
  13. Kapitel 8: Beispiel eines Batch-Layers: Architektur und Algorithmen
    1. 8.1 Design des Batch-Layers für SuperWebAnalytics.com
      1. 8.1.1 Unterstützte Abfragen
      2. 8.1.2 Batch-Views
    2. 8.2 Überblick über den Workflow
    3. 8.3 Aufnahme neuer Daten
    4. 8.4 URL-Normalisierung
    5. 8.5 User-ID-Normalisierung
    6. 8.6 Deduplizierung der Pageviews
    7. 8.7 Berechnung der Batch-Views
      1. 8.7.1 Zeitlicher Verlauf der Pageviews
      2. 8.7.2 Zeitlicher Verlauf der eindeutig unterschiedlichen Besucher
      3. 8.7.3 Analyse der Bounce-Rate
    8. 8.8 Zusammenfassung
  14. Kapitel 9: Beispiel eines Batch-Layers: Implementierung
    1. 9.1 Ausgangspunkt
    2. 9.2 Vorbereitung des Workflows
    3. 9.3 Aufnahme neuer Daten
    4. 9.4 URL-Normalisierung
    5. 9.5 User-ID-Normalisierung
    6. 9.6 Deduplizierung der Pageviews
    7. 9.7 Berechnung der Batch-Views
      1. 9.7.1 Zeitlicher Verlauf der Pageviews
      2. 9.7.2 Zeitlicher Verlauf der eindeutig unterschiedlichen Besucher
      3. 9.7.3 Berechnung der Bounce-Rate
    8. 9.8 Zusammenfassung
  15. Teil II: Serving-Layer
  16. Kapitel 10: Serving-Layer
    1. 10.1 Performancekennzahlen des Serving-Layers
    2. 10.2 Lösung des Problems »Normalisierung kontra Denormalisierung« durch den Serving-Layer
    3. 10.3 Anforderungen an eine Datenbank für den Serving-Layer
    4. 10.4 Gestaltung eines Serving-Layers für SuperWebAnalytics.com
      1. 10.4.1 Zeitlicher Verlauf der Pageviews
      2. 10.4.2 Zeitlicher Verlauf eindeutig unterschiedlicher Besucher
      3. 10.4.3 Berechnung der Bounce-Rate
    5. 10.5 Vergleich mit einer vollständig inkrementellen Lösung
      1. 10.5.1 Vollständig inkrementelle Lösung
      2. 10.5.2 Vergleich mit einer auf der Lambda-Architektur beruhenden Lösung
    6. 10.6 Zusammenfassung
  17. Kapitel 11: Serving-Layer: Praxis
    1. 11.1 ElephantDB: Grundlagen
      1. 11.1.1 Views in ElephantDB erzeugen
      2. 11.1.2 Views in ElephantDB deployen
      3. 11.1.3 ElephantDB verwenden
    2. 11.2 Einrichtung des Serving-Layers für SuperWebAnalytics.com
      1. 11.2.1 Zeitlicher Verlauf der Pageviews
      2. 11.2.2 Zeitlicher Verlauf eindeutig unterschiedlicher Besucher
      3. 11.2.3 Berechnung der Bounce-Rate
    3. 11.3 Zusammenfassung
  18. Teil III: Speed-Layer
  19. Kapitel 12: Echtzeit-Views
    1. 12.1 Berechnung von Echtzeit-Views
    2. 12.2 Speichern der Echtzeit-Views
      1. 12.2.1 Letztendliche Genauigkeit
      2. 12.2.2 Im Speed-Layer gespeicherter Zustand
    3. 12.3 Schwierigkeiten bei inkrementeller Berechnung
      1. 12.3.1 Gültigkeit des CAP-Theorems
      2. 12.3.2 Das komplexe Zusammenwirken von CAP-Theorem und inkrementellen Algorithmen
    4. 12.4 Asynchrone kontra synchrone Aktualisierungen
    5. 12.5 Echtzeit-Views verwerfen
    6. 12.6 Zusammenfassung
  20. Kapitel 13: Echtzeit-Views: Praxis
    1. 13.1 Cassandras Datenmodell
    2. 13.2 Cassandra verwenden
      1. 13.2.1 Cassandra für Fortgeschrittene
    3. 13.3 Zusammenfassung
  21. Kapitel 14: Warteschlangen und Streamverarbeitung
    1. 14.1 Warteschlangen
      1. 14.1.1 Warteschlangen mit nur einem Abnehmer
      2. 14.1.2 Warteschlangen mit mehreren Abnehmern
    2. 14.2 Streamverarbeitung
      1. 14.2.1 Warteschlangen und Worker
      2. 14.2.2 Fallstricke beim Warteschlangen-Worker-Ansatz
    3. 14.3 Streamverarbeitung one-at-a-time auf höherer Ebene
      1. 14.3.1 Storm-Modell
      2. 14.3.2 Gewährleistung der Nachrichtenverarbeitung
    4. 14.4 SuperWebAnalytics.com: Speed-Layer
      1. 14.4.1 Aufbau der Topologie
    5. 14.5 Zusammenfassung
  22. Kapitel 15: Warteschlangen und Streamverarbeitung: Praxis
    1. 15.1 Definition einer Topologie mit Apache Storm
    2. 15.2 Apache Storm-Cluster und Bereitstellung
    3. 15.3 Gewährleistung der Nachrichtenverarbeitung
    4. 15.4 Implementierung des Speed-Layers
    5. 15.5 Zusammenfassung
  23. Kapitel 16: Streamverarbeitung kleiner Stapel
    1. 16.1 Genau einmalige Verarbeitung
      1. 16.1.1 Verarbeitung in streng festgelegter Reihenfolge
      2. 16.1.2 Streamverarbeitung kleiner Stapel
      3. 16.1.3 Topologien zur Verarbeitung kleiner Stapel
    2. 16.2 Grundlegende Konzepte der Streamverarbeitung kleiner Stapel
    3. 16.3 Erweiterte Pipe-Diagramme zur Beschreibung der Streamverarbeitung kleiner Stapel
    4. 16.4 Fertigstellung des Speed-Layers für SuperWebAnalytics.com
      1. 16.4.1 Zeitlicher Verlauf der Pageviews
      2. 16.4.2 Berechnung der Bounce-Rate
    5. 16.5 Eine weitere Methode zur Berechnung der Bounce-Rate
    6. 16.6 Zusammenfassung
  24. Kapitel 17: Streamverarbeitung kleiner Stapel: Praxis
    1. 17.1 Trident verwenden
    2. 17.2 Fertigstellung des Speed-Layers für SuperWebAnalytics.com
      1. 17.2.1 Zeitlicher Verlauf der Pageviews
      2. 17.2.2 Berechnung der Bounce-Rate
    3. 17.3 Fehlertolerante Verarbeitung kleiner Stapel im Arbeitsspeicher
    4. 17.4 Zusammenfassung
  25. Kapitel 18: Die Lambda-Architektur im Detail
    1. 18.1 Definition von Datenhaltungssystemen
    2. 18.2 Batch- und Serving-Layer
      1. 18.2.1 Inkrementelle Stapelverarbeitung
      2. 18.2.2 Ressourcennutzung des Batch-Layers messen und optimieren
    3. 18.3 Speed-Layer
    4. 18.4 Query-Layer
    5. 18.5 Zusammenfassung