DBII-8-freigeschaltet PDF
Document Details
Uploaded by FlatterForgetMeNot
FH Aachen University of Applied Sciences
Tags
Summary
These lecture notes cover MapReduce, a programming model for parallel data processing using the Hadoop framework. The document includes illustrative examples, covering fundamental concepts and practical applications.
Full Transcript
Wir haben mit HDFS und HBase ein höchst verteiltes System. Wie können wir die Verteiltheit des Systems nutzen, um parallel zu arbeiten und so ein scale-out für die Datenanalyse zu erreichen? Der Map-Reduce-Ansatz © FH AACHEN UNIVERSITY OF APPLIED SCIENCES...
Wir haben mit HDFS und HBase ein höchst verteiltes System. Wie können wir die Verteiltheit des Systems nutzen, um parallel zu arbeiten und so ein scale-out für die Datenanalyse zu erreichen? Der Map-Reduce-Ansatz © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 383 © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 384 Map-Reduce – Ein Scaling-out-Ansatz © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 385 Map-Reduce – Ein Scaling-out-Ansatz © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 386 Was ist Map/Reduce? Map/Reduce ist ein Programmiermodell zur parallelen Verarbeitung Es funktioniert ein wenig so, wie eine Unix Pipeline: – cat input | grep | sort | uniq -c | cat > output – Input | Map | Shuffle & Sort | Reduce | Output Aus Hadoop: The Definitive Guide, O‘Reilly Einfaches Modell, passend für viele Szenarien – Analyse und Durchsuchen von Log-Dateien – Aufbau eines Web-Indexes – Statistiken verteilter Daten © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 387 Was ist Map/Reduce? Aus Hadoop in Practice (Manning) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 388 Was ist Map/Reduce Aus Hadoop MapReduce Cookbook (PACKT Publishing) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 389 Die Basis Map/Reduce verarbeitet Key-Value-Paare und erzeugt Key-Value-Paare Tatsächlich geht es bei der Formulierung des Algorithmus um die Transformation eines einzelnen Key-Value-Paares auf beliebig viele Key-Value-Paare (ggf. auch anderer Key-/Value Raum) Diese werden automatisch vom Rahmenwerk nach identischen Keys geordnet Alle Values zu jedem Key werden dann verarbeitet und zu den Ergebnis-Key-Value-Paaren transformiert (zumeist nur ein Wert, manchmal ohne den Key) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 390 Map-Reduce – Map-Phase © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 391 Map-Reduce – Map-Phase Aus Hadoop in Practice (Manning) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 392 Map-Reduce – Word-count example © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 393 Map-Reduce – Shuffle-Sort Phase © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 394 Map-Reduce – Shuffle-Sort phase Aus Hadoop in Practice (Manning) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 395 Map-Reduce – Sort phase – Word Count example © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 396 Map-Reduce – Reduce Phase © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 397 Map-Reduce – Reduce Phase Aus Hadoop in Practice (Manning) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 398 Map-Reduce – Reduce Phase – Word Count © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 399 Word Count Aus Hadoop MapReduce Cookbook (PACKT Publishing) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 400 Map-Reduce – Daten kommen z.B. von HDFS © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 401 MapReduce Phasen Die Entscheidung, was der key und was die value darstellen liegt beim Programmierer! Der Framework übernimmt das Verteilen auf ein zu konfigurierendes Cluster! © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 402 Das verborgene Shuffle-Sort Aus Hadoop in Practice, Manning © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 403 Konkrete Verarbeitungseinheiten Mapper – Sind einfach strukturiert und können so sehr häufig gestartet werden – Viele Mapper verarbeiten so “Paar für Paar” durch – Der vom Programmierer geschriebene Code verarbeitet ein Key-Value-Paar und liefert keinen, einen oder mehrere Key- Value-Paare map: (K1, V1) → list(K2, V2) Reducer – Verarbeiten eine Gruppe von Werten mit dem gleichen Key und können so häufig gestartet weerden – Das Resultat sind kein, ein oder mehrere Key-Value-Paare - meistens nur ein (K3, V3), manchmal auch nur V3 reduce: (K2, list(V2)) → list(K3, V3) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 404 Word Count Beispiel Mapper – Input – Key: Offset oder Zeilennummer – Value: Eine Textzeile (bis zum CR-LF) – Output: – Key: Wort – Value: 1 Reducer – Input: Key: Wort, Value: Liste der Counts (alles 1en) – Output: Key: Wort, Value: Summe an 1en Das rufende Program liefert den Rahmen – Es definiert den Auftrag – Es überträgt den Job an das Cluster © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 405 Key-Value Pairs Mapper und Reducer werden vom Anwender bereit gestellt (programmiert!) Der Framework offeriert hierzu Schnittstellen und verwendet diese intern Mapper: – Verarbeiten einzelne -Paare – Erzeugen beliebig viele -Paare Reducer: – Verarbeiten – Erzeugen zumeist ein einzelnes (kann auch Liste sein) Shuffling and Sorting: – Für den Anwender versteckte Phasen, die zwischen Mapper und Reducer ausgeführt werden – Shuffling: Gruppiert die Resultate der Mapper über alle keys; Sorting sortiert diese und leitet dies an die Reducer weiter © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 406 Hier werden spezielle Hadoop Die Mapper-Klasse Datentypen verwendet class MyMap extends Mapper { void map(K1 key, V1 value, Mapper.Context context) throws IOException, InterruptedException... } Ausgabe wird mittels context.write(K2,V2) erzeugt © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 407 Reducer interface Hier werden spezielle Hadoop Datentypen verwendet public class ReduceClass extends Reducer { protected void reduce(K2, Iterable values, Context context) throws IOException, InterruptedException {… Ausgabe wird mittels context.write(K3,V3) erzeugt © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 408 Datentypen für Hadoop-Klassen Objects which can be marshaled to or from files and across the network must obey a particular interface, called Writable, which allows Hadoop to read and write the data in a serialized form for transmission. We have seen that column- data is stored in HBASE based on byte arrays. Hadoop uses efficient data structures on top of byte arrays: Writable: Text (which stores String data), IntWritable, LongWritable, FloatWritable, BooleanWritable, and several others. The entire list is in the org.apache.hadoop.io package of the Hadoop source (see the API reference). © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 409 Ein Java – Mapper (Word Count) public class MapClass extends Mapper { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map( LongWritable key, Text value, Context context) throws IOException { String line = value.toString(); StringTokenizer itr = new StringTokenizer(line); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } } © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 410 Und nun die Job Configuration und der Start (die Run-Methode erledigt hier den Job) public void run (String inPath, String outPath) throws Exception { // Liefern wir hier unsere eigene Klasse und Namen zum Monitoren JobConf conf = new JobConf(); // Es sind weitere Parameter erforderlich conf.setJobName(”mywordcount"); Job job = Job.getInstance(conf); // Als Key verwenden wir Wörter, also vom Typ Text! job.setOutputKeyClass(Text.class); // Die Values sind Integer job.setOutputValueClass(IntWritable.class); // Liefern wir noch die Mapper und Reducer-Klassen job.setMapperClass(MapClass.class); job.setReducerClass(ReduceClass.class); // Wir benötigen für die entfernte Ausführung einen vollständigen JAR // Dieser wird an das Cluster übertragen! job.setJar("target/Hadoop/MapReduceJobsHDFS.jar"); // Wo finden wir die Daten (im HDFS?) und wohin schreiben wir FileInputFormat.addInputPath(conf, new Path(inPath)); FileOutputFormat.setOutputPath(conf, new Path(outPath)); // Los geht es boolean success = job.waitForCompletion(true); } Verzeichnis darf nicht existieren © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 411 Ein Java - Reducer public class ReduceClass extends Reducer { private IntWritable count = new IntWritable(); @Override protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable value : values) { sum += value.get(); } count.set(sum); context.write(key, count); } } © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 412 Wo ist die Parallelität? © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 413 © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 414 Daten nahe am Berechnen halten Aus Hadoop: The Definitive Guide, O‘Reilly © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 415 Input Format: Hier liegen die Daten zur Verarbeitung unserer MapReduce-Task. Wir können hier lokale Dateien nehmen, HDFS-Dateien oder später dann auch HBase als Datenquelle. FileInputFormat.setInputPaths(conf, new Path("hdfs://master:9000/user/sander/mr-out.dir")); Bei den Dateien ist das Format völlig offen. So können zeilenbasierte Log-Dateien genauso genutzt werden, wie Binärformate oder mehrzeilige Formate, oder eben beliebiges... MapReduce dient nicht dazu, kleine Datenbestände zu verarbeiten. Wir reden hier von zig Gigabyte und mehr © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 416 InputFormat legt fest, wie die Daten aufgeteilt und gelesen werden. Eine InputFormat-Klasse besitzt die folgende Funktionalität: Auswahl der Dateien oder Objekte, die als Input verarbeitet werden sollen. Hierbei wird möglichst auf lokale Daten zugegriffen Definition des InputSplits, der die Daten in Task-Einheiten spaltet Bereitstellen einer Factory für ein RecordReader-Objekt, welches die Daten liest Aus Hadoop in Practice (Manning) Einige InputFormat-Klassen werden bereits mit Hadoop geliefert. Der Default steht auf der Klasse TextInputFormat. Diese verarbeitet Dateien zeilenweise und führt kein weiteres Parsing durch. Value ist somit immer eine ganze Zeile. Nützlich für unformatierte Daten oder zeilenorientierte Formate, wie Log-Dateien Als Key liefert TextInputFormat’s einfach den Offset in der Datei. © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 417 TextInputFormat ist faktisch eine Erweiterung von FileInputFormat. Wenn wir das InputFormat nicht anders setzen und verwenden einen Mapper mit einer anderen Key-Value-Signatur als , so erhalten wir einen Fehler Wenn wir also beispielsweise einen -Input erwarten, so muss das passend Input-Format beim Setup des Jobs angegeben werden. Hierzu dient: job.setInputFormat(MyInputFormat.class); apache.hadoop.mapreduce.KeyValueTextInputFormat gibt hierbei eine Menge an vordefinierten InputFormat-Klassen vor © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 418 © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 419 Gehen wir beispielsweise einmal davon aus, dass wir eine Menge an Zeilen verarbeiten wollen, deren Daten immer paarig sind und durch Kommata getrennt notiert werden: "A,value1" "B,value2“ Wenn der Mapper jetzt die Key-Value-Paare ("A", "value1"), ("B", "value2") verarbeiten soll, so könnten wir eigene InputFormat und RecordReader-Klassen mit einer - Signatur entwickeln. 1. Erstelle eine Klasse, die FileInputFormat erweitert und eine Klasse, die RecordReader erweitert 2. Überlade die FileInputFormat#getRecordReader-Methode, so dass diese eine Instanz des neuen RecordReader zurück gibt Es geht aber auch einfacher: Neuer code (Tab ist der Default Key-Value-Separator) Configuration conf = new Configuration(); conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", ","); Job job = new Job(conf); job.setInputFormatClass(KeyValueTextInputFormat.class); © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 420 Die Klasse KeyValueTextInputFormat Schauen wir uns die folgende Datei an, → steht hierbei für das (horizontalen) tab: line1→On the top of the Crumpetty Tree line2→The Quangle Wangle sat, line3→But his face you could not see, line4→On account of his Beaver Hat. Wie im Falle des KeyValueTextInputFormats wird hier die Datei in 4 Datensätze aufgesplittet, diesmal jedoch nicht mit dem Offset als Key wie bei TextInputFormat, vielmehr mit dem Text linex: (line1, On the top of the Crumpetty Tree) (line2, The Quangle Wangle sat,) (line3, But his face you could not see,) (line4, On account of his Beaver Hat.) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 421 Die Klasse NLineInputFormat Mit den bisherigen Klassen TextInputFormat und KeyValueTextInputFormat erhält jeder Mapper im Cluster (das ist eine Sache der Konfiguration) eine variable Anzahl an Zeilen als Input. Die tatsächliche Anzahl hängt von der Größe der Splits und der Länge der Zeilen ab. Wenn wir hier mehr Kontrolle ausüben wollen und z.B. die Anzahl der Zeilen für jeden Mapper festlegen wollen, so nutzen wir die Klasse NLineInputFormat als InputFormat N listet hierbei die Anzahl der Zeilen, die jeder mapper erhält On the top of the Crumpetty Tree The Quangle Wangle sat, But his face you could not see, On account of his Beaver Hat. Wenn beispielsweise N zwei ist, so erhält jeder Mapper zwei Zeilen, wir splitten also paarweise. Mapper1: (0, On the top of the Crumpetty Tree) (33, The Quangle Wangle sat,) Mapper2: (57, But his face you could not see,) (89, On account of his Beaver Hat.) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 422 Wo genau ist hier der verborgene Parallelismus? InputSplits: Ein InputSplit beschreibt eine Arbeitseinheit (task) für eine einzelne MapTask eines MapReduce-Programms. Die Anwendung des gesamten MapReduce-Programms auf eine Datenquelle wird dementsprechend als Job bezeichnet, der aus vielen Arbeitseinheiten/Tasks bestehen kann (zumeist hunderten). Map-Tasks können ganze Dateien betreffen, oder eben nur Teile. Standardmäßig werden bei FileInputFormat Dateien in (default) 64MB-Teile (Chunks) aufgebrochen, was genau einem Block im HDFS entspricht. Damit kann quasi jede Task einen eigenen Block verarbeiten, was die Parallelität ergibt und gut zum Dateisystem passt. Außerdem passt dies gut zu dem Ansatz, die Daten lokal zu verarbeiten. Sprich: Der Splitter wird die Daten möglichst nehmen, die im gleichen Rack oder noch besser im gleichen Knoten sind © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 423 Aus Hadoop: The Definitive Guide, O‘Reilly © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 424 Aus Hadoop in Practice, Manning © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 425 Aus Hadoop in Practice, Manning © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 426 Die Scheduling-Infrastruktur © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 427 Der YARN Scheduler Hadoop 2.x liefert ein komplettes Framework zum Verwalten der Map-Reduce Tasks im Cluster – Resource management – Job Scheduling / Management YARN = Yet Another Resource Negotiator Behandelt jeden Server als “collection of containers” – Container = fixed CPU + fixed memory Besteht aus drei wesentlichen Komponenten – Global Resource Manager (RM) – Übernahme des Scheduling – Per-server Node Manager (NM) – Überwachung und Anbindung eines einzelnen Nodes – Per-application (job) Application Master (AM) – Container, der die Kommunikation mit RM und NMs kapselt – Entdeckt Fehler beim Bearbeiten der Anwendung (des Jobs) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 428 Die Scheduling-Infrastruktur Aus Hadoop: The Definitive Guide, O‘Reilly © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 429 Client-Submit an YARN Wenn wir hier ein Java-Programm erstellen, dann muss das Java-Programm auch auf dem Cluster verfügbar sein – Maven erstellt einen jar-File – Übertragen mittels job-Instanz job.setJar("target/Hadoop/MapReduceJobsHBASE.jar"); Benutzernamen festlegen © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 430 Die Scheduling-Infrastruktur Aus Hadoop: The Definitive Guide, O‘Reilly © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 431 Die Scheduling-Infrastruktur Aus Hadoop: The Definitive Guide, O‘Reilly © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 432 Der YARN Scheduler Sie können es unter http://kraft.fb9.fh- Aachen.de:8088 verfolgen Und die Konfiguration http:// kraft.fb9.fh-Aachen.de:8088/conf © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 433 YARN: Packt die Jobs in Container Resource Manager Hier sehen wir Capacity Scheduler 2 server (A, B) 2 jobs (1, 2) 1. Need 2. Container Completed container 3. Container on Node B Node A Node B Node Manager Node Manager A B Applicatio Applicatio Task n Master 1 n Master 2 (App2) 4. Start task, please! © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 434 YARN Startet pro Anwendung einen speziellen Prozess, den ApplicationMaster (AM), der den Lebenszyklus des Jobs realisiert (scheduling und Koordination) Eine Anwendung ist zumeist ein einzelner Job, es kann aber auch ein ganzer MapReduce- Workflow sein © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 435 YARN Ein Application Master – Aushandeln “angemessener “Resource Container vom Scheduler – Start einer Task – Buchführen des Zustandes – Überwachung des Fortschritts – Behandlung von Fehlersituation © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 436 YARN Der NodeManager ist im Framework der Agent pro Knoten – Verantwortet den Start des Containers einer Anwendung und überwacht dann deren Ressourcennutzung (cpu, memory, disk, network) – Diese Daten werden dann an den Scheduler berichtet © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 437 Fehlertoleranz Serverfehler – NM sendet heartbeats zum RM – Wenn NM-Heartbeat ausbleibt, dann teilt der TM dies den betroffenen AMs mit, die entsprechend reagieren – NM führt Buch über alle tasks, die bei ihm laufen – Wenn eine Task abbricht, dann markiert er diese und startet sie neu – AM sendet heartbeats zum RM – Im Fehlerfalle startet der RM den AM, der sich dann mit den Tasks synchronisiert RM Failure – Nutzen von Checkpoints und einem secondary RM Heartbeats werden mit container requests kombiniert – Vermeidet zusätzliche Nachrichten © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 438 Sortieren der Output-Daten http://blog.ditullio.fr/2015/12/28/hadoop-basics-secondary-sort-in-mapreduce/ The outputs from the map method are partitioned for each user using the specified Partitioner. By default, the HashPartitioner is used in MapReduce. It uses the key’s hashCode() value and perform a modulo on the number of reducers. This will randomize how the (key,value) pairs are stored in different partitions for each reducer based on the key. All pairs with the same key will be in the same partition and will end up in the same reducer. The data is sorted using the specified Sort Comparator the before being written to disk. The partitions are all written in a same temporary file. © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 439 Sortieren der Output-Daten http://blog.ditullio.fr/2016/01/04/hadoop-basics-total-order-sorting-mapreduce/ Hadoop has a built-in partitioner called the TotalOrderPartitioner, which distributes keys to specific reducers based on a partition file. The partition file is a precomputed SequenceFile that contains N-1 keys, where N is the number of reducers. The keys in the partition file are ordered by the map output key comparator, and as such each key represents a logical range of keys. To determine which reducer should receive an output record, the TotalOrderPartitioner examines the output key, determines which range it falls into, and maps that range into a specific reducer. Aus Hadoop in Practice (Manning) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 440 Sortieren der Output-Daten http://blog.ditullio.fr/2016/01/04/hadoop-basics-total-order-sorting-mapreduce/ 1. An InputSampler samples keys across all input splits, and sorts them using the job’s Sort Comparator. Different input sampler implementations are available in the Hadoop library : 1. RandomSampler : samples randomly based on a given frequency. 2. IntervalSampler : takes samples at regular intervals (for example every 5 records). 3. SplitSampler : take the first n samples from each split. 2. The input sampler writes a “partition file” Sequence File in HDFS, which delimits the different partition boundaries based on the sorted samples. 1. For n reducers there are n-1 boundaries written to this file. In this example there are 3 reducers, so 2 boundaries are created : “MD” and “PA”. 3. The MapReduce job begins with the mapper tasks. For partitioning, the mappers use the TotalOrderPartitioner, which will read the partition file from HDFS to obtain partition boundaries. Each map output is then stored in a partition based on these boundaries. 4. After the shuffle, each reducer has fetched a sorted partition of (key,value) pairs from each mapper. At this point, all keys in reducer 2 are alphabetically greater than all keys in reducer 1, which are greater than all keys in reducer 0. Each reducer merges their sorted partitions (using a sorted merge-queue) and writes their output to HDFS. © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 441 Sortieren der Output-Daten http://blog.ditullio.fr/2016/01/04/hadoop-basics-total-order-sorting-mapreduce/ © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 442 Sortieren der Output-Daten kann auch für die Aufteilung auf die Reducer genutzt werden Aus Hadoop in Practice (Manning) Hierdurch können wir die Struktur der part-000x-Ausgabedateien beinflussen © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 443 Sortieren der Output-Daten Aus Hadoop in Practice (Manning) https://github.com/alexholmes/hadoop-book/blob/master/src/main/java/com/manning/hip/ch4/sort/total/TotalSortMapReduce.java © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 444 Sortieren der Output-Daten Aus Hadoop in Practice (Manning) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 445 Group By mit Map-Reduce Aus Hadoop MapReduce Cookbook (PACKT Publishing) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 446 Ein invertierter Index Aus Hadoop in Practice (Manning) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 447 (aus Hadoop in Action, Manning) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 448 Joins: Reducer-Site via MultipleInputs-Klasse Durch die Nutzung der MultipleInputs-Klasse können via Map&Reduce relativ leicht Reducer-Site Joins implementiert werden Hierzu werden zwei (oder mehr) Input-Dateien mit entsprechenden Mappern verknüpft. Die Join-Bedingung ist hierbei der Key, den die Mapper erzeugen. Somit werden mittels sort-shuffle die beiden Ausgaben zu den Reducern kombiniert, was faktisch das Join ist © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 449 Joins: Treiber für MultipleInputs-Klasse © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 450 Joins: Mapper für MultipleInputs-Klasse © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 451 Joins: Mapper für MultipleInputs © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 452 Joins: Reducer für MultipleInputs © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 453 Joins: Der Treiber mit MultipleInputs Komprimierte binäre Key-Value-Datei, die automatisch Serialisiert. Wird mittels SequenceFile.createWriter() erstellt https://github.com/nicomak/blog/blob/master/donors/src/main/java/mapreduce/join/repartition/RepartitionJoinBasic.java © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 454 Joins: Der Treiber mit MultipleInputs https://github.com/nicomak/blog/blob/master/donors/src/main/java/mapreduce/join/repartition/RepartitionJoinBasic.java © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 455 Joins: 2 Mapper https://github.com/nicomak/blog/blob/master/donors/src/main/java/mapreduce/join/repartition/RepartitionJoinBasic.java © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 456 Joins: 2 Reducer Reducer 1: Both Donations and Projects objects share the same joining key. This results in a Cartesian product of all inputs. Reducer 2: There is no “right side” data for the join. No projects correspond to the donations’ foreign key. Reducer 3: There is no “left side” data for the join. No donations correspond to the project’s primary key. https://github.com/nicomak/blog/blob/master/donors/src/main/java/mapreduce/join/repartition/RepartitionJoinBasic.java © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 457 Joins: 2 Reducer https://github.com/nicomak/blog/blob/master/donors/src/main/java/mapreduce/join/repartition/RepartitionJoinBasic.java © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 458 Joins: 2 Reducer https://github.com/nicomak/blog/blob/master/donors/src/main/java/mapreduce/join/repartition/RepartitionJoinBasic.java © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 459 Wie werden jetzt Daten verarbeitet? Aus Hadoop in Practice, Manning © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 460 Wie werden jetzt Daten verarbeitet? Aus Hadoop in Practice, Manning © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 461 Apache Sqoop transferiert die Daten via Map-Only https://blogs.apache.org/sqoop/entry/apache_sqoop_overview © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 462 Map Reduce mit HBase-Daten // define input hbase table TableMapReduceUtil.initTableMapperJob( “Hbase_Tabelle", // Tabellenname scan, // Scan-Objekt für HBase TestMapper.class, // Mapper Text.class, // Output Key Type IntWritable.class, // Output Value job); © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 463 Map Reduce ist komplex Aus Hadoop in Practice (Manning) © FH AACHEN UNIVERSITY OF APPLIED SCIENCES Vorlesung Datenbanken II / Datenanalyse November 23| 464