Prezi

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in the manual

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

MongoDB + Hadoop: Big Data Solyanka

No description
by Daniel Bartl on 10 November 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of MongoDB + Hadoop: Big Data Solyanka

MongoDB + Hadoop:
Big Data Solyanka

Was ist Big Data?
Bernd Zuther
JEE Spring Enterprise Specialist

Big Data - Begriff
Big Data bezeichnet Methoden und Technologien
für die hochskalierbare Erfassung, Speicherung und Analyse polystrukturierter Daten.
Big Data - Definition
Big Data
bezeichnet Methoden und Technologien
für die hochskalierbare
Erfassung, Speicherung und Analyse von polystrukturierter Daten.
Technologien für neue Herrausforderungen
ETL & ELT
API (JDBC ...)
Big Data
Datenmanagement
Big Data
Analytics
(No)SQL
Auswertung
Zugriff
Analytik
Speicherung
Daten-
Integration
Daten-
quellen
Polystrukturierte Daten
BI Anwenderwerkzeuge
Analytische Anwendungen
Analytische Infrastruktur für "Big Data"
Nicht nur Tools
Hohe Datenmengen
Hohe Anwenderzahlen
Komplexe Abfragen
Schnelle Aktualisierung
Alle Ebenen einer
analytischen Infrastruktur.
Evtl. nur kurzfristige Speicherung
Strukturierte Daten, z.B. Datenbanken oder Dateien
Semistrukturierte Daten, z.B. XML, HTML, Sensor-Daten
Unstrukturierte Daten, z.B. Dokumente, Blogs, Bilder
Warum MongoDB und Hadoop?
Soljanka ist
ein säuerlich-scharfer
Fleisch-Eintopf
aus Osteuropa.

[BARC]
{

"_id"
: ObjectId(
"4f886440744eab3cbfd4c2e8"
),

"orderId"
: NumberLong(
314064
),

"orderItems"
: [
{

"pizza"
: {

"_id"
: ObjectId(
"4f861500744e329ae6b2059b"
),

"articleId"
:
"6"
,

"description"
:
"mit Vorderschinken"
,

"name"
:
"Pizza Prosciutto"
,

"urlname"
:
"pizza-prosciutto"
,

"price"
:
4.9
},

"toppings"
: [
/* ... */
]
}
],

"orderDate"
: ISODate(
"2012-04-13T17:37:04.029Z"
),

"deliveryAddress"
: {

"firstname"
:
"Bernd"
,

"lastname"
:
"Zuther"
,

"street"
:
"Lindwurmstraße 97"
,

"zip"
:
"80337"
,

"city"
:
" München "
},

"user"
: {

"$ref"
:
"user"
,

"$id"
: ObjectId(
"4f861500744e329ae6b205b1"
)
}
}
Pizza-Bestellungen
Pizza-Bestellungen
Viele Bestellungen
Primär-Schüssel ist Datum einer
Bestellung
Google File System (inspirierte Hadoop’s HDFS) und MongoDB’s Sharding skalieren mit Chunks

Große Daten werden in kleine Teile zerbrochen und auf verschiedene Nodes verteilt
Jede Node hält mehrere Chunks
Daten zu groß/Node voll -> neue Verteilung
Node 1
Node 2
Chuck
2
Chunk
3
Chuck
1
Chunk
4
Was muss gemacht werden, um große Datenmengen effizient lesen und schreiben zu können?

Wie können so große Datenmengen bearbeitet werden?
Was muss gemacht werden, um große Datenmengen effizient lesen und schreiben zu können?

Wie können so große Datenmengen bearbeitet werden?
Node 1
Node 2
End-Ergebnis
{

"_id"
: ObjectId(
"4f886440744eab3cbfd4c2e8"
),

"orderId"
: NumberLong(
314064
),

"orderItems"
: [
{

"pizza"
: {

"_id"
: ObjectId(
"4f861500744e329ae6b2059b"
),

"articleId"
:
"6"
,

"description"
:
"mit Vorderschinken"
,

"name"
:
"Pizza Prosciutto"
,

"urlname"
:
"pizza-prosciutto"
,

"price"
:
4.9
},

"toppings"
: [
/* ... */
]
}
],

"orderDate"
: ISODate(
"2012-04-13T17:37:04.029Z"
),

"deliveryAddress"
: {

"firstname"
:
"Bernd"
,

"lastname"
:
"Zuther"
,

"street"
:
"Lindwurmstraße 97"
,

"zip"
:
"80337"
,

"city"
:
" München "
},

"user"
: {

"$ref"
:
"user"
,

"$id"
: ObjectId(
"4f861500744e329ae6b205b1"
)
}
}
KEY
VALUE
Pizza: Margherita
Datum: 2012-07-05
Preis: 3,80 €
Pizza: Margherita
Datum: 2012-07-05
Preis: 3,80 €
Pizza: Margherita
Datum: 2012-07-06
Preis: 3,80 €
Pizza: Funghi
Datum: 2012-07-05
Preis: 4,50 €
Pizza: Margherita
Datum: 2012-07-05
Preis: 3,80 €
Pizza: Margherita
Datum: 2012-07-05
Preis: 3,80 €
Pizza: Margherita
Datum: 2012-07-06
Preis: 3,80 €
Pizza: Funghi
Datum: 2012-07-05
Preis: 4,50 €
Map-Funktion
emit(k, v)
Map-Phase
Map-Funktion bricht ein Dokument herunter in Key (Grouping) & Value
Key: Margherita, 2012-07-05
values: [
{count : 1, price : 3.8},
{count : 1, price : 3.8}
]
Group/Shuffle-Phase
gruppiert Keys zusammen und erstellt ein Array
(Phase läuft automatisch während M/R ab)
Key: Margherita, 2012-07-06
values: [
{count : 1, price : 3.8}
]
Key: Fungi, 2012-07-05
values: [
{count : 1, price : 4.5}
]
Key: Margherita, 2012-07-05
values: [
{count : 1, price : 3.8},
{count : 1, price : 3.8}
]
Reduce-Phase
Key: Margherita, 2012-07-06
values: [
{count : 1, price : 3.8}
]
Key: Fungi, 2012-07-05
values: [
{count : 1, price : 4.5}
]
Reduce-Funktion
aggregieren der Werte
return (result)
Reduce-Funktion reduziert die Liste von Werten zu einen einzelnen Wert bzw. Dokument
Key: Margherita, 2012-07-05
value: {count : 2, price : 7.6}
Key: Margherita, 2012-07-06
value: {count : 1, price : 3.8}
Key: Fungi 2012-07-05
value: {count : 1, price : 4.6}
Was muss gemacht werden, um große Datenmengen effizient lesen und schreiben zu können?

Wie können so groß Datenmengen bearbeitet werden?
Warum nun Hadoop???
Separation of Concern
Datenspeicherung und Datenverarbeitung sind unterschiedliche Aufgaben

MongoDB hat beim Bearbeiten großer Datenmengen Schwierigkeiten
Limitierungen durch den JS-Interpreter

Hadoop wurde entwickelt um große Datenmengen skalierbar bearbeiten zu können.
Viele Bestellungen
Primär-Schüssel ist Datum einer
Bestellung
Nur
ein

Map-Reduce
Thread
verfügbar
Map-Reduce auf einem
einzelnen MongoDB-Server
Nur
ein

Map-Reduce
Thread
verfügbar
Map-Reduce mit
MongoDB-Sharding
Nur
ein

Map-Reduce
Thread
verfügbar
Nur
ein

Map-Reduce
Thread
verfügbar
Node 1
Node 2
Node 3
Zusammenfassung
MongoDB - Java-Script
nur Core des Prozessors wird genutzt

wenige Datentypen

keine Bibliotheken für komplexe Berechnugen

kann M/R Function nur integrativ testen

schwer zu debuggen
Hadoop
alle Core des Prozessors werden genutzt

viele Datentypen

alle JVM-Sprachen anwendbar (Scala, ...)

Bibliotheken für komplexe Berechnugen

kann M/R Function auch einzeln Unit testen

debugbar
Map-Reduce mit
MongoDB-Sharding + Hadoop
Viele Bestellungen
Primär-Schüssel ist Datum einer
Bestellung
Ein
Map-Reduce
Thread
pro Core
Map-Reduce auf einem
einzelnen MongoDB-Server + Hadoop
Hadoop
Ein
Map-Reduce
Thread
pro Core
Ein
Map-Reduce
Thread
pro Core
Ein
Map-Reduce
Thread
pro Core
Viele Bestellungen
Primär-Schüssel ist Datum einer
Bestellung
Ein
Map-Reduce
Thread
pro Core
Hadoop
Ein
Map-Reduce
Thread
pro Core
Ein
Map-Reduce
Thread
pro Core
Ein
Map-Reduce
Thread
pro Core
Viele Bestellungen
Primär-Schüssel ist Datum einer
Bestellung
Ein
Map-Reduce
Thread
pro Core
Ein
Map-Reduce
Thread
pro Core
Ein
Map-Reduce
Thread
pro Core
Ein
Map-Reduce
Thread
pro Core
Wie funktioniert
der MongoDB Hadoop Adapter?

Hybride Welt
Online
Offline
Web-Server
JSON
JSON
JSON
...
Application Server
Service #2
Application Server
Service #1
Mongos
JSON
SQL
Brendan W. McAdams @rit

"And once again boys and girls, Hadoop is *not* a real time processing system. Batch != Real Time"
...
...
...
...
...
...
...
...
Johannes Brandstetter
9:50 - 10:30 Lean & Agile with MongoDB
12:15 - 12:55 Pizza "Quattro Shardoni"
Tom Zorc
Bernd Zuther
BallSaal A
BallSaal A
MongoDB Munich 2012
HILTON MUNICH PARK HOTEL
AM TUCHERPARK 7
80538 MÜNCHEN
16. Oktober 2012
Performance
30GB Input-Data

MongoDB non-shard:
1x m2.4xlarge
68.4GB RAM, 26 EC2 Compute-Unit, 64-Bit

MongoDB sharded:
5x m1.xlarge
15GB RAM, 8 EC2 Compute-Unit, 64-Bit

Hadoop:
15x m2.4xlarge
68.4GB RAM, 26 EC2 Compute-Unit, 64-Bit
Node 1
Node 2
Chunk
2
Chunk
1
Chunk
5
http://careers.comsysto.com
Chunk
3
Chunk
4
See the full transcript