Seminarunterlage Version: 1.07 Version 1.07 vom 5. September 2018
Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt- und Dienstleistungs-Bezeichnungen sind Warenzeichen oder eingetragene Warenzeichen der jeweiligen Firmen und beziehen sich auf Eintragungen in den USA oder USA-Warenzeichen. Weitere Logos und Produkt- oder Handelsnamen sind eingetragene Warenzeichen oder Warenzeichen der jeweiligen Unternehmen. Kein Teil dieser Dokumentation darf ohne vorherige schriftliche Genehmigung der weitergegeben oder benutzt werden. Die besitzt folgende Geschäftsstellen Adressen der Karl-Schurz-Straße 19a D-33100 Paderborn Tel.: (+49) 0 52 51 / 10 63-0 An der alten Ziegelei 5 D-48157 Münster Tel.: (+49) 02 51 / 9 24 35 00 Welser Straße 9 D-86368 Gersthofen Tel.: (+49) 08 21 / 507 492 0 Kreuzberger Ring 13 D-65205 Wiesbaden Tel.: (+49) 06 11 / 7 78 40 00 Wikingerstraße 18-20 D-51107 Köln Tel.: (+49) 02 21 / 8 70 61 0 Internet: http://www.ordix.de Email: seminare@ordix.de Seite 2 Version: 1.07
Inhaltsverzeichnis 1 Agenda... 8 1.1 Agenda... 9 2 Wie "big" ist Big Data?... 10 2.1 Agenda... 11 2.2 Wie "big" ist Big Data?... 12 2.3 3 V Modell... 13 2.4 Welche technischen Probleme sollen gelöst werden?... 14 2.5 Welche fachlichen Probleme sollen gelöst werden?... 15 2.6 Verteilte Datenhaltung im Cluster... 16 2.7 Verteilte Berechnung im Cluster... 17 2.8 Typische Probleme in verteilten Systemen... 18 2.9 Verfügbarkeit im Cluster... 19 2.10 Horizontale Skalierung mit Commodity Hardware... 20 2.11 PC Cluster... 21 2.12 Yahoo's Hadoop Cluster (2007)... 22 2.13 Zusammenfassung... 23 3 Hadoop Überblick... 24 3.1 Agenda... 25 3.2 Hadoop... 26 3.3 Hadoop Historie... 27 3.4 Hadoop Design Prinzipien... 28 3.5 "Data Locality Optimization"... 29 3.6 Hadoop Kernkomponenten... 30 3.7 HDFS - Hadoop Distributed File System... 31 3.8 File System Shell... 32 3.9 HDFS Schreiben... 33 3.10 HDFS Lesen... 34 3.11 Hadoop I/O... 35 3.12 YARN - Yet Another Resource Negotiator... 36 3.13 MapReduce Überblick... 37 3.14 MapReduce Beispiel... 38 3.15 MapReduce Phasen... 39 3.16 Unterschiede zwischen Hadoop 1 und Hadoop 2... 40 3.17 Neues in Hadoop 3... 41 3.18 Vergleich RDBMS mit Hadoop... 42 3.19 Das Apache Hadoop Ecosystem... 43 3.20 Hadoop Stärken und Schwächen... 46 4 HDFS... 47 4.1 Agenda... 48 4.2 HDFS Hadoop Distributed File System... 49 4.3 HDFS Dienste... 50 4.4 NameNode... 51 4.5 Secondary NameNode... 52 4.6 DataNode... 53 4.7 HDFS Schreiben... 54 4.8 HDFS Lesen... 56 4.9 Einige Besonderheiten vom HDFS... 58 4.10 Erasure Coding in Hadoop 3... 59 4.11 Erasure Coding - Policies... 60 4.12 Erasure Coding - Schreiben... 61 4.13 Erasure Coding - Lesen... 62 4.14 Erasure Coding - Limitierungen... 63 4.15 Arbeiten mit dem HDFS... 64 4.16 File System Shell... 65 4.17 File System Shell - Dateien kopieren... 66 Version: 1.07 Seite 3
4.18 File System Shell - Verzeichnismanagement... 67 4.19 File System Shell - Inhalt von Dateien anzeigen... 68 4.20 HDFS Kommandos... 69 4.21 Snapshots... 70 4.22 File System APIs... 71 4.23 Java API - FileSystem... 72 4.24 Java API - Daten schreiben... 73 4.25 Java API - Daten lesen... 74 4.26 Java API - Datei löschen... 75 4.27 HDFS Konfiguration... 76 4.28 core-site.xml... 77 4.29 hdfs-site.xml... 78 4.30 Trash... 79 4.31 hdfs dfsadmin... 80 5 MapReduce... 81 5.1 Word Count Hello World für Hadoop... 82 5.2 Warum sollten wir überhaupt Wörter zählen?... 83 5.3 MapReduce Überblick... 84 5.4 MapReduce... 85 5.5 MapReduce im Detail... 86 5.6 InputFormat & InputSplit... 87 5.7 InputFormat... 88 5.8 InputSplit... 89 5.9 RecordReader... 90 5.10 Mapper... 91 5.11 Partitioner... 92 5.12 Shuffle & Sort... 93 5.13 Reducer... 95 5.14 OutputFormat... 96 5.15 Combiner... 97 5.16 MapReduce im Detail... 98 6 Hive... 99 6.1 Agenda... 100 6.2 Was ist Apache Hive?... 101 6.3 Hive Architektur im Detail... 102 6.4 Hive Server Dienste... 103 6.5 Hive Clients und Interfaces... 104 6.6 HiveServer2 und Metastore Installation... 105 6.7 Hive Verteilung der Rollen... 106 6.8 Beeline Client... 107 6.9 Beeline Kommandozeilen Optionen... 108 6.10 Beeline Kommandos... 109 6.11 Beeline Hive Kommandos... 110 6.12 JDBC Interface... 111 6.13 Hive Datenbanken und Tabellen... 112 6.14 Tabellen anlegen und verwalten... 113 6.15 Location... 114 6.16 Managed Tables und External Tables... 115 6.17 Daten Laden... 116 6.18 Hive Datentypen... 117 6.19 Numerische Datentypen... 118 6.20 String Datentypen... 119 6.21 Datum / Zeit Datentypen... 120 6.22 Weitere primitive Datentypen... 121 6.23 Container Datentypen... 122 6.24 Partitionen... 123 6.25 Hive Partitionierung... 124 6.26 Statische Partitionierung... 125 Seite 4 Version: 1.07
6.27 Dynamische Partitionierung... 126 6.28 Funktionen... 127 6.29 Beispiele für Standard Hive Funktionen... 128 6.30 Weitere HiveQL Features im Überblick... 129 6.31 Weitere Hive Features im Überblick... 130 6.32 Hive Transaktionen... 131 6.33 Hive Execution Engines im Überblick... 132 7 Dateiformate für Hive und Hadoop... 133 7.1 Agenda... 134 7.2 Klassifizierung der Dateiformate... 135 7.3 Datei und Datensatz Formate in Hive... 136 7.4 Text Dateien (Delimiter Seperated Files)... 137 7.5 SequenceFile... 138 7.6 SequenceFile anlegen... 139 7.7 Avro Dateien... 140 7.8 Avro Schema... 141 7.9 Avro Datei anlegen... 142 7.10 Parquet Dateien... 143 7.11 Interne Struktur einer Parquet Datei... 144 7.12 Parquet Schema... 145 7.13 Parquet Datei anlegen... 146 7.14 ORC Dateien... 147 7.15 Interne Struktur einer ORC Datei... 148 7.16 ORC Datei anlegen... 149 7.17 Übersicht Dateiformate... 150 8 Spark... 151 8.1 Agenda... 152 8.2 Apache Spark Überblick... 153 8.3 Historie von Apache Spark... 154 8.4 Spark vs. MapReduce - Kein Entweder oder... 155 8.5 MapReduce I/O... 156 8.6 Spark I/O... 157 8.7 Spark vs. MapReduce - Zusammenfassung... 158 8.8 Apache Spark - Verteilung der Rollen... 159 8.9 Spark - Architektur... 160 8.10 Spark - Local Mode (Standalone)... 161 8.11 Spark - Client Mode (Master im Cluster)... 162 8.12 Spark - Cluster Mode... 163 8.13 Spark Modes mit YARN... 164 8.14 Spark - Interaktiv vs. Batch-Processing... 165 8.15 Ausführen von Skripten über die Spark-Shell... 166 8.16 RDD Grundlagen... 167 8.17 MaxTemperature mit Spark... 168 8.18 Erstellen von RDDs... 169 8.19 Operationen auf RDDs... 170 8.20 Anonyme Funktionen in Scala... 171 8.21 Operationen in Spark... 172 8.22 Transformations und Actions - Beispiele... 173 8.23 map() vs. flatmap()... 174 8.24 Umgang mit Ergebnissen... 175 8.25 Zwischenspeichern... 176 8.26 Zwischenspeichern... 177 8.27 Storage Level im Überblick... 178 8.28 Pair RDDs... 179 8.29 Transformations und Actions auf Pair RDDs... 180 8.30 Transformations auf Keys oder Values... 181 8.31 Beispiel: WordCount mit Spark... 182 8.32 Spark SQL... 183 Version: 1.07 Seite 5
8.33 Spark SQL Beispiel... 184 8.34 Spark Streaming... 185 9 YARN & Spark... 186 9.1 Agenda... 187 9.2 YARN - Yet Another Resource Negotiator... 188 9.3 Cluster Ressourcen... 189 9.4 YARN NodeManager Konfiguration... 190 9.5 YARN Scheduler Konfiguration... 191 9.6 YARN Web UI... 192 9.7 Spark Ressourcen... 193 9.8 Spark YARN Application Master Konfiguration... 194 9.9 Spark Executor Konfiguration... 195 9.10 Spark Driver Konfiguration... 196 9.11 Spark Deployment Konfiguration... 197 9.12 Spark on YARN - Beispiel... 198 9.13 Spark Speculation... 199 9.14 YARN Scheduler... 200 9.15 FIFO Scheduler... 201 9.16 Capacity Scheduler... 202 9.17 Fair Scheduler... 203 9.18 Fair Scheduler Konfiguration... 204 9.19 YARN Scheduler Web UI... 205 9.20 yarn Kommando... 206 10 Der Hadoop Zoo... 207 10.1 Agenda... 208 10.2 Pig... 209 10.3 Pig Verteilung der Rollen... 210 10.4 Pig Architektur Überblick... 211 10.5 Pig Latin Beispiel... 212 10.6 Pig Latin Befehle... 213 10.7 Hive vs. Pig vs. Spark SQL... 214 10.8 Sqoop... 215 10.9 Sqoop Verteilung der Rollen... 216 10.10 Sqoop 1 Architektur Überblick... 217 10.11 Sqoop Beispiele... 218 10.12 Sqoop Kommandos... 219 10.13 Sqoop Stärken und Einschränkungen... 220 10.14 ZooKeeper... 221 10.15 ZooKeeper Verteilung der Rollen... 222 10.16 ZooKeeper Architektur Überblick... 223 10.17 ZooKeeper Beispiele... 224 10.18 ZooKeeper Kommandos... 225 10.19 ZooKeeper Stärken und Einschränkungen... 226 10.20 Kafka... 227 10.21 Kafka Verteilung der Rollen... 228 10.22 Kafka Topics... 229 10.23 Partitionierung und Replikation... 230 10.24 Kafka als Datenquelle... 231 10.25 Topics verwalten... 232 10.26 Console Consumer und Producer... 233 10.27 Kafka Stärken und Einschränkungen... 234 10.28 HBase... 235 10.29 HBase Verteilung der Rollen... 236 10.30 HBase Datenmodellierung... 237 10.31 HBase Shell Beispiele... 238 10.32 HBase Stärken und Einschränkungen... 239 11 Architekturen und Anwendungsfälle... 240 Seite 6 Version: 1.07
11.1 Agenda... 241 11.2 Fraud Detection... 242 11.3 Zahlungsstrom Analyse... 243 11.4 Zahlungsstrom Analyse... 244 11.5 Analytic Workplace... 245 11.6 E-Commerce... 246 11.7 Lambda Architektur... 247 11.8 Kappa Architektur... 248 12 Cluster Planung... 249 12.1 Cluster Planung... 250 12.2 Workload... 251 12.3 Hochverfügbarkeit & Disaster Recovery - Risiken... 252 12.4 Hochverfügbarkeit & Disaster Recovery - Anforderungen... 253 12.5 Hadoop Hochverfügbarkeit... 254 12.6 Hadoop Core Hochverfügbarkeit... 255 12.7 Backup & Disaster Recovery... 256 12.8 Dienste und Abhängigkeiten... 257 12.9 Zuweisung von Rollen zu Hosts... 258 12.10 Cluster Hardware - HP ProLiant... 259 12.11 Cluster Hardware - Dell PowerEdge... 260 12.12 Cluster Hardware - Thomas Krenn... 261 12.13 Cluster Hardware - Erläuterungen... 262 12.14 Quellen... 263 13 Fazit... 264 13.1 Fazit... 265 13.2 Nächste Schritte?... 266 13.3 ORDIX News... 267 13.4 Literatur - Hadoop... 268 13.5 Literatur - Hadoop Zoo... 269 13.6 Literatur - Etc.... 270 13.7 Links... 271 Version: 1.07 Seite 7