Hadoop in a Nutshell HDFS, MapReduce & Ecosystem Oracle DWH Konferenz 2014 Carsten Herbe
Hadoop in a Nutshell
HDFS, MapReduce & Ecosystem
Oracle DWH Konferenz 2014
Carsten Herbe
© ©
Wir fokussieren mit unseren Services die Herausforderungen des Marktes und verbinden
Mensch und IT.
Business Intelligence
Customer Intelligence
• Customer based Analytics & Processes
• Churn Prediction and
Management
• Segmentation and
Clustering
Insurance
Reporting
• Standard & Adhoc
Reporting
• Dashboarding
• BI Office Integration
• Mobile BI & InMemory
• SAS Trainings for Business
Analysts
Insurance Analytics
• Predictive Models, Data Mining & Statistics
• Scorecarding
• Social Media Analytics
• Fraud & AML
BI & Risk Risk
• Solvency II (Standard
& internal Model)
• Regulatory Reporting
• Compliance
• Risk Management
Enterprise DWH
• Data Modeling & Integration & ETL
• Architecture: DWH & Data Marts
• Hadoop & Columnar DBs
• Data Quality &
Data Masking
Themenbereiche Über metafinanz
metafinanz gehört fast 25 Jahren zu den erfahrensten
Software- und Beratungshäusern mit Fokus auf die
Versicherungsbranche.
Mit einem Jahresumsatz von 270 Mio. EUR und 450
Mitarbeitern entwickeln wir für unsere Kunden
intelligente zukunftsorientierte Lösungen für
komplexe Herausforderungen
Head of Data Warehousing
Mehr als 8 Jahre DWH-Erfahrung
Oracle OWB Expertise
Certified Hadoop Developer
mail [email protected]
phone +49 89 360531 5039
Ihr Ansprechpartner
Carsten
Herbe
Seite 2 Hadoop in a Nutshell 28.02.2014
©
Inhalt
Seite 3
Was ist Hadoop? 1
Hadoop Distributed File System (HDFS) 2
MapReduce 3
Hadoop in a Nutshell
Hadoop Ökosystem 4
28.02.2014
Architektur & Projekte 5
Fazit 6
©
Apache Hadoop 1
© 28.02.2014 Hadoop in a Nutshell Seite 5
©
Die Apache Software hat sich mittlerweile als Quasi-Standard zur Speicherung und
Verarbeitung von Big Data etabliert.
Verwaltung riesiger Datenmengen von strukturierten und unstrukturierten Daten
Linear skarlierbarer Cluster (Speicher & Performance) von Standard-Servern
Performance - Der Code wird zu den Daten auf die entsprechenden Knoten verteilt
Ein großes Ökosystem an Tools rund um Hadoop entsteht (Graphen, SQL, …)
Open Source - Kommerzielle Distributionen erhältlich (Cloudera, Hortonworks, …).
Warum Hadoop?
Seite 6 Hadoop in a Nutshell 28.02.2014
© Seite 7
Apache Hadoop ist ein Framework für die verteilte Speicherung und Verarbeitung großer
Datenmengen basierend auf Konzepten von Google.
Skalierbare
Rechenkapazität
Hadoop MapReduce
Hadoop Distributed
FileSystem (HDFS)
Skalierbare
Speicherkapazität
Hadoop in a Nutshell 28.02.2014
1
2
1
2
3
Was ist Hadoop?
©
Distributionen enthalten das Hadoop Core und die wichtigsten Komponenten des Hadoop
Ökosystems. Sie unterscheiden sich in zusätzlichen (teilw. kommerziellen) Komponenten.
Hadoop in a Nutshell Seite 8
Hadoop Distributoren
28.02.2014
Elastic MapReduce
©
Ein Hadoop Cluster besteht aus Commodity Servern. Use Case abhängig sind
Hauptspeicher, Festplattenspeicher und Netzwerk.
Hardware
DataNode
64-128 GB Hauptspeicher (ggfs. bis zu 512GB)
2 quad-/hex-/octo-core CPUs, 2-2.5GHz
8–14 1TB Festplatten, JBOD-Konfiguration
Bonded Gigabit Ethernet oder 10 Gigabit Ethernet
Hadoop in a Nutshell Seite 9 28.02.2014
Quelle: http://blog.cloudera.com
©
Auch wenn man strukturierte Daten in Hadoop speichern kann – Hadoop ist keine
relationale Datenbank.
Hadoop ist keine Datenbank
Verarbeitung un-, teil- oder strukturierter Daten
Schema on Read
Write Once Read Many
Geringe Datenintegrität
Linear erweiterbar
Hadoop
Verarbeitung strukturierter Daten
Schema on Write
Write Read Update Many Times
Hohe Datenintegrität
Nicht linear erweiterbar
Oracle
Hadoop in a Nutshell Seite 10 28.02.2014
©
HDFS 2
©
Das HDFS ist ein verteiltes Dateisystem und bildet die Basis für die BigData-Verarbeitung
mit Hadoop.
Definition
HDFS = Hadoop Distributed File System
Zuständig für die redundante Speicherung großer Datenmengen
in einem Cluster unter Nutzung von Commodity-Hardware
(einfache, günstige Rechner)
Implementiert in Java auf Grundlage von Google‘s GFS.
Liegt über einem nativen Dateisystem (wie ext3, ext4 oder xfs)
Hadoop in a Nutshell Seite 12 28.02.2014
©
Cluster
Das Hadoop Distributed File System (HDFS) speichert große Dateien durch Aufteilung in
Blöcke und verhindert Datenverlust durch Replikation.
Hadoop in a Nutshell Seite 13
278
MB
128
MB
128
MB
22 MB
$ hadoop fs –put doc.txt
1 2
3 4 5
6 7 8
3;1;5
3;7;8
6;4;2
Client
x3
x3
x3
NameNode
28.02.2014
©
HDFS ist für die redundante Speicherung von großen Dateien ausgelegt, die write-once-
read-many Daten enthalten.
Eigenschaften
Beste Performance bei der Speicherung von großen Dateien: Besser weniger
große Dateien als viele kleine Dateien!
Dateien in HDFS sind nicht änderbar (write once read many), d.h. es sind keine
wahlfreien Schreibzugriffe erlaubt.
Seit Hadoop 2.0 ist es möglich, Daten an Dateien anzuhängen (append).
HDFS ist optimiert für das sequenzielle Lesen großer Dateien.
Dateien werden in HDFS auf Blöcke aufgesplittet (Default-Blockgröße: 128 MB).
Jeder Block wird redundant im Cluster gespeichert (Default: 3 fache
Speicherung).
Unterschiedliche Blöcke der gleichen Datei werden auf unterschiedlichen
Knoten (und ggf. Racks) gespeichert.
Hadoop in a Nutshell Seite 14 28.02.2014
©
Alle Metainformationen über die Daten werden im Speicher des NameNodes verwaltet.
NameNode
Der NameNode hält die Metadaten (Namespaces) für das HDFS:
Welche Datei besteht aus welchen Blöcken?
Auf welchem Knoten liegt welcher Block?
Der NameNode Daemon muss jederzeit laufen, da ohne diese Metadaten nicht
auf die Daten im Cluster zugegriffen werden kann.
Um schnelleren Zugriff auf diese Daten zu haben, werden alle Daten im
NameNode im RAM vorgehalten.
Hadoop in a Nutshell Seite 15 28.02.2014
©
Im Cluster gibt es zwei unterschiedliche Typen von Nodes: viele DataNodes zur
Datenspeicherung und -verarbeitung und wenige MasterNodes mit zentralen Diensten.
MasterNodes
Neben dem NameNode gibt es noch weitere Server-Dienste
Diese laufen auf sogenannten MasterNodes
Auf den MasterNodes werden keine HDFS Daten gespeichert
Für einige dieser Server-Dienste gibt es schon Hochverfügbarkeitslösungen
Beispiele:
NameNode (ist ein Dienst auf einem MasterNode)
ResourceManager (für die Verwaltung von Jobs)
HiverServer (für SQL-Abfragen, lernen wir noch genauer kennen)
Hadoop in a Nutshell Seite 16 28.02.2014
©
Auf den DataNodes werden die Daten in Form von Blöcken gespeichert.
DataNode
In einem typischen Hadoop-Cluster gibt es sehr viele DataNodes.
Auf den DataNodes werden die Daten in Form von Blöcken gespeichert – ein
Block wird bei Verwendung der Standardkonfiguration auf drei Knoten
redundant abgelegt.
Die DataNodes laufen typischerweise auf Commodity-Hardware.
Um ein Rebalancing zu ermöglichen (z.B. bei Ausfall eines DataNodes), sollte
die Gesamtgröße des HDFS 80% des insgesamt vorhandenen
Speicherplatzes nicht überschreiten
Hadoop in a Nutshell Seite 17 28.02.2014
©
MapReduce 3
©
Client
Cluster
Der Code wird zu den Daten auf die entsprechende Knoten gebracht und dort lokal
ausgeführt (Map). Diese Zwischenergebnisse werden im Reducer zusammengefasst.
Grundidee MapReduce
28.02.2014 Hadoop in a Nutshell Seite 19
protected void map(...)
throws …{
String line = value.toString();
for (char character :
line.toCharArray()) {
...
Resource
Manager
1 2
3 4 5
6 7 8
Name
Node
Daten
278 MB
128
MB
128
MB
22 MB x3
x3
x3
©
Reducer
Reducer
Mapper
Mapper
Mapper
Hadoop
besteht aus
HDFS und
MapReduce.
HDFS ist ein
Filesystem.
MapReduce
ist ein
Framework.
Mit
MapReduce
lassen sich
Daten in
HDFS
verarbeiten.
Hadoop ist
OpenSource
.
0, Hadoop
besteht aus
HDFS und
MapReduce.
38, HDFS ist
ein Filesystem.
hdfs,1
ist,1
ein,1
filesystem,1
mapreduce,1
ist,1
ein,1
framework,1
mit,1
mapreduce,1
lassen,1
sich,1
daten,1
in,1
hdfs,1
verarbeiten,1
62, MapReduce
ist ein
Framework.
90, Mit
MapReduce
lassen sich
Daten in HDFS
verarbeiten.
142, Hadoop ist
Open Source.
hadoop,1
ist,1
open,1
source,1
hadoop,1
besteht,1
aus,1
hfds,1
und,1
mapreduce,1
aus,1
besteht,1
daten,1
ein,2
filesystem,1
framework,1
hadoop,2
hdfs,3
Map Input
(Key, Value):
Offset, Textzeile
Map Output
(Key, Value):
Wort, Häufigkeit
Pa
rtit
ion
P
art
itio
n
Pa
rtit
ion
in,1
ist,3
lassen,1
mapreduce,3
mit,1
open,1
sich,1
source,1
und,1
verarbeiten,1
aus,1
besteht,1
daten,1
ein,1,1
filesystem,1
framework,1
hadoop,1,1
hdfs,1,1,1
So
rt
in,1
ist,1,1,1
lassen,1
mapreduce,1,1,1
mit,1
open,1
sich,1
source,1
und,1
verarbeiten,1
So
rt
Reducer Input
(Key, Value):
Wort, Häufigkeit
Reducer Output
(Key, Value):
Wort, Häufigkeit
HDFS Block HDFS File
Hadoop
besteht aus
HDFS und
MapReduce.
HDFS ist ein
Filesystem.
MapReduce
ist ein
Framework.
Mit
MapReduce
lassen sich
Daten in
HDFS
verarbeiten.
Hadoop ist
Open
Source.
Ergebnis
Hadoop in a Nutshell Seite 20 28.02.2014
©
Hadoop Ökosystem 4
©
Für viele (spezielle) Anwendungsfälle gibt es entsprechende Tools. Hier ein Auszug …
28.02.2014 Hadoop in a Nutshell Seite 22
• RDBMS-like Metadaten
• SQL-Abfragen
• Generiert MR-Job(-Ketten): Batch
• Anbindung BI-Tools
SQL für Hadoop - HiveQL
• Ad-hoc SQL Analysen (kein MapReduce)
• Eigener Dienst auf jedem DataNode
• Beschränkung durch verfügbaren RAM
Impala: Interaktive Datenanalyse
• Datenaustausch Hadoop und SQL Datenbanken
RDBMS Datenaustausch
• Einfache High Level Skript Sprache
• Fokus auf „ETL“
• Erweiterbar durch eigene Funktionalitäten
PIG - Skripting
• Sammeln von Log Files
• Laden von log files nach Hadoop
Log File Verarbeitung
• Machine learning library
Data Mining
• Netzwerkanalyse
• Graphentheorie
• Generiert MapReduce Jobs
Graphenverarbeitung
• Schneller Random R/W Zugriff
• Hält riesige Tabellen verteilt
in.memory
• Warenkörbe, Benutzerprofile, …
NoSQL Datenbank
©
Das Hadoop-Ökosystem besteht aus einer Vielzahl von Tools und Frameworks und wird
ständig durch neue Projekte erweitert.
HttpFS
Ambari HCatalog
Cascalog
Cloudera Manager
FuseDFS
Parquet
SequenceFiles Big Data Connectors
28.02.2014 Hadoop in a Nutshell Seite 23
©
Projekte & Architektur 5
©
Je nach Projekttyp ähneln Hadoop Projekte mehr oder weniger klassischen BI-Projekten.
Hadoop Projekttypen
Big Data
Exploration
Sammlung von Daten aus unterschiedlichsten Quellen
Verknüpfung verschiedenster Datentypen
Data Mining (→ Data Scientist)
DWH Extension Verdichtung von neuen Big Data Informationen
Weiterleitung der Ergebnisse an das DWH
RDBMS Offload Offload ETL-Prozesse
Offload Analysen
Online Archivierung von Daten
28.02.2014 Hadoop in a Nutshell Seite 25
©
Unterschiedliche Ansätze und Vorgehensweisen von DWH/BI und Big Data.
28.02.2014 Hadoop in a Nutshell Seite 26
Quelle: IBM Corporation
©
Oracle DB als Data Warehouse und Hadoop als Big Data Store sind nicht isoliert zu sehen
sondern ergänzen sich. Aus der Verknüpfung beider Welten entstehen Mehrwerte.
Hadoop
APPs APPs Documents,
files, …
Unstructured
data
Machine
generated data
OLTP
Applications
Datamart
OLAP
DWH
APPs APPs Reporting
Analytics
Data mining
In memory BI
Analytics
In memory BI
Data mining
Lan
din
g a
rea
En
han
ce
d a
rea
D
B a
rea
Beispiel Big Data Architektur
28.02.2014 Hadoop in a Nutshell Seite 27
©
Fazit 6
©
Aus neuen Datenquellen, mit neuen Technologien und mit neuen Projektansätzen
erfolgreich neue Business Cases umsetzen und in das Unternehmen integrieren.
28.02.2014 Hadoop in a Nutshell Seite 29
©
Die aktuellen Stellenangebote geben ein gutes Bild über die hohen Anforderungen an die
Position eines Data Scientists ab.
Sie sind nicht alleine auf der Suche nach Talenten …
Wer sucht?
Hadoop, MapReduce, Hive, HBase
Couch
Perl, Bash, C#, Ruby, Python, Octave
Java, C++
XML, JSON
Matlab, R
Oracle, MS SQL, MySQL, Teradata,
NoSQL
Cognos, SAS, Microstrategy,
Business Objects, QlikView, Tableau
TextMining, DataMining
… mit überdurchschittlichem
Hochschulabschluss, … mit
ausgeprägtem analytischem Bezug
Mit welchen Skills? Und was bieten Sie?
?
28.02.2014 Hadoop in a Nutshell Seite 30
©
Wir bieten offene Trainings an sowie maßgeschneiderte Trainings für individuelle Kunden.
metafinanz training
Einführung Hadoop (1 Tag)
Einführung Oracle in-memory Datenbank TimesTen
Data Warehousing & Dimensionale Modellierung
Oracle SQL Tuning
OWB Skripting mit OMB*Plus
Oracle Warehousebuilder 11.2 New Features
Einführung in Oracle: Architektur, SQL und PL/SQL
Mehr Information unter http://www.metafinanz.de/news/schulungen
All trainings are also available in English on request.
Hadoop Intensiv-Entwickler Training (3 Tage)
28.02.2014 Hadoop in a Nutshell Seite 31
©
Einblicke in das Hadoop API, Deep Dive in den MapReduce-Code und Diskussion mit
unseren Experten …
Lust auf mehr Details?
28.02.2014 Hadoop in a Nutshell Seite 32
Live MapReduce Demo hier auf der Konferenz!
©
Hadoop in a Nutshell – HDFS, MapReduce & Ökosystem
Fragen? Jetzt …
Carsten Herbe
Head of Data Warehousing
mail [email protected]
phone +49 89 360531 5039
… oder später?
Hadoop in a Nutshell
Downloads unter
dwh.metafinanz.de
DWH & Hadoop Expertise
http://dwh.metafinanz.de
Besuchen Sie uns auch auf:
metafinanz Informationssysteme GmbH
Leopoldstraße 146
D-80804 München
Phone: +49 89 360531 - 0
Fax: +49 89 350531 - 5015
Email: [email protected]
www.metafinanz.de
Vielen Dank für Ihre Aufmerksamkeit!
©
MapReduce API A1
©
Die map()-Methode ist die einzige Methode der Basisklasse, die implementiert werden
muss.
Seite 36
package de.metafinanz.hadoop.wordcount;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.util.*;
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line, " \t\n\r\f,.:;?![]')(");
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
context.write(word, one);
}
}
}
map()-Methode überschreiben
Parameter:
• Schlüssel (Byteoffset des Zeilenbeginns innerhalb der Datei)
• Wert (Text-Zeile)
• Context (z.B. für Output)
Hadoop Live Demo 28.02.2014
0, Hadoop besteht aus HDFS und MapReduce.
©
package de.metafinanz.hadoop.wordcount;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.util.*;
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line, " \t\n\r\f,.:;?![]')(");
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
context.write(word, one);
}
}
}
In dem Mapper werden Input-Key und –Value verarbeitet. Hier kann beliebige Logik
implementiert werden.
Seite 37
Verarbeitungslogik:
• Textzeile aus der Übergabe extrahieren
• Übersetzung der Textzeile in Tokens
• Iterieren durch alle Wörter einer Textzeile und
Erstellung der Key-Value-Paare
Hadoop Live Demo 28.02.2014
©
package de.metafinanz.hadoop.wordcount;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.util.*;
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line, " \t\n\r\f,.:;?![]')(");
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
context.write(word, one);
}
}
}
Als Ergebnis des Mappers werden Key-Value-Paare erzeugt.
Seite 38
Output schreiben: context.write(Schlüssel, Wert)
Es müssen die im Klassen-Template angegebenen
Hadoop-Datentypen verwendet werden.
Hadoop Live Demo 28.02.2014
hadoop,1
besteht,1
aus,1
hfds,1
und,1
mapreduce,1
©
Als einzige Methode der Basisklasse muss die Methode reduce() implementiert werden.
Seite 39
package de.metafinanz.hadoop.wordcount;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}
}
reduce()-Methode überschreiben
Parameter:
• Schlüssel (einzelnes Wort)
• Iterable-Objekt mit Werten, die zum Schlüssel abgelegt sind
(Anzahl)
• Context (z.B. für Output)
Hadoop Live Demo 28.02.2014
aus,1
besteht,1
daten,1
ein,1,1
filesystem,1
framework,1
hadoop,1,1
hdfs,1,1,1
©
Im Reducer werden die zu jeweils einem Key gehörenden Values aggregiert.
Seite 40
package de.metafinanz.hadoop.wordcount;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}
}
Hadoop Live Demo 28.02.2014
Verarbeitungslogik:
• Alle Werte zu einem Schlüssel addieren
©
Auch die Ergebnisse des Reducers ist wieder ein Key-Value-Paar. Pro Reducer wird eine
Ergebnis-Datei erzeugt.
Seite 41
package de.metafinanz.hadoop.wordcount;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}
}
Hadoop Live Demo 28.02.2014
Output schreiben: context.write(Schlüssel, Wert)
Es müssen die im Klassen-Template angegebenen Hadoop-
Datentypen verwendet werden
aus,1
besteht,1
daten,1
ein,2
filesystem,1
framework,1
hadoop,2
hdfs,3