SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Hadoop

                   Advent of Big Data

”if you know all the questions you’re going to ask from your data, you
probably don’t need that data”



                                                                         P. Heinonen
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.
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
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
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.
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
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));
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 output
Huom: 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.
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
     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”
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.
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.
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)
Hadoop ja C++
• Hadoop Pipes
  – Bindaus kirjasto natiiville C++ koodille
  – Toimii lokaalisti socketeilla
• Suorituskyky parempi mutta riskinä tietoturva
  ja suora yhteys Kerneliin
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ä
  – stdin ja stdout tekee loput
  – Esim pythonilla map ja reduce josta luetaan
    komentorivilta ja kirjoitetaan komentoriville
  – Myös batch scriptillä
HBase
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
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.
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.
Pig latin
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ää.
Data-analyysiesimerkki
   Hae 10 eniten vierailtua sivua per kategoria

           Visits                         Url Info
User       Url       Time       Url       Category   PageRank

Amy     cnn.com      8:00    cnn.com       News        0.9

Amy     bbc.com      10:00   bbc.com       News        0.8

Amy     flickr.com   10:05   flickr.com    Photos      0.7

Fred    cnn.com      12:00   espn.com      Sports      0.9
Pig-ohjelman dataflow
Load Visits

       Group by url

                   Foreach url
                                                   Load Url Info
                 generate count

                                     Join on url

                                  Group by category

                               Foreach category
                              generate top10 urls
Itse Pig-ohjelma
visits      = 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’;
Yahoon Sikajengi

Contenu connexe

En vedette

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

En vedette (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Hadoop ja MapReduce

  • 1. Hadoop Advent of Big Data ”if you know all the questions you’re going to ask from your data, you probably don’t need that data” P. Heinonen
  • 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. 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. 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. 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. 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. 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. 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 output Huom: 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. M ja R suoritus tarkemmin Key/value-parin operointi ja ryhmittely Map ja Reduce workereissa
  • 10. M ja R rinnakkainen suoritus Key/value-parin operointi ja ryhmittely Map ja Reduce workereissa
  • 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. 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. 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. 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. Hadoop ja C++ • Hadoop Pipes – Bindaus kirjasto natiiville C++ koodille – Toimii lokaalisti socketeilla • Suorituskyky parempi mutta riskinä tietoturva ja suora yhteys Kerneliin
  • 16. Hadoop ja Python • Optio 1: Käytä Jythonia – Jython on subset Pythonista, hitaampi • Optio 2: Käytä Hadoop Streamia
  • 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. HBase
  • 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. 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. 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.
  • 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. Data-analyysiesimerkki Hae 10 eniten vierailtua sivua per kategoria Visits Url Info User Url Time Url Category PageRank Amy cnn.com 8:00 cnn.com News 0.9 Amy bbc.com 10:00 bbc.com News 0.8 Amy flickr.com 10:05 flickr.com Photos 0.7 Fred cnn.com 12:00 espn.com Sports 0.9
  • 25. Pig-ohjelman dataflow Load Visits Group by url Foreach url Load Url Info generate count Join on url Group by category Foreach category generate top10 urls
  • 26. Itse Pig-ohjelma visits = 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’;