Hadoop                   Advent of Big Data”if you know all the questions you’re going to ask from your data, youprobably ...
Hadoop• Hadoop on kehitetty tekemään monimutkaisia  analyysejä, yksityiskohtaista ja hyvin  erikoistunutta tiedonlouhintaa...
Hadoop• Apachen projekti joka sisältää:   – Suorituskykyisen hajautetun tiedostojärjestelmän HDFS:n   – MapReduce framewor...
MapReduce• Processing framework joka mahdollistaa yksinkertaisella  koodilla suuren datamassan tiedonlouhinnan.• MapReduce...
MapReduce ohjelmointimalli• Prosessointi on kaksivaiheinen: Map ja  Reduce.• Jokaisella vaiheella on key-value-pari inputt...
MapReduce ohjelmointimalli• Input ja Output ovat key/value-pareja• Ohjelmoija määrittelee kaksi funktiota:   – map (in_key...
Ohjelmointiesimerkki• Yleisin esimerkki, pseudokoodina. Sanojen  tiheyden laskenta suuresta datamäärästä:map(String input_...
MapReduce-prosessi                                                                   1.   MapReduce pilkkoo datan 64-128MB...
M ja R suoritus tarkemmin  Key/value-parin operointi ja ryhmittely Map ja Reduce workereissa
M ja R rinnakkainen suoritus   Key/value-parin operointi ja ryhmittely Map ja Reduce workereissa
MapReduce esimerkki• Weppisaitin indeksointi   – Map-vaihe generoi intermediate key/value-parin missä key on sana ja     v...
MapReduce vikasietoisuus• Worker failure   – Vika havaitaan säännöllisesti pingaamalla “worker     heartbeat”   – Suoritet...
Hadoopin arkkitehtuuri•   HDFS ja MapReduce•   Ohjelmoijan tai muunkaan tiimin ei tarvitse tuntea paljonkaan Hadoopin arkk...
HDFS•   Hajautettu ja skaalautuva tiedostojärjestelmä•   - Javalla toteutettu•   - HDFS klusterissa on NameNode joka talle...
Hadoop ja C++• Hadoop Pipes  – Bindaus kirjasto natiiville C++ koodille  – Toimii lokaalisti socketeilla• Suorituskyky par...
Hadoop ja Python• Optio 1: Käytä Jythonia  – Jython on subset Pythonista, hitaampi• Optio 2: Käytä Hadoop Streamia
Hadoop streaming• Mahdollistaa piipun käytön ‘|’• Voi luoda yksinkertaisia map ja reduce  ohjelmia suoraan komentorivillä ...
HBase
HBase• Hajautettu tietovarasto joka skaalautuu  horisontaalisesti hyvin ja pystyy käsittelemään  useiden petatavujen kokoi...
Miksi Hbase?• Perinteinen RDBMS ei skaalaudu suurille  hajautetuilla datamassoille• RDBMS hajautus mahdollista jossain mää...
Miksi Hbase?• MapReduce prosessin mahdollisuus luo  kustannustehokkaan keinon hajauttaa data• Sharding  – Relaatiotietokan...
Pig latin
Pig latin  • Datan prosessoinnille kehitetty korkean tason    ohjelmointikieli  • Abstrahoi MapReducen Java-käskyt    yksi...
Data-analyysiesimerkki   Hae 10 eniten vierailtua sivua per kategoria           Visits                         Url InfoUse...
Pig-ohjelman dataflowLoad Visits       Group by url                   Foreach url                                         ...
Itse Pig-ohjelmavisits      = load ‘/data/visits’ as (user, url, time);gVisits     = group visits by url;visitCounts = for...
Yahoon Sikajengi
Upcoming SlideShare
Loading in …5
×

Hadoop ja MapReduce

655 views
514 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
655
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Hadoop ja MapReduce

  1. 1. Hadoop Advent of Big Data”if you know all the questions you’re going to ask from your data, youprobably don’t need that data” P. Heinonen
  2. 2. Hadoop• Hadoop on kehitetty tekemään monimutkaisia analyysejä, yksityiskohtaista ja hyvin erikoistunutta tiedonlouhintaa ja laskentaa kustannustehokkaasti.• Käyttötapauksia on mm. hakuindeksi, logien prosessointi, suosittelujärjestelmät, tietovarastot, video- ja kuva-analyysi.
  3. 3. Hadoop• Apachen projekti joka sisältää: – Suorituskykyisen hajautetun tiedostojärjestelmän HDFS:n – MapReduce frameworkin• HDFS ja MapReduce muodostavat Hadoopin ytimen• HDFS mahdollistaa suuria rakenteellisten ja ei- rakenteellisten datamassojen tallennuksen tiedostojärjestelmään (jopa petatavuja)• Tiedostojärjestelmä on optimoitu suurille tiedostoille• Hadoop Streaming – API joka tarjoaa STDIN syötön MapReduce:lle. Mahdollistaa ohjelmoinnin myös muulla kuin Javalla.• Aliprojekteja: – Hbase, Pig, Hive
  4. 4. MapReduce• Processing framework joka mahdollistaa yksinkertaisella koodilla suuren datamassan tiedonlouhinnan.• MapReduce on se jonka kanssa ohjelmoija ja tiimi pääasiassa tekee hommia. Muu Hadoop on ”good to know”• Automatisoi rinnakkaislaskennan ja datan jakelun klusteriin• Vikasietoisuus automaattista• Hoitaa myös I/O skeduloinnin• Tarjoaa prosessin tilan monitoroinnin• Helppo tehostaa: lisätään koneita lisää klusteriin
  5. 5. MapReduce ohjelmointimalli• Prosessointi on kaksivaiheinen: Map ja Reduce.• Jokaisella vaiheella on key-value-pari inputtina ja outputtina.• Key-value-pari on jokin sellainen pari joka merkitsee ohjelmoijalle ja tiimille ja datalle jotain.• MapReducelle ohjelmoidaan kaksi funktiota: Map ja Reduce.
  6. 6. MapReduce ohjelmointimalli• Input ja Output ovat key/value-pareja• Ohjelmoija määrittelee kaksi funktiota: – map (in_key, in_value) -> list(out_key, intermediate_value) • Map prosessoi input key/value-parin • Tuottaa intermediate-parin – reduce (out_key, list(intermediate_value)) -> list(out_value) • Yhdistää intermediate valuet per avain • Tuottaa mergetyn datasetin output arvoista.• Map vaiheen toiminta kokonaisuudessaan voidaan ajatella lambda- funktiona: Square(1,2,3,4,5,6) = 2,4,9,16,25,36• Ja Reduce: Sum(2,4,9,16,25,36) = 92• Ohjelmointikielenä Java mutta myös muita kieliä jo tuettuna.• Hadoop Stream tarjoaa vaihtoehtoisen tavan toteuttaa MapReduce vaikka Pythonilla• Hadoop Pipe tarjoaa natiivin koodauksen C++:lla
  7. 7. Ohjelmointiesimerkki• Yleisin esimerkki, pseudokoodina. Sanojen tiheyden laskenta suuresta datamäärästä:map(String input_key, String input_value): // input_key: document name // input_value: document contents for each word w in input_value: output_intermediate, "1");reduce(String output_key, Iterator intermediate_values): // output_key: a word // output_values: a list of counts int result = 0; for each v in intermediate_values: result += ParseInt(v); output(AsString(result));
  8. 8. MapReduce-prosessi 1. MapReduce pilkkoo datan 64-128MB paloihin ja jakaa klustereille joissa kukin MapReducer kopio käynnistyy. 2. Yksi MapReducereista on Master ja muut workereita jotka saavat työn masterilta. Mallissa on kaksi tehtävää, Map ja Reduce. Master valitsee vapaan workerin ja jakaa sille joko Map tai Reduce tehtävän. 3. worker joka suorittaa Map tehtävää parsii datasta key/value-parit ja välittää jokaisen parin Map-funktiolle jonka key/value-output bufferoidaan muistiin. Tätä dataa kutsutaan ns. intermediate-dataksi. 4. Tietyin väliajoin intermediate-data talletetaan workerin lokaalille levylle, partitioidaan ns. R- osioon partitioning-funktiolla ja osoite levyllä välitetään masterille joka edelleen forwardoi osoitteet Reduce workereille. 5. Kun Reduce-worker vastaanottaa masterilta osoitteen, se lukee RPC:llä Map workerin tallentaman lokaalin intermediate-datan. Datan luettuaan Reduce-worker sorttaa datan avaimen perusteella eli kaikki saman avaimen omaava data groupataan yhteen. 6. Reduce worker käy läpi groupatun intermediate-datan ja välittää jokaisen yksilöivän avaimen ja sitä vastaavan datasetin Reduce-funktiolle. Reduce-funktion outputHuom: Single-nodena prosessi on täysin sama, ts. MapReduce lisätään output-tiedostoon reduce-partitioon.prosessin kannalta ei ole merkitystä onko klusterissa 1 vai 1000 7. Lopulta MapReduce on tuottanut inputista halutun outputin hadoopin hdfs:lle.konetta.
  9. 9. M ja R suoritus tarkemmin Key/value-parin operointi ja ryhmittely Map ja Reduce workereissa
  10. 10. M ja R rinnakkainen suoritus Key/value-parin operointi ja ryhmittely Map ja Reduce workereissa
  11. 11. MapReduce esimerkki• Weppisaitin indeksointi – Map-vaihe generoi intermediate key/value-parin missä key on sana ja value on dokumentti – Reduce-vaihe aggregoi arvot ja tuottaa outputin• Weppisaitin linkkien indeksointi (PageRank) – Sama MapReduce prosessi, tällä kertaa intermediate key/value-parin key on linkki ja value on linkkien esiintymistiheys. Jälleen Reduce-vaihe ryhmittelee datan ja tuottaa lopullisen outputin• MapReduce mahdollistaa dynaamisen datan indeksoinnin ja ryhmittelyn. Ei siis tarvitse etukäteen määrittää tietokannan rakenteita.• Key/value-parin key ja value voivat olla mitä tahansa mikä nähdään tarpeelliseksi. ”key/value-pair is something meaningful to you and your team and to your data”
  12. 12. MapReduce vikasietoisuus• Worker failure – Vika havaitaan säännöllisesti pingaamalla “worker heartbeat” – Suoritetaan ajo uudelleen – Ajettu suoritus ilmoitetaan masterille• Master failure: – Hyvin poikkeuksellinen virhetilanne, ajettava käsin uudelleen• Luotettava: vaikka 90% klusterin nodeista kaatuisi niin laskenta onnistuisi lopulla 10%:lla.
  13. 13. Hadoopin arkkitehtuuri• HDFS ja MapReduce• Ohjelmoijan tai muunkaan tiimin ei tarvitse tuntea paljonkaan Hadoopin arkkitehtuuria; kaikki tapahtuu pinnan alla automaattisesti. Ainoastaan MapReduce:n Map ja Reduce funktioiden ohjelmointi jää tehtäväksi.
  14. 14. HDFS• Hajautettu ja skaalautuva tiedostojärjestelmä• - Javalla toteutettu• - HDFS klusterissa on NameNode joka tallettaa metadataa ja useita DataNodeja joihin tallentuu prosessoitava varsinainen data.• NameNode (Master): Mappaa datan blokkeihin ja lähettää DataNodeille• DataNode: workerit• Tiedostojärjestelmä käyttää TCP/IP:tä kommunikointiin (RPC)
  15. 15. Hadoop ja C++• Hadoop Pipes – Bindaus kirjasto natiiville C++ koodille – Toimii lokaalisti socketeilla• Suorituskyky parempi mutta riskinä tietoturva ja suora yhteys Kerneliin
  16. 16. Hadoop ja Python• Optio 1: Käytä Jythonia – Jython on subset Pythonista, hitaampi• Optio 2: Käytä Hadoop Streamia
  17. 17. Hadoop streaming• Mahdollistaa piipun käytön ‘|’• Voi luoda yksinkertaisia map ja reduce ohjelmia suoraan komentorivillä – stdin ja stdout tekee loput – Esim pythonilla map ja reduce josta luetaan komentorivilta ja kirjoitetaan komentoriville – Myös batch scriptillä
  18. 18. HBase
  19. 19. HBase• Hajautettu tietovarasto joka skaalautuu horisontaalisesti hyvin ja pystyy käsittelemään useiden petatavujen kokoista indeksiä• Suunniteltu Hadoopin HDFS:n päälle• Integroituu MapReducen kanssa• Hajautettu malli• Table-like rakenne – Multidimensional map• Skaalautuva, hyvä suorituskyky
  20. 20. Miksi Hbase?• Perinteinen RDBMS ei skaalaudu suurille hajautetuilla datamassoille• RDBMS hajautus mahdollista jossain määrin toteuttaa replikoinnilla mutta hankala ylläpitää• Hajautettu datan jakaminen replikoinnilla vaatii: – Monimutkaisia kyselyitä – Kyselyjä hidastavia joineja, mahdollisesti triggereitä sekä foreign key constraintteja.
  21. 21. Miksi Hbase?• MapReduce prosessin mahdollisuus luo kustannustehokkaan keinon hajauttaa data• Sharding – Relaatiotietokannat eivät mahdollista datan pilkkomista ja jakamista pienempiin osiin joita prosessoidaan hajautetusti. – Sharding on ns. Horisontaalinen partitiointi • Data pilkotaan osiin ja jaetaan ”pirstaleina” klusterin palvelimille. • Esim: Customer pilkotaan osiin, jokainen osa sisältää jonkun palasen Customeriin liittyvää dataa ja jokainen operaatio suoritetaan osissa.
  22. 22. Pig latin
  23. 23. Pig latin • Datan prosessoinnille kehitetty korkean tason ohjelmointikieli • Abstrahoi MapReducen Java-käskyt yksinkertaisemmaksi notaatioksi vähän kuten SQL tekee RDBMS:lle. • Helppo tapa toteuttaa Hadoopille MapReduce ohjelma • Esimerkki sanojen esiintymistiheyden laskennasta. WordCount MapReduce:nettisivujenSisalto = load /hadoop-testit/indeksoidut_nettisivut.txt;sanat = foreach nettisivujenSisalto generate flatten(TOKENIZE((chararray)$0)) as word;sanat = filter sanat by word matches w+;gruupatutSanat = group sanat by word;sanaDensity = foreach gruupatutSanat generate COUNT(C) as count, group as word;jarjesteltySanajoukko = order sanaDensity by count desc;store jarjesteltySanajoukko into /hadoop-testit/nettisivujen-sanatiheys.txt; Ylläoleva ohjelma ei ole pseudokoodia vaan se aidosti generoi Hadoopille MapReduce rinnakkaislaskentatehtävän jonka voi hajauttaa klusterin tuhannelle eri koneelle laskemaan indeksoitavien nettisivujen sanojen lukumäärää.
  24. 24. Data-analyysiesimerkki Hae 10 eniten vierailtua sivua per kategoria Visits Url InfoUser Url Time Url Category PageRankAmy cnn.com 8:00 cnn.com News 0.9Amy bbc.com 10:00 bbc.com News 0.8Amy flickr.com 10:05 flickr.com Photos 0.7Fred cnn.com 12:00 espn.com Sports 0.9
  25. 25. Pig-ohjelman dataflowLoad Visits Group by url Foreach url Load Url Info generate count Join on url Group by category Foreach category generate top10 urls
  26. 26. Itse Pig-ohjelmavisits = load ‘/data/visits’ as (user, url, time);gVisits = group visits by url;visitCounts = foreach gVisits generate url, count(visits);urlInfo = load ‘/data/urlInfo’ as (url, category, pRank);visitCounts = join visitCounts by url, urlInfo by url;gCategories = group visitCounts by category;topUrls = foreach gCategories generate top(visitCounts,10);store topUrls into ‘/data/topUrls’;
  27. 27. Yahoon Sikajengi

×