hadoop ja mapreduce

27
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

Upload: pasi-heinonen

Post on 19-Jun-2015

390 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Hadoop ja MapReduce

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

Page 2: Hadoop ja MapReduce

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.

Page 3: Hadoop ja MapReduce

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

Page 4: Hadoop ja MapReduce

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

Page 5: Hadoop ja MapReduce

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.

Page 6: Hadoop ja MapReduce

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

Page 7: Hadoop ja MapReduce

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));

Page 8: Hadoop ja MapReduce

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 lisätään output-tiedostoon reduce-partitioon.

7. Lopulta MapReduce on tuottanut inputista halutun outputin hadoopin hdfs:lle.

Huom: Single-nodena prosessi on täysin sama, ts. MapReduce prosessin kannalta ei ole merkitystä onko klusterissa 1 vai 1000 konetta.

Page 9: Hadoop ja MapReduce

M ja R suoritus tarkemmin Key/value-parin operointi ja ryhmittely Map ja Reduce workereissa

Page 10: Hadoop ja MapReduce

M ja R rinnakkainen suoritus Key/value-parin operointi ja ryhmittely Map ja Reduce workereissa

Page 11: Hadoop ja MapReduce

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”

Page 12: Hadoop ja MapReduce

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.

Page 13: Hadoop ja MapReduce

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.

Page 14: Hadoop ja MapReduce

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)

Page 15: Hadoop ja MapReduce

Hadoop ja C++

• Hadoop Pipes

– Bindaus kirjasto natiiville C++ koodille

– Toimii lokaalisti socketeilla

• Suorituskyky parempi mutta riskinä tietoturva ja suora yhteys Kerneliin

Page 16: Hadoop ja MapReduce

Hadoop ja Python

• Optio 1: Käytä Jythonia

– Jython on subset Pythonista, hitaampi

• Optio 2: Käytä Hadoop Streamia

Page 17: Hadoop ja MapReduce

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ä

Page 18: Hadoop ja MapReduce

HBase

Page 19: Hadoop ja MapReduce

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

Page 20: Hadoop ja MapReduce

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.

Page 21: Hadoop ja MapReduce

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.

Page 22: Hadoop ja MapReduce

Pig latin

Page 23: Hadoop ja MapReduce

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ää.

Page 24: Hadoop ja MapReduce

Data-analyysiesimerkki

User Url Time

Amy cnn.com 8:00

Amy bbc.com 10:00

Amy flickr.com 10:05

Fred cnn.com 12:00

Hae 10 eniten vierailtua sivua per kategoria

Url Category PageRank

cnn.com News 0.9

bbc.com News 0.8

flickr.com Photos 0.7

espn.com Sports 0.9

Visits Url Info

Page 25: Hadoop ja MapReduce

Pig-ohjelman dataflow

Load Visits

Group by url

Foreach url

generate count Load Url Info

Join on url

Group by category

Foreach category

generate top10 urls

Page 26: Hadoop ja MapReduce

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’;

Page 27: Hadoop ja MapReduce

Yahoon Sikajengi