Hadoop High Performance Batches in der Cloud Hadoop Folie 1 25. Januar 2011 Masanori Fujita © Zühlke 2011 Alles geht in die Cloud… Hadoop © Zühlke 2011 Image: Chris Sharp / FreeDigitalPhotos.net Cloud und Batches passen zusammen Batches Cloud Pay-per-Use Nur zeitweise genutzt Flexibel skalierbar Hohe Rechenkapazitäten benötigt Ausführung auf Commodity-Hardware Hadoop Folie 3 25. Januar 2011 Masanori Fujita © Zühlke 2011 Was ist Hadoop? • Plattform für parallele Datenverarbeitung auf Commodity-Hardware • Konzepte aus der funktionalen Welt • inspiriert durch Google-Technologien • Apache Top-Level-Projekt Hadoop Folie 4 25. Januar 2011 Masanori Fujita © Zühlke 2011 MapReduce Programmieransatz zur parallelen Datenverarbeitung map(k,v) [(K1,V1), (K2,V2)…] reduce(Kn, [Vi,Vj…]) (Kn, R) Hadoop Folie 5 25. Januar 2011 map reduce Masanori Fujita © Zühlke 2011 MapReduce Beispiel: Inverted Index Verzeichnis: Term Dokument map(did,text) [(word1,did1), (word2,did2)…] reduce(wordN, [didX,didY…]) (wordN, [didX, didY…]) Hadoop Folie 6 25. Januar 2011 documents map Image: Salvatore Vuono / FreeDigitalPhotos.net reduce Masanori Fujita © Zühlke 2011 Hadoop-Zoo Hive Pig Hbase HDFS Commons Zookeeper Chukwa Mahout Hadoop Folie 7 25. Januar 2011 Masanori Fujita © Zühlke 2011 Einsatzszenarien ETL Data Mining Reporting Indizierung Hadoop Folie 8 25. Januar 2011 Masanori Fujita © Zühlke 2011 Kontrollfluss innerhalb Hadoop Job Tracker Node Client Node submit job Hadoop Job Client Hadoop Job Tracker Daemon MapReduce Program store job resources allocate task Task Tracker Node Task Tracker Node Task Tracker Node Hadoop Task Tracker Daemon Hadoop Task Tracker Daemon Hadoop Task Tracker Daemon launch launch Hadoop Child Process Hadoop Child Process Hadoop Child Process Map or Reduce Task Map or Reduce Task Map or Reduce Task File System MapReduce Program JAR launch retrieve job resources Hadoop Folie 14 25. Januar 2011 Input Data Masanori Fujita © Zühlke 2011 Kontrollfluss innerhalb Hadoop Job Tracker Node Client Node Hadoop Job Client retrieve job status Hadoop Job Tracker Daemon MapReduce Program Retrieve results heartbeat + progress Task Tracker Node Task Tracker Node Task Tracker Node Hadoop Task Tracker Daemon Hadoop Task Tracker Daemon Hadoop Task Tracker Daemon report progress report progress Hadoop Child Process Hadoop Child Process Hadoop Child Process Map or Reduce Task Map or Reduce Task Map or Reduce Task Store results File System MapReduce Program JAR report progress Input Data Hadoop Folie 15 25. Januar 2011 Output Data Masanori Fujita © Zühlke 2011 Eine andere Art Jobs zu schreiben Native Job Streaming Job Task Tracker Node Task Tracker Node Hadoop Task Tracker Daemon Hadoop Task Tracker Daemon Hadoop Child Process Hadoop Child Process Map or Reduce Task std in std out Map or Reduce Streaming Process Hadoop Folie 16 25. Januar 2011 Masanori Fujita © Zühlke 2011 cat test_data.txt | ../src/word_count_mapper.rb | sort | ../src/word_count_reducer.rb Folie 20 25. Januar 2011 Masanori Fujita Folie 21 Folie 22 25. Januar 2011 Folie 23 25. Januar 2011 Folie 24 25. Januar 2011 Folie 25 25. Januar 2011 Folie 26 25. Januar 2011 Folie 27 25. Januar 2011 Masanori Fujita Rechnung bitte! 10 GB Wörter zählen Konfiguration ECUs Notebook Dauer Kosten Durchsatz n/a 100 (100) min n/a 6 GB/h 5x Small 4 54 (51) min 0,55$ (0,47$) 12 GB/h 10x Small 9 27 (25) min 1,10 $ (0,46$) 24 GB/h 5x Large 16 17 (14) min 2,20$ (0,51$) 43 GB/h 5x HighCPU medium 20 16 (14) min 1,1$ (0,26$) 43 GB/h 10x HighCPU medium 45 10 (7) min 2,20$ (0,26$) 86 GB/h Hadoop Folie 29 25. Januar 2011 zzgl. Speicherkosten für S3 Masanori Fujita © Zühlke 2011 Wie stellt man Probleme in MapReduce dar? Problemklasse: Map-Only Verteilte Suche Suche nach „A“ 1 1 2 Mapper emittiert nur Records mit Suchkriterium. Reducer tut nichts. 1: A, B, C 2: D, E 3: B, E 4 3 1 4 4 1, 4, 5 5 4: A, D 5: A, C, E 5 5 Hadoop Folie 31 25. Januar 2011 map reduce Masanori Fujita © Zühlke 2011 Problemklasse: Map-Only Massenkonvertierungen z.B. Medien konvertieren, Renditions durchführen 1 1 Mapper führt Konvertierungen aus. 2 2 Reducer tut nichts. 1: a.jpg, b.png 2: c.tif, d.jpg 3: e.doc, f.pdf 3 3 4 4 1 4 1: a.jpg, b.jpg 4 5 5 4: g.mov 2: c.jpg, d.jpg 3: e.pdf, f.pdf 4: g.mpg 5: h.avi 5 5: h.mpg 5 Hadoop Folie 32 25. Januar 2011 map reduce Masanori Fujita © Zühlke 2011 Problemklasse: Sortieren Sortieren nach Punkten 120 1 Mapper emittiert Sortierkriterium als Key. 323 2 Reducer tut nichts. 1: Tom, 120 2: Jim, 323 3: John, 986 986 3 43 4 43, 4 986, 3 1: 43, Bob 120, 1 1020, 5 2: 120, Tom 323, 2 4: Bob, 43 3: 323, Jim 4: 986, John 5: Helen, 1020 1020 5: 1020, Helen 5 Hadoop Folie 33 25. Januar 2011 map reduce Masanori Fujita © Zühlke 2011 Problemklasse: Gruppieren/Aggregieren Sortieren nach Punkten Tom 1 Mapper emittiert GruppenAttribut als Key. Jim Reducer wendet Aggregatfunktion an. 2 1: Tom, 120 2: Jim, 323 3: Tom, 986 Tom 3 Bob 4 Tom, [120, 986] 1: Bob, 43 Jim, [323, 1020] 2: Jim, 1343 Bob, [43] 4: Bob, 43 3: Tom, 1106 5: Jim, 1020 Jim 5 Hadoop Folie 34 25. Januar 2011 map reduce Masanori Fujita © Zühlke 2011 Problemklasse: Joins Reduce Side Joins • Mapper erhält beide Quellen. • Mapper emittiert JoinAttribut als Key. • Map Side Joins • Mapper erhält beide Quellen sortiert nach JoinSchlüssel. • Mapper iteriert über eine Quelle und verknüpft mit Daten aus der anderen Quelle • Reducer tut nichts. Reducer verknüpft pro Join-Key die Datensätze aus beiden Quellen. Hadoop Folie 35 25. Januar 2011 Masanori Fujita © Zühlke 2011 Pig Latin: Komfortablere Abfragen Eine prozedurale Abfragesprache als Aufsatz auf Hadoop: Users = load 'users' as (name, age, ipaddr); Clicks = load 'requestlog' as (url, user, value); ValuableClicks = filter Clicks by value > 0; UserClicks = join Users by name, ValuableClicks by user; Geoinfo = load 'geoinfo' as (ipaddr, dma); UserGeo = join UserClicks by ipaddr, Geoinfo by ipaddr; ByDMA = group UserGeo by dma; ValuableClicksPerDMA = foreach ByDMA generate group, COUNT(UserGeo); store ValuableClicksPerDMA into 'ValuableClicksPerDMA'; Hadoop Folie 36 25. Januar 2011 Pig übersetzt nach MapReduce. Quelle: http://developer.yahoo.com/blogs/hadoop/posts/2010/01/comparing_pig_latin_and_sql_fo/ Masanori Fujita © Zühlke 2011 Hive: Datawarehouse auf Hadoop-Basis CREATE TABLE users (name STRING, age INT, ipaddr STRING); CREATE TABLE requestlog (url STRING, user STRING, value INT); CREATE TABLE geoinfo (ipaddr STRING, dma STRING); SELECT dma, COUNT(*) FROM requestlog JOIN users ON (requestlog.user = users.name) JOIN geoinfo ON (users.ipaddr = geoinfo.ipaddr) GROUP BY dma WHERE value > 0; Hadoop Folie 37 25. Januar 2011 Masanori Fujita © Zühlke 2011 Die Gelegenheit ist günstig • zahlreiche Success Stories überall auf der Welt • neue Möglichkeiten der Massendatenverarbeitung • Wettbewerbsvorsprung in puncto Wirtschaftlichkeit Hadoop Folie 38 25. Januar 2011 Masanori Fujita © Zühlke 2011 Und was werden Sie mit Hadoop tun? Kontakt & Infos: [email protected]