cloud data management - uni-leipzig.de...cdm ss 19, dr. eric peukert hive-ql query wird in dag...
TRANSCRIPT
Universität Leipzig, Institut für Informatikhttp://dbs.uni-leipzig.de
Cloud Data ManagementKapitel 5: MapReduce und
Datenbanken (Teil2)
Dr. Eric PeukertSommersemester 2019
CDM SS 19, Dr. Eric Peukert
https://www.datanami.com/2019/06/13/big-data-meltdown-how-unclean-unlabeled-and-poorly-managed-data-dooms-ai/
News
CDM SS 19, Dr. Eric Peukert
Hive-QL Query wird in DAG (directed acyclic graph) übersetztKnoten: Operatoren
TableScanSelect, ExtractFilterJoin, MapJoin, Sorted Merge Map JoinGroupBy, LimitUnion, CollectFileSink, HashTableSink, ReduceSinkUDTF
Graph repräsentiert DatenflussMehrere (parallele) Map/Reduce Phasen möglich
Hive-QL: Anfrageübersetzung
CDM SS 19, Dr. Eric Peukert
Beispiel
SELECT *
FROM status_updates
WHERE status
LIKE ‘michael jackson’
Hive-QL: Anfrageübersetzung (Beispiel)
CDM SS 19, Dr. Eric Peukert
SELECT COUNT(*)
FROM status_updates
WHERE ds=‘2009-08-01’
Hive: Anfrageübersetzung (2)
Updates/Nutzer
Alle Updates
Zwischenspeicherndes Map-Outputs
CDM SS 19, Dr. Eric Peukert
Anfragepläne können sehr komplex werdenAnfrageoptimierung
Verwerfen nicht benötigter SpaltenBerücksichtigung von (Outer-)Join-und Selektionsattributen
Frühes Anwenden von SelektionsprädikatenVerwerfen nicht benötigter Partitionen
Hive: Anfrageübersetzung und -optimierung
CDM SS 19, Dr. Eric Peukert
Hive: Join
userid age ...
111 25 ...
222 32 ...
pageId userId ...
1 111 ...
2 111 ...
1 222 ...
key value111 <R,1>
111 <R,2>
222 <R,1>
key value111 <S,25>
222 <S,32>
key value111 <R,1>
111 <R,2>
111 <S,25>
key value222 <R,1>
222 <S,32>
pageId age
1 25
2 25
pageId age
1 32
page_view
user map
shuf
fle +
sor
t
redu
ce
INSERT INTO TABLE pv_users SELECT pv.pageid, u.ageFROM page_view pv JOIN user u ON (pv.userid = u.userid)
pv_users
• Key = Join-Key, Value mit Flag (R oder S) zur Unterscheidung d. Tabellen• Mehrweg-Join mit selbem Join-Key ® 1 MapReduce job• Mehrweg-Join mit n Join-Keys ® n MapReduce job
= Shuffle Join (reduce-side join)
also look at:http://henning.kropponline.de/2016/10/09/hive-join-strategies/
CDM SS 19, Dr. Eric Peukert
MapJoin (aka Broadcast Join)kleine Tabelle als zusätzlicher Map-Input kann vorher zu Hash-Tabelle umgewandelt werden (ggf. zusätzlich komprimiert)kein Reduce notwendig
Dynamische Join-EntscheidungBestimmung großer/kleiner Tabelle zur LaufzeitAnwendung von MapJoin falls kleine Tabelle(n) “klein genug”
Join: Performanzsteigerung durch MapJoin
pageId userId ...
1 111 ...
2 111 ...
1 222 ...
page_view
userId pageIds
111 [1,2]
222 [1]
HashTable
userid age ...111 25 ...
222 32 ...
user
map
pageId age
1 25
2 25
1 32
pv_users
CDM SS 19, Dr. Eric Peukert
Key = Gruppierungsattribute Reduce = Aggregationsfunktion
“Voraggregation” durch Combiner in Map möglich (z.B(<1,25>,2))
Hive: Group ByINSERT INTO TABLE pageid_age_sumSELECT pageid, age, count(*)FROM pv_usersGROUP BY pageid, age
pageId age
1 25
1 25
pv_users
pageId age
1 25
2 32
key value
key value
map
shuf
fle +
sor
t
redu
ce
key value
key value
pageId age count
pageId age count
pageid_age_sum
CDM SS 19, Dr. Eric Peukert
Key = Gruppierungsattribute Reduce = Aggregationsfunktion
“Voraggregation” durch Combiner in Map möglich (z.B(<1,25>,2))
Hive: Group ByINSERT INTO TABLE pageid_age_sumSELECT pageid, age, count(*)FROM pv_usersGROUP BY pageid, age
pageId age
1 25
1 25
pv_users
pageId age
1 25
2 32
key value(1,25) 2
key value(1,25) 1
(2,32)1
map
shuf
fle +
sor
t
redu
ce
key value
key value
pageId age count
pageId age count
pageid_age_sum
CDM SS 19, Dr. Eric Peukert
Key = Gruppierungsattribute Reduce = Aggregationsfunktion
“Voraggregation” durch Combiner in Map möglich (z.B(<1,25>,2))
Hive: Group ByINSERT INTO TABLE pageid_age_sumSELECT pageid, age, count(*)FROM pv_usersGROUP BY pageid, age
pageId age
1 25
1 25
pv_users
pageId age
1 25
2 32
key value(1,25) 2
key value(1,25) 1
(2,32)1
map
shuf
fle +
sor
t
redu
ce
key value(1,25) 2
(1,25) 1
key value(2,32) 1
pageId age count
1 25 3
pageId age count
2 32 1
pageid_age_sum
CDM SS 19, Dr. Eric Peukert
Verwendung von Skripten in HiveQL-Anfragen mittels TRANSFORM-Operator
Daten(de-)serialisierungAustausch per stdin/stdout
Nutzer-definierte Skripte
firstletter.py
import sys for line in sys.stdin:
line = line.strip() id, title = line.split('\t') firstl = title[:1] print '\t'.join([id, title, firstl])
ADD FILE firstletter.py;SELECT firstl, count(id) AS nFROM (SELECT TRANSFORM (id, title) USING 'python firstletter.py'AS id, title, firstl
FROM item ) fGROUP BY firstl;
id title1 Body Snatcher
2 Armageddon
3 AI
firstl nB 1
A 2
CDM SS 19, Dr. Eric Peukert
Sortierung durch zusätzlichen Reduce-StepSORT BY = Sortierung pro ReducerORDER BY = globale Sortierung = SORT BY mit nur einem Reducer
Hive: Sortierung
id title
1 Body Snatcher
2 Armageddon
3 AI
4 Vegas Vacation
5 Vermin
6 The Visitors
key val
B 1
A 1
A 1
V 1
V 1
T 1
key val
A 1
A 1
B 1
key val
T 1
V 1
V 1
key val
A 2
B 1
key val
T 1
V 2
map
1
shuf
fle +
sor
t
redu
ce1
key val
A 2
B 1
key val
V 2
T 1
redu
ce2
key val
A 2
V 2
B 1
T 1
redu
ce2
SELECT firstl, count(id) AS nFROM ... GROUP BY firstlSORT BY | ORDER BY n DESC
SORT BY
ORDER BY
CDM SS 19, Dr. Eric Peukert
System zur Verarbeitung großer, semi-strukturierter Daten auf Basis von Hadoop/MapReduceProzedurale High-Level-Skriptsprache: PigLatin
Nutzung von Variablen mit komplexe Datentypen (Tupel, Bag, Map)Skript-Ausführung
Pig-Skript wird geparst und ggf. optimiertTransformierung in MapReduce-WorkflowAusführung mittels Hadoop
VorteileVereinfachte Definition komplexer WorkflowsAutomatische Konfiguration/Tuning vom MR-Jobs / -WorkflowsOptionales Type-Checking falls Schema vorhanden
Pig: Übersicht
Quellen: Diese und nachfolgende Folien:http://www.slideshare.net/hadoop/practical-problem-solving-with-apache-hadoop-pighttp://www.slideshare.net/xefyr/pig-making-hadoop-easyhttp://pig.apache.org/docs/r0.10.0/
CDM SS 19, Dr. Eric Peukert
Webnutzungs-Analyse: „Die fünf am meisten besuchten Webseiten junger Nutzer (18-25 Jahre)“
Pig-Skript:
Pig: Beispiel
Users = load ‘users’ as (name, age);Fltrd = filter Users by age >= 18 and age <= 25; Pages = load ‘pages’ as (user, url);Jnd = join Fltrd by name, Pages by user;Grpd = group Jnd by url;Smmd = foreach Grpd generate group, COUNT(Jnd) as clicks;Srtd = order Smmd by clicks desc;Top5 = limit Srtd 5;store Top5 into ‘top5sites’;
CDM SS 19, Dr. Eric Peukert
Load / Store / DumpDaten von File System lesen / in FS schreiben / auf stdout ausgeben
Foreach … GenerateAnwendung auf jeden Datensatz ® Generierung neuer DatensätzeÄhnlich: map
Group Gruppierung von Datensätzen nach Schlüssel
JoinJoin zweier oder mehr EingabedateienUnterstützung verschiedener Join-Implementierungen inkl. Skew-Behandlung
Weitere: Stream, Order, Filter, Distinct, Sample, Split, … Zusätzlich: String-Funktionen, mathematische Funktionen (count, avg, …), Diagnose-Methoden, UDF-Handling, …
Pig: Relationale Operatoren
CDM SS 19, Dr. Eric Peukert
AnwendungsdomänenPig: Datenpipelines, Iterative Berechnungen, …Hive: OLAP-artige Anfragen, BI Tools, …
Pig geeignet zur Programmierung von ETL-StreckenDatenvorverarbeitung für Data Warehousing
Pig: Abgrenzung SQL und HivePig SQL
Definition Prozedural Deklarativ
Schema Optional Voraussetzung
Workloads „Scan“-orientiert OLTP+OLAP
Query-Performanz
mittel, geringe Optimierungen ++, Optimierungen
CDM SS 19, Dr. Eric Peukert
MapReduce ist kein DBMS, kann aber zur “datenbank-artigen” Verarbeitung großer Datenmengen genutzt werden
SQL-Anfragen können automatisch in MapReduce-Programme transformiert werdenMR kann flexibel auf die (semi-strukturierten) Originaldaten (d.h. Dateien) zugreifen
RDBMS sind “pro Knoten” effizienter als MapReduce... aber MapReduce skaliert deutlich besser und ist fehlertoleranter
Kombination der Stärken von RDBMS und MapReducesinnvoll
Zusammenfassung
CDM SS 19, Dr. Eric Peukert
[MRJoin] Blanas et al.: A Comparison of Join Algorithms for Log Processing in MapReduce. SIGMOD 2010[Hive] http://hadoop.apache.org/hive/[Hive1] http://www.slideshare.net/zshao/hive-data-warehousing-analytics-on-hadoop-presentation[Hive2] http://www.slideshare.net/ragho/hive-user-meeting-august-2009-facebook[Hive3] http://www.slideshare.net/jsichi/hive-evolution-apachecon-2010
Quellen & Literatur