Inhalt | 9 |
1 Einleitung | 15 |
2 Big Data | 21 |
2.1 Historische Entstehung | 23 |
2.2 Big Data – ein passender Begriff? | 24 |
2.2.1 Die drei V | 25 |
2.2.2 Weitere Vs | 28 |
2.2.3 Der Verarbeitungsaufwand ist big | 28 |
2.2.4 Sicht der Industrie auf Big Data | 29 |
2.3 Eingliederung in BI und Data Mining | 30 |
3 Hadoop | 35 |
3.1 Hadoop kurz vorgestellt | 35 |
3.2 HDFS – das Hadoop Distributed File System | 37 |
3.3 Hadoop 2.x und YARN | 42 |
3.4 Hadoop als Single-Node-Cluster aufsetzen | 44 |
3.4.1 Falls etwas nicht funktioniert | 58 |
3.5 Map Reduce | 60 |
3.6 Aufsetzen einer Entwicklungsumgebung | 63 |
3.7 Implementierung eines Map-Reduce-Jobs | 70 |
3.8 Ausführen eines Jobs über Kommandozeile | 82 |
3.9 Verarbeitung im Cluster | 86 |
3.10 Aufsetzen eines Hadoop-Clusters | 88 |
3.11 Starten eines Jobs via Hadoop-API | 100 |
3.12 Verketten von Map-Reduce-Jobs | 113 |
3.13 Verarbeitung anderer Dateitypen | 129 |
3.14 YARN-Anwendungen | 144 |
3.14.1 Logging und Log-Aggregation in YARN | 145 |
3.14.2 Eine einfache YARN-Anwendung | 148 |
3.15 Vor- und Nachteile der verteilten Verarbeitung | 173 |
3.16 Die Hadoop Java-API | 174 |
3.16.1 Ein einfacher HDFS-Explorer | 175 |
3.16.2 Cluster-Monitor | 187 |
3.16.3 Überwachen der Anwendungen im Cluster | 189 |
3.17 Gegenüberstellung zur traditionellen Verarbeitung | 191 |
3.18 Big Data aufbereiten | 192 |
3.18.1 Optimieren der Algorithmen zur Datenauswertung | 192 |
3.18.2 Ausdünnung und Gruppierung | 194 |
3.19 Ausblick auf Apache Spark | 196 |
3.20 Markt der Big-Data-Lösungen | 198 |
4 Das Hadoop-Ecosystem | 201 |
4.1 Ambari | 202 |
4.2 Sqoop | 203 |
4.3 Flume | 203 |
4.4 HBase | 204 |
4.5 Hive | 205 |
4.6 Pig | 205 |
4.7 ZooKeeper | 205 |
4.8 Oozie | 206 |
4.9 Mahout | 207 |
4.10 Data Analytics und das Reporting | 207 |
5 NoSQL und HBase | 209 |
5.1 Historische Entstehung | 209 |
5.2 Das CAP-Theorem | 210 |
5.3 ACID und BASE | 211 |
5.4 Typen von Datenbanken | 212 |
5.5 Umstieg von SQL und Dateisystemen auf NoSQL oder HDFS | 215 |
5.5.1 Methoden der Datenmigration | 215 |
5.6 HBase | 217 |
5.6.1 Das Datenmodell von HBase | 217 |
5.6.2 Aufbau von HBase | 220 |
5.6.3 Installation als Stand-alone | 221 |
5.6.4 Arbeiten mit der HBase Shell | 223 |
5.6.5 Verteilte Installation auf dem HDFS | 225 |
5.6.6 Laden von Daten | 228 |
5.6.7 HBase Java-API | 240 |
5.6.8 Der Umstieg von einem RDBMS auf HBase | 263 |
6 Data Warehousing mit Hive | 267 |
6.1 Installation von Hive | 268 |
6.2 Architektur von Hive | 270 |
6.3 Das Command Line Interface (CLI) | 271 |
6.4 HiveQL als Abfragesprache | 273 |
6.4.1 Anlegen von Datenbanken | 273 |
6.4.2 Primitive Datentypen | 274 |
6.4.3 Komplexe Datentypen | 274 |
6.4.4 Anlegen von Tabellen | 275 |
6.4.5 Partitionierung von Tabellen | 276 |
6.4.6 Externe und interne Tabellen | 276 |
6.4.7 Löschen und Leeren von Tabellen | 277 |
6.4.8 Importieren von Daten | 278 |
6.4.9 Zählen von Zeilen via count | 279 |
6.4.10 Das SELECT-Statement | 279 |
6.4.11 Beschränken von SELECT über DISTINCT | 283 |
6.4.12 SELECT auf partitionierte Tabellen | 283 |
6.4.13 SELECT sortieren mit SORT BY und ORDER BY | 284 |
6.4.14 Partitionieren von Daten durch Bucketing | 285 |
6.4.15 Gruppieren von Daten mittels GROUP BY | 286 |
6.4.16 Subqueries – verschachtelte Abfragen | 287 |
6.4.17 Ergebnismengen vereinigen mit UNION ALL | 287 |
6.4.18 Mathematische Funktionen | 288 |
6.4.19 String-Funktionen | 290 |
6.4.20 Aggregatfunktionen | 290 |
6.4.21 User-Defined Functions | 291 |
6.4.22 HAVING | 299 |
6.4.23 Datenstruktur im HDFS | 300 |
6.4.24 Verändern von Tabellen | 300 |
6.4.25 Erstellen von Views | 303 |
6.4.26 Löschen einer View | 303 |
6.4.27 Verändern einer View | 303 |
6.4.28 Tabellen zusammenführen mit JOINs | 304 |
6.5 Hive Security | 306 |
6.5.1 Implementieren eines Authentication-Providers | 312 |
6.5.2 Authentication-Provider für HiveServer2 | 317 |
6.5.3 Verwenden von PAM zur Benutzerauthentifizierung | 317 |
6.6 Hive und JDBC | 318 |
6.7 Datenimport mit Sqoop | 336 |
6.8 Datenexport mit Sqoop | 338 |
6.9 Hive und Impala | 339 |
6.10 Unterschied zu Pig | 340 |
6.11 Zusammenfassung | 341 |
7 Big-Data-Visualisierung | 343 |
7.1 Theorie der Datenvisualisierung | 343 |
7.2 Diagrammauswahl gemäß Datenstruktur | 349 |
7.3 Visualisieren von Big Data erfordert ein Umdenken | 350 |
7.3.1 Aufmerksamkeit lenken | 350 |
7.3.2 Kontextsensitive Diagramme | 353 |
7.3.3 3D-Diagramme | 355 |
7.3.4 Ansätze, um Big-Data zu visualisieren | 356 |
7.4 Neue Diagrammarten | 358 |
7.5 Werkzeuge zur Datenvisualisierung | 362 |
7.6 Entwicklung einer einfachen Visualisierungskomponente | 366 |
8 Auf dem Weg zu neuem Wissen – Aufbereiten, Anreichern und Empfehlen | 379 |
8.1 Eine Big-Data-Table als zentrale Datenstruktur | 382 |
8.2 Anreichern von Daten | 384 |
8.2.1 Anlegen einer Wissensdatenbank | 385 |
8.2.2 Passende Zuordnung von Daten | 386 |
8.3 Diagrammempfehlungen über Datentypanalyse | 390 |
8.3.1 Diagrammempfehlungen in der BDTable | 392 |
8.4 Textanalyse – Verarbeitung unstrukturierter Daten | 398 |
8.4.1 Erkennung von Sprachen | 399 |
8.4.2 Natural Language Processing | 400 |
8.4.3 Mustererkennung mit Apache UIMA | 408 |
9 Infrastruktur | 429 |
9.1 Hardware | 430 |
9.2 Betriebssystem | 431 |
9.2.1 Paketmanager | 431 |
9.2.2 Git | 432 |
9.2.3 VIM | 433 |
9.2.4 Terminalumgebung | 433 |
9.3 Virtualisierung | 434 |
9.4 Container | 434 |
9.4.1 Docker-Crashkurs | 435 |
9.4.2 Infrastructure as Code | 438 |
9.5 Distributionen | 438 |
9.6 Reproduzierbarkeit | 439 |
9.7 Zusammenfassung | 439 |
10 Programmiersprachen | 441 |
10.1 Merkmale | 442 |
10.1.1 Funktionale Paradigmen | 442 |
10.2 Big-Data-Programmiersprachen | 443 |
10.2.1 Java | 443 |
10.2.2 Scala | 444 |
10.2.3 Python | 447 |
10.2.4 R | 450 |
10.2.5 Weitere Programmiersprachen | 451 |
10.3 Zusammenfassung | 452 |
11 Polyglot Persistence | 453 |
11.1 Praxis | 454 |
11.1.1 Redis | 454 |
11.1.2 MongoDB | 457 |
11.1.3 Neo4j | 457 |
11.1.4 S3 | 458 |
11.1.5 Apache Kudu | 461 |
11.2 Zusammenfassung | 461 |
12 Apache Kafka | 463 |
12.1 Der Kern | 464 |
12.2 Erste Schritte | 464 |
12.3 Dockerfile | 468 |
12.4 Clients | 468 |
12.5 Python Chat Client | 468 |
12.6 Zusammenfassung | 470 |
13 Data Processing Engines | 471 |
13.1 Von Map Reduce zu GPPEs | 471 |
13.1.1 Herausforderungen | 472 |
13.1.2 Verfahren zur Verbesserung | 473 |
13.1.3 Von Batch und Streaming zu Lambda | 475 |
13.1.4 Frameworks in a Nutshell | 476 |
13.2 Apache Spark | 476 |
13.2.1 Datasets | 476 |
13.2.2 Von RDDs zu Data Frames | 477 |
13.2.3 Hands On Apache Spark | 477 |
13.2.4 Client-Programme schreiben | 479 |
13.2.5 Das Spark-Ecosystem | 484 |
13.3 Zusammenfassung | 488 |
14 Streaming | 489 |
14.1 Kernparadigmen | 489 |
14.2 Spark Streaming | 492 |
14.2.1 Beispiel | 493 |
14.3 Apache Flink | 494 |
14.4 Zusammenfassung | 497 |
15 Data Governance | 499 |
15.1 Begriffsdschungel | 500 |
15.2 Governance-Pfeiler | 501 |
15.2.1 Transparenz | 501 |
15.2.2 Verantwortung | 502 |
15.2.3 Standardisierung | 503 |
15.3 Fokusthemen von Data Governance | 503 |
15.3.1 Policies | 503 |
15.3.2 Quality | 504 |
15.3.3 Compliance | 504 |
15.3.4 Business Intelligence | 504 |
15.4 Datenschutz | 505 |
15.4.1 Werkzeuge | 506 |
15.5 Sicherheit im Hadoop-Ecosystem | 511 |
15.6 Metadatenmanagement | 512 |
15.6.1 Open-Source-Werkzeuge | 513 |
15.6.2 Kommerzielle Datenkataloge | 514 |
15.7 Organisatorische Themen | 514 |
15.7.1 Privacy by Design | 515 |
15.7.2 k-Anonymity | 515 |
15.7.3 Standards | 517 |
15.8 Zusammenfassung | 517 |
16 Zusammenfassung und Ausblick | 519 |
16.1 Zur zweiten Auflage 2018 | 519 |
16.2 Zur ersten Auflage 2014 | 521 |
17 Häufige Fehler | 525 |
18 Anleitungen | 531 |
18.1 Installation und Verwendung von Sqoop2 | 531 |
18.2 Hadoop für Windows 7 kompilieren | 537 |
19 Literaturverzeichnis | 541 |
Index | 545 |