Presentation Mapreduce Bjornnordlund

428 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
428
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Krever flash plugin til prowerpoint, f.eks: http://www.globfx.com/products/swfpoint/
  • Presentation Mapreduce Bjornnordlund

    1. 1. Map – reduce og andre teknikker for parallellisering - Bjørn Nordlund
    2. 2. Hvorfor Parallellisering? 09.06.09 s.
    3. 3. Hvorfor skal jeg snakke om parallellisering
    4. 4. Outline <ul><li>Litt intro til parallellisering og noen begreper </li></ul><ul><li>java concurrency, parallellisering innen en javaprosess </li></ul><ul><li>Distribuert parallellisering og noen modeller for det med demo av hadoop(mapreduce) </li></ul><ul><li>Eksempel fra bbs </li></ul>
    5. 5. Hva er parallellisering? <ul><li>Parallellprosessering er prosessering der mange instruksjoner blir utført i parallell. Etter splitt og hersk metoden. Større problemer blir delt i mindre, som blir utført samtidig (concurrent) </li></ul>
    6. 6. Hva er samtidighet (concurrency)? <ul><li>Samtidig (concurrent) prosessering er samtidig prosessering av flere interagerende oppgaver. Oppgavene kan bli implementert som separate programmer, eller et sett av prosesser eller tråder i samme program. De kan bli utført på en enkel prosessor (multitasking), flere prosessorer på samme maskin, eller distribuert over et nettverk av maskiner. </li></ul><ul><li>Relatert til parallellprosessering, men med fokus på interaksjon/kommunikasjon mellom oppgaver. </li></ul>
    7. 7. Tilstand(state) og samtidighet, thread safety <ul><li>Når flere tråder kan aksessere de samme tilstands variablene uten noen form for låsing oppstår det problemer (klassevariable, static..) </li></ul><ul><li>Løsning: </li></ul><ul><li>- Ikke del tilstand mellom tråder </li></ul><ul><li>- Gjør tilstandsvariable immutable </li></ul><ul><li>- Bruk låser/synchronization </li></ul><ul><li>Objekter uten tilstand (stateless) er alltid threadsafe </li></ul>
    8. 8. Race conditions, deadlocks og contention <ul><li>Race conditions, to eller flere prosesser/tråder forsøker å oppdatere samme tilstand </li></ul><ul><li>Dead lock, to eller flere prosesser/tråder venter på hverandres låser </li></ul><ul><li>Recource contention er når det er konkurranse om å bruke samme ressurser på samme tid. Eks prosessor, filer, køer, database etc.. </li></ul>
    9. 9. Parallellisering på flere nivåer <ul><li>Fin kornet – Innenfor en </li></ul><ul><li>prosess. Eks Threads </li></ul><ul><li>Grov kornet – Dele og distribuere oppgaver til </li></ul><ul><li>flere servere i et nettverk. </li></ul><ul><li>Flere prosesser. Bruk av filer, meldingskøer, </li></ul><ul><li>database etc. </li></ul>
    10. 10. Finkornet parallellisering i Java
    11. 11. Java 1.4 og før, java.util.concurrent i 1.5 Tekst endres i Topp- og Bunntekst 09.06.09 s. Synchronized eksempel?
    12. 12. Executor og Future <ul><li>Executors håndterer livssyklusen til trådene dine </li></ul><ul><li>Executor kan eksekverer en Callable eller en Runnable og kan få tilbake en Future. </li></ul><ul><li>Callable tilsvarer Runnable, men med en resultatverdi, </li></ul>
    13. 13. Fork/Join jsr 166 <ul><li>Håndterer skalering over et titals tråder </li></ul><ul><li>Skal brukes til rene compute oppgaver </li></ul><ul><li>Består av: </li></ul><ul><ul><li>ForkJoinTask </li></ul></ul><ul><ul><li>ForkJoinPool </li></ul></ul><ul><ul><li>Parallel*Array </li></ul></ul>
    14. 15. Distribuert parallellisering
    15. 16. Hvordan? <ul><li>Parallellisering er oppsplitting </li></ul><ul><li>Man kan parallellisere distribuert med mange maskiner i et nettverk, eller man kan håndtere det innenfor jvm’en. </li></ul><ul><li>Dersom du skal distribuere oppgaver trenger du en måte å distribuere de oppsplittede delene på </li></ul><ul><li>Du trenger noen som kan prosessere hver enkelt del </li></ul><ul><li>Og du trenger kanskje noe som samler sammen og sørger for at alt er gjort. </li></ul>
    16. 17. Master – Worker (distribuering av tasks)
    17. 18. Map - Reduce <ul><li>Hvordan håndtere massiv parallellisering </li></ul><ul><li>På hundrevis og tusenvis av CPU’er </li></ul><ul><ul><li>OG DET SKAL VÆRE ENKELT FOR UTVIKLERE </li></ul></ul><ul><li>Automatisk distribuering og parallellisering </li></ul><ul><li>Feiltoleranse </li></ul><ul><li>I/O </li></ul><ul><li>Monitorering </li></ul>
    18. 19. MAPREDUCE <ul><li>Programmerer spesifiserer to funksjoner: </li></ul><ul><li>map(in_key, in_value) => list(out_key, intermidiate_value) </li></ul><ul><li>Eks: </li></ul><ul><li>Input (1, ”javaZone, mapReduce javaZone”) </li></ul><ul><li>Output {(”javaZone”, 1),(”mapReduce”,1),(”javaZone”,1)} </li></ul><ul><li>reduce(out_key, list(intermediate_value)) => list(out_value) </li></ul><ul><li>Eks: </li></ul><ul><li>Input (”javaZone”, {1,1}) </li></ul><ul><li>Output 2 </li></ul>
    19. 21. Map – Reduce (for distribuert computation) <ul><ul><li>function map(fn, a)     {         for (i = 0; i < a.length; i++)         {             a[i] = fn(a[i]);         }     } </li></ul></ul><ul><ul><li>function reduce(fn, a, init) {         var s = init;         for (i = 0; i < a.length; i++)             s = fn( s, a[i] );         return s;     } </li></ul></ul>
    20. 24. <ul><li>The really interesting thing I want you to notice, here, is that as soon as you think of map and reduce as functions that everybody can use, and they use them, you only have to get one supergenius to write the hard code to run map and reduce on a global massively parallel array of computers, and all the old code that used to work fine when you just ran a loop still works only it's a zillion times faster which means it can be used to tackle huge problems in an instant. </li></ul><ul><li>  </li></ul><ul><li>                 - Joel Spolsky </li></ul>
    21. 25. <ul><li>Men database community er litt mer avventende: </li></ul><ul><li>A giant step backward in the programming paradigm for large-scale data intensive applications </li></ul><ul><li>A sub-optimal implementation, in that it uses brute force instead of indexing </li></ul><ul><li>Not novel at all -- it represents a specific implementation of well known techniques developed nearly 25 years ago </li></ul><ul><li>Missing most of the features that are routinely included in current DBMS </li></ul><ul><li>Incompatible with all of the tools DBMS users have come to depend on </li></ul><ul><li>     http://www.databasecolumn.com/2008/01/mapreduce-a-major-step-back.html </li></ul>
    22. 26. Hva egner seg for parallellisering <ul><ul><li>Oppgaver som er bundet av ressurser (prosessor, minne, IO) </li></ul></ul><ul><ul><li>Søk </li></ul></ul><ul><ul><li>Sortering </li></ul></ul><ul><ul><li>Når du skal utføre samme operasjon for alle elementene i en iterering </li></ul></ul><ul><ul><li>Kalkuleringer, regneoperasjoner </li></ul></ul><ul><ul><li>Oppgaver med mye I/O (mye venting) </li></ul></ul><ul><ul><li>Behandling av STORE datasett </li></ul></ul><ul><ul><li>Men også nye web 2.0 tjenester </li></ul></ul>
    23. 27. Hvor parallellt? <ul><li>Runtime.getRuntime().availableProcessors(); </li></ul>+1? x2? x4? Gjør målinger
    24. 28. Hva kan man oppnå av ytelse Tekst endres i Topp- og Bunntekst 09.06.09 s.
    25. 29. Parallellisering <ul><li>FOR MOT </li></ul>Tekst endres i Topp- og Bunntekst 09.06.09 s. <ul><li>Redusert ytelse (contention, context switcher etc) </li></ul><ul><li>Økt kompleksitet </li></ul><ul><li>Vanskelig å debugge </li></ul><ul><li>Samtidighetsproblematikk </li></ul><ul><li>Mer feil! </li></ul><ul><li>Bedre troughput </li></ul><ul><li>Bedre lastbalansering </li></ul><ul><li>Bedre skalering </li></ul><ul><li>Kortere transaksjoner </li></ul><ul><li>Utnytter tilgjengelig hardware bedre </li></ul>Performance: samme ytelse med mindre ressurser Skalering: mer ytelse med mer ressurser
    26. 30. Ikke overdriv <ul><li>Parallellisering skal ikke brukes over alt, men dersom du har krav som krever det, målinger som sier at kravene ikke er nådd, og prøvd ”alt” annet . </li></ul>
    27. 31. Eksempel fra BBS
    28. 32. Problembeskrivelse <ul><li>mottar store filer bestående av mange oppdrag som inneholder mange transaksjoner </li></ul><ul><ul><ul><ul><ul><li>Filformat: </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>…… </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>oppdragstartrecord…………….. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>transaksjonsrecord……………. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>transaksjonsrecord……………. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>transaksjonsrecord……………. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>oppdragstartrecord…………….. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>transaksjonsrecord……………. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>transaksjonsrecord……………. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>transaksjonsrecord……………. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>transaksjonsrecord……………. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>transaksjonsrecord……………. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>…… </li></ul></ul></ul></ul></ul>
    29. 33. Problem <ul><li>Tar for lang tid </li></ul><ul><li>For lange transaksjoner </li></ul><ul><li>Ikke lastbalansert </li></ul><ul><li>Klarer ikke å ”mette” databasen med nok trykk </li></ul><ul><li>Prosessorene står stort sett og idler </li></ul>Tekst endres i Topp- og Bunntekst 09.06.09 s.
    30. 34. Løsning <ul><li>På hver server kjører en prosess som regelmessig skanner et filområde etter nye filer </li></ul><ul><li>Når det kommer en fil splitter vi opp store filer i mindre filer (splitter på hele oppdrag) </li></ul><ul><li>Lagrer de mindre filene som filer i databasen (blob) </li></ul><ul><li>Lagrer et WorkItem (ticket) i databasen som beskriver et stykke arbeid som skal gjøres (behandling av fil) </li></ul><ul><li>Hver server har en workerprosess som skanner databasen regelmessig etter work_item’s. </li></ul><ul><li>Når workerprosessen finner work_items utføres de i tråder. </li></ul>
    31. 35. Workflow Tekst endres i Topp- og Bunntekst 09.06.09 s. Database Små filer Filoppsplitter (MASTER) Tjeneste (WORKER) Stor fil work_item
    32. 36. Tekst endres i Topp- og Bunntekst 09.06.09 s.
    33. 37. s.
    34. 38. 1 tråd på en server Tekst endres i Topp- og Bunntekst 09.06.09 s. Antall tråder = 1 Behandlinger per sekund = 800
    35. 39. 2 tråder på en server Antall tråder = 2 Behandlinger per sekund = 1500
    36. 40. 4 tråder på en server Antall tråder = 4 Behandlinger per sekund = 2600
    37. 41. 4 tråder på 2 servere = 8 Antall tråder = 8 Behandlinger per sekund = 4200
    38. 42. 8 tråder på 2 servere = 16 Antall tråder = 16 Behandlinger per sekund = 6000
    39. 43. Transaksjoner / sekund med forskjellig antall tråder Tekst endres i Topp- og Bunntekst 09.06.09 s.
    40. 44. Gåte: Hva er vår bottleneck?
    41. 45. Oppsummering <ul><li>Ikke beveg deg ut på glattisen uten videre </li></ul><ul><li>Lag det riktig først </li></ul><ul><li>Baser deg på krav </li></ul><ul><li>Baser deg på målinger/tester – ikke gjett </li></ul><ul><li>Ikke parallelliser over alt, kun små deler der du trenger det og får uttelling for det </li></ul><ul><li>Men </li></ul><ul><li>God støtte i java </li></ul><ul><li>Trenger ikke skrive om hele applikasjonen </li></ul><ul><li>Begynn forsiktig, gå gradvis </li></ul><ul><li>Hadoop og ec2 gjør dette enkelt, billig og </li></ul><ul><li>tilgjengelig for alle </li></ul>
    42. 46. Noen referanser <ul><li>Java Concurrency in Practice (Brian Goetz) </li></ul><ul><li>The Free Lunch Is Over Dr. Dobbs Journal, 30 mars 2005 </li></ul><ul><li>Jsr-166 </li></ul><ul><li>Java Concurrency Wiki </li></ul><ul><li>Hadoop </li></ul><ul><li>Amazon ec2 </li></ul>
    43. 47. www.bbs.no

    ×