Upload
matejkahu
View
218
Download
0
Embed Size (px)
DESCRIPTION
BigData_-_Eloadasjegyzet
Citation preview
Budapesti Mszaki s Gazdasgtudomnyi Egyetem
Big Data elemzsi eszkzk nylt
forrskd platformokon eladsjegyzet
Ksztette:
Cseh Gbor
Kcs Balzs
Vradi Szabolcs
Elad: Prekopcsk Zoltn
Lektorlta: Holczer Tams, Prekopcsk Zoltn
BMEVITMAV15
Budapest, 2014
L
A
T
E
X
Tartalomjegyzk
1. Bevezets 4
2. Elosztott rendszerek, Hadoop, HDFS 6
2.1. Elosztott rendszerek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.1. Elosztott fjlrendszerek . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2. Hadoop trtnete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3. Hadoop HDFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4. Hadoop szerver szerepek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4.1. Name Node (NN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4.2. Secondary Name Node (SNN) . . . . . . . . . . . . . . . . . . . . . 10
2.4.3. Data Node (DN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5. Adatmveletek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5.1. Olvass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5.2. rs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3. MapReduce 12
3.1. Az ltalnos MapReduce modell . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.1. 1. Feladat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.2. 2. Feladat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.3. Hadoop MapReduce felptse . . . . . . . . . . . . . . . . . . . . . 14
3.1.4. Hadoop Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.5. Meghibsodsok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4. MapReduce programozsi mintk, Streaming 17
4.1. 1. feladat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2. 2. feladat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.3. 3. feladat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.4. 4. feladat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.5. Streaming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.6. Adattmrts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5. Hadoop csomagok, SQL for Hadoop: Hive 22
5.1. Hadoop csomagok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.1.1. Flume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.1.2. Sqoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.1.3. Hive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.1.4. Pig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.1.5. HBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.1.6. Mahout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1
TARTALOMJEGYZK
5.1.7. Zookeeper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.2. SQL for Hadoop: Hive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.2.1. A Hive felptse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6. Pig programozs 26
6.1. Bevezets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.2. A fjlok feltltse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.3. A script megrsa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.3.1. Relci denilsa . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.3.2. Relci denilsa smval . . . . . . . . . . . . . . . . . . . . . . . 28
6.3.3. Relci ltrehozsa egy msik relcibl . . . . . . . . . . . . . . . 28
6.3.4. Adatok kirsa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.3.5. Oszlop kivlasztsa a relcibl . . . . . . . . . . . . . . . . . . . . 29
6.3.6. Adatok rsa a HDFS-re . . . . . . . . . . . . . . . . . . . . . . . . 29
6.3.7. Kt relci illesztse (Join mvelet) . . . . . . . . . . . . . . . . . . 29
6.3.8. Adatok rendezse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.3.9. Adatok szrse s csoportostsa . . . . . . . . . . . . . . . . . . . . 30
6.4. Tovbbi forrsok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7. Hadoop klaszterek kongurcija s zemeltetse 32
7.1. Hardver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.2. Opercis rendszer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.3. Hlzat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.4. Disztribci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7.5. Feladatok temezse s kvtk hasznlata . . . . . . . . . . . . . . . . . . 34
8. Hadoop 2.0 - YARN, Tez, Spark 35
8.1. Hadoop 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
8.1.1. Kialakulsa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
8.1.2. Klnbsgek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
8.1.3. YARN job futtats . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
8.2. Tez . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8.2.1. Eloszott rendezsi plda Tez-ben . . . . . . . . . . . . . . . . . . . 37
8.3. Impala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
8.4. Spark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.5. Storm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
9. Hadoop & NoSQL: HBase 40
9.1. Adatbzis-kezel rendszerek . . . . . . . . . . . . . . . . . . . . . . . . . . 40
9.1.1. Elosztott adatbzis-kezel rendszerek . . . . . . . . . . . . . . . . . 40
9.2. NoSQL adatbzis-kezel rendszerek . . . . . . . . . . . . . . . . . . . . . . 41
9.3. HBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
9.3.1. Mkdse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
9.3.2. HBase adatszervezsi plda . . . . . . . . . . . . . . . . . . . . . . 44
A. MapReduce Patterns, Algorithms, and Use Cases 45
A.1. Basic MapReduce Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
A.1.1. Counting and Summing . . . . . . . . . . . . . . . . . . . . . . . . 46
A.1.2. Collating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2
TARTALOMJEGYZK
A.1.3. Filtering (Grepping), Parsing, and Validation . . . . . . . . . . . . 47
A.1.4. Distributed Task Execution . . . . . . . . . . . . . . . . . . . . . . 47
A.1.5. Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
A.2. Not-So-Basic MapReduce Patterns . . . . . . . . . . . . . . . . . . . . . . 48
A.2.1. Iterative Message Passing (Graph Processing) . . . . . . . . . . . . 48
A.2.2. Distinct Values (Unique Items Counting) . . . . . . . . . . . . . . . 51
A.2.3. Solution II: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
A.2.4. Cross-Correlation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
A.3. Relational MapReduce Patterns . . . . . . . . . . . . . . . . . . . . . . . . 54
A.3.1. Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
A.3.2. Projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
A.3.3. Union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
A.3.4. Intersection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
A.3.5. Dierence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
A.3.6. GroupBy and Aggregation . . . . . . . . . . . . . . . . . . . . . . . 56
A.3.7. Joining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3
1. elads
Bevezets
BigData dencija: Olyan nagy s komplex adathalmaz, amelyet mr a szoksos al-
kalmazsainkkal nem tudunk kezelni.
Ez nem egy tl pontosan rtelmezhet denci, ezrt ez felhasznlsi terletenknt vl-
tozik (1.1. bra). Ha a felhasznlsi terlet
az Excel, akkor 1 milli sor, ha
valamilyen memria alap feldolgozeszkz, akkor amennyi memrink van,
azaz 4-8 GB, ha
valamilyen adatbzis pl. MySQl, akkor 50-100 GB, ha
az ltalunk ksztett hatkony diszket jl hasznl programok, akkor 1 TB
fltt szmt BigData-nak. Nagy ltalnossgban azt lehet mondani, hogy 50-100 GB
alatt nem szmt az adat BigData-nak, mert egy nagy memrival rendelkez felh szol-
gltatssal ezek az adatok mg nagyon jl kezelhetek.
1.1. bra. A BigData rtelmezse a felhasznlsi terlet fggvnyben
4
ELADS 1. BEVEZETS
Ettl nagyobb adatmennyisg esetn mr csak valamilyen elosztott rendszerrel tudjuk
hatkonyan kezelni az adatainkat, ilyen elosztott rendszer a Hadoop. A scale up felfogs
szerint, ha egy gpen szeretnnk minl nagyobb szmtsi kapacitst, akkor csak egysze-
ren felsklzzuk (azaz tbb memrit s ersebb processzort tesznk bele), mg a scale
out szerint teljesen hagyomnyos PC-ken elosztott rendszerben gondolkodunk.
Egy msik felfogs szerint onnantl beszlnk BigData problmkrl, amikor az adat
olyan nagy, hogy az mr rszv vlik a problmnak, pldul amikor mr nem frnk a
memriba, vagy amikor mr egy szmtgpen napokig fut az adott feladat. sszefog-
lalva brmilyen problma, amely abbl szrmazik, hogy tl sok adatot kell kezelni. Ezek
legtbbszr valamilyen hardver korltbl addnak (1.2. bra), amelyek egy norml PC
esetn
12-24 TB mret merevlemezt,
32-64 GB mret memrit
jelent. Ezen fell jelents problma az is, ha egy tlagos 2 TB mret merevlemezrl
le akarjuk olvasni a teljes tartalmt, akkor az 6 rba tellene a merevlemez tereszt
kpessge miatt.
1.2. bra. A hardver korltok egy tlagos PC esetn
5
2. elads
Elosztott rendszerek, Hadoop, HDFS
2.1. Elosztott rendszerek
Az elosztott rendszerek lehetv teszik azt, hogy brmilyen mveletet tbb szmtgp
kztt elosztottan hajtsunk vgre, ezltal megnvelve annak sebessgt, kapacitst, ren-
delkezsre llst. Egy elosztott rendszer rengeteg szmtgpbl llhat, melyek egy kzs
cl rdekben egytt tudnak dolgozni, s mkdni. Ezek a szmtgpek egy hlzaton
(vagy akr az interneten) keresztl vannak egymssal sszektve, gy tudnak kommuni-
klni.
Fontos megemlteni, hogy a meghibsods tnye teljesen ms, mint egy egyedlll sz-
mtgp esetben. Az elosztott rendszerek ezt rugalmasan tudjk kezelni, folytatdik a
rendszer futsa szinte szrevehetetlenl. Egyedlll gp esetben termszetesen ez nem
lehetsges (a hiba tpustl fggen). Ez a fajta rugalmassg azrt is fontos, mert egy
tbb tz vagy szz gpbl ll hlzat esetn a meghibsods egy napi vagy heti rendsze-
ressggel elfordul esemny, s nagyon fontos, hogy 1-2 gp kiesse esetn a tbbi gond
nlkl tovbb mkdjn, st lehetleg a feladatok futsa se szakadjon meg.
Tbbfle clra is hasznljk ezeket a rendszereket:
Elosztott adattrol kzpontok: Ezeket a rendszereket kifejezetten nagy mennyi-
sg adatok trolsra talltk ki. Mivel egy adathordozn s szmtgpen megle-
hetsen limitlt a trolhat adatmennyisg, gy ezt tbb szmtgpen tbb adat-
hordozn tudjuk trolni. Tbbnyire az adatok megfelelen vannak repliklva is, gy
az adatveszts kockzata jelentsen lecskken.
Elosztott szmtsi kapacits: A msik nagy felhasznls, amikor az elosztott
rendszereket a teljestmnyk miatt kapcsoljk ssze egy nagy szmtsi felhv.
Ilyenkor egy bizonyos nagy szmtsigny feladatot nagyon gyorsan s hatkonyan
vgre lehet hajtani, mg ez egy nll szmtgpen tbb vig eltarthatna (pl. gene-
tikai mintk elemzse). Az ilyen tpus rendszerek lehetnek elre kongurltak, s
teleptettek, de lehetnek akr nkntesek is, ahova egyszer felhasznli szmtg-
peket az interneten keresztl kapcsolnak be a rendszerbe, s hasznljk az erforr-
saikat. (Ezek lehetnek a GRID computing, HPC, Volunteer computing, Distributed
programming, MPI. Ezek mindegyike szmts- s nem adatignyes feladatokra van-
nak optimalizlva.)
6
ELADS 2. ELOSZTOTT RENDSZEREK, HADOOP, HDFS
2.1.1. Elosztott fjlrendszerek
Rgen egy 1 GB-os merevlemezt krlbell 4 MB/s sebessggel tudtunk olvasni. Mra
a technolgia sokat javult a trolhat adatmennyisg tern, de az olvassi sebessg nve-
kedse nem a vrt rtkeket mutatja. Egy ma kaphat 2 TB-os merevlemezt 100 MB/s
sebessggel tudunk olvasni, ami mg gy is lassnak mondhat abban az esetben, ha a
teljes lemeztartalmat szekvencilisan vgig szeretnnk olvasni (kb. 5,5 ra). Ha ezt az
adatmennyisget elosztva 100 db merevlemezen trolnnk, akkor az adatokat ugyanilyen
olvassi sebessg mellett szinte nhny perc alatt fel tudnnk dolgozni. Emellett a sta-
tisztikk szerint 100 db merevlemezbl 5 hibsodik meg vente. Ezen okok miatt kezdtk
el ltrehozni az elosztott fjlrendszereket.
Az elosztott fjlrendszerek lnyege, hogy a fjljainkat egy kliens-szerver architektra se-
gtsgvel trolhatjuk illetve rhetjk el. Egy elosztott fjlrendszerben egy vagy tbb
kzponti szerver tallhat, amelyek troljk az alapvet informcikat a tbbi szerverrl,
melyek szma elmletben korltlan lehet. Ezek a kitntetett szerepkrrel rendelkez szer-
verek troljk a fjlstruktra hierarchikus felptst, a metaadatokat, s a fjlok konkrt
szerveren val helyt. A gyakorlatban legalbb kett kzponti szervert hasznlnak annak
rdekben, hogy redundancia biztostott legyen.
Ha egy elosztott fjlrendszerbeli fjlt egy kliens gppel szeretnnk elrni, akkor gyakor-
latilag semmilyen klnbsget nem vesznk szre, teht teljesen olyan, mintha az adott
fjlt egy darab szerveren troltuk volna, vagyis a trol Node-ok struktrja elfedsre
kerl. Errl az elfedsrl az elosztott rendszer gondoskodik. Az elosztott rendszerek ers-
sge abban rejlik, hogy ltaluk knnyen elrhetek tbb kliens szmra is ugyanazok az
adatok, s gyakorlatilag egy kzponti trolegysgrl beszlnk, a kliensek nem trolnak
loklisan olyan fjlokat, amelyek ms kliensek szmra is fontosak lehetnek.
2.2. Hadoop trtnete
A 2.1. brn lthat a Hadoop rendszer fejldstrtnete. Eredetileg a Hadoop egy elosz-
tott fjlrendszerknt indult, amelyet a Google kezdett el fejleszteni Google File System
nven. Ezutn tbben megprbltk ezt reproduklni, s elkszteni Open Source projekt
keretein bell.
2.1. bra. Hadoop kialakulsnak trtnete
Ezek utn a Yahoo is elkezdte ugyanezt a rendszert sajt maga elkszteni. A prblko-
zsoknak s a fejlesztseknek ksznheten egyre tbben elkezdtk hasznlni a Hadoop
rendszert (pl. Facebook, Last.FM), s ennek kvetkeztben az Apache felkarolta, s egy
7
ELADS 2. ELOSZTOTT RENDSZEREK, HADOOP, HDFS
dediklt Open Source fejlesztsi projekt keretein bell a mai napig k foglalkoznak a t-
mval. Tbb nagy cg zleti szolgltatsknt is elindtotta a sajt tovbbfejlesztett s
kiegsztett verzijt. A 2.2. brn lthat, hogy 2012-ben a Hadoop rendszert cges kr-
nyezetben 1 ven bell nagyon sokan tervezik bevezetni, teht jelents nvekeds vrhat
a piacon.
2.2. bra. Bevezetni kvnt technolgik cges krnyezetben
2.3. Hadoop HDFS
A Hadoop rendszer egy teljesen sajt, egyedlll elosztott fjlrendszert hasznl, a Ha-
doop Distributed File System-et (HDFS). Ez a fjlrendszer arra lett tervezve, hogy kife-
jezetten nagy mret fjlokat troljunk rajta, mivel a rendszerben nagy adathalmazokon
tudunk valamilyen lekrdezst, vagy mveletet egyszeren vgrehajtani. Pldul log-ok
esetn rdemes nagyobb egysgekben trolni az adatokat, gy nagy fjlmret rhet el.
Az adatokat ltalban egyszer letroljuk, s tbbszr teljesen vgig kell olvasnunk ket
(full scan).
A Hadoop fjlrendszer arra lett tervezve, hogy tlagos otthoni PC-kre vagy tlagos szer-
verekre is telepthet legyen, ezzel is azt sztnzve, hogy kltsghatkonyabban tudjunk
egy elosztott rendszert kialaktani (ez nagy mrtkben klnbzik a SAN szemllettl).
A HDFS egy blokkalap fjlrendszer (tipikusan 64-256 MB egy blokkmret), teht a nagy
fjlok (tipikusan a GB-os nagysgrendben) ilyen mret blokkokra daraboldnak szt, s
a blokkok egymstl fggetlenl trolhatk ms-ms erforrsokon, s szmtgpeken.
A blokkmretet az elrsi id miatt kell nagyobbra venni, mint egy tlagos fjlrendszer
esetben. A fentebb emltett 64-256 MB blokkmretnl nagyobbat mr nem rdemes
vlasztani, mert ezzel elvesztennk a prhuzamosts lehetsgt, mivel a szmtsi fel-
adatok esetben a blokkok betltdnek a memriba, teht gy tbb is befr egyszerre,
nem kell llandan cserlgetni ket a szmts sorn. Ez a gyakorlatban azt jelenti, hogy
egy 1 GB-os fjl esetben, 1 MB-os blokkok esetn az olvass sorn a merevlemez fejnek
8
ELADS 2. ELOSZTOTT RENDSZEREK, HADOOP, HDFS
mozgatsa 1000 10ms keressi idt jelent. Nagyobb blokkmret esetn ez a ksleltetsjval cskken.
Ezen kvl nagyon fontos, hogy minden blokk replikldik legalbb egy - de ltalban
tbb (2-3) - msik szmtgpen is, teht ezzel elkerlhet az adatveszts (Hadoop esetn
az alaprtelmezett replikcis faktor a 3, ez azt jelenti, hogy minden blokk 3 klnbz
helyen van eltrolva). Ha kiesik egy szmtgp, azt egyszeren kivehetjk a rendszer-
bl, s egy jat tehetnk a helybe. Ezltal a rendszer nagyon jl sklzhat, rendkvl
jl mkdik risi gppark esetn is. A blokkok helynek meghatrozst egy komplex
terhelseloszt algoritmus hatrozza meg, ami tbbek kztt gyelembe veszi az egyes
gpek terhelst, a repliklsbl szrmaz adatforgalom minimalizlst, illetve a minl
nagyobb megbzhatsgot (ennek rdekben lehetleg tbb rack illetve adatpark kztt is
megosztja a replikkat).
2.4. Hadoop szerver szerepek
A fjlrendszerben tbb kitntetett szereppel rendelkez gpnek kell lennie ahhoz, hogy az
egsz rendszer megfelelen tudjon mkdni (2.3. bra).
2.3. bra. Hadoop szerver szerepek
forrs: http://www.atlantbh.com/how-to-build-optimal-hadoop-cluster/
2.4.1. Name Node (NN)
Ebbl ltalban egy van egy Hadoop rendszerben, feladata a metaadatok trolsa s
karbantartsa. Gyakorlatilag tudja azt, hogy milyen mappk, milyen fjlok tallhatak
a fjlrendszeren. Ezt kt fjl segtsgvel tudja trolni:
Namespace image: Ez egy lenyomat a fjlokrl, mappkrl.
Edit log: A legutbbi namespace image-hez kpest trtnt vltoztatsokat rja le,
ezltal nem kell mindig azt az image-t frissteni, ami jelents erforrsignnyel jrna.
Ennek ellenre ezt a log-ot egy id utn bele kell fznnk a namespace image-be,
mert feleslegesen nagy mretv vlna.
9
ELADS 2. ELOSZTOTT RENDSZEREK, HADOOP, HDFS
Fontos megemlteni, hogy a Data Node-ok rendszeresen jelentik a nluk lv blokkok
listjt a Name Node-nak, amit termszetesen nyilvn is tart. gy ha egy kliens a Name
Node-hoz fordul egy fjlrt, akkor ebbl a naplbl tudja, hogy melyik blokkok kellenek,
s a jelentsekbl el tudja irnytani a klienst a megfelel Data Node-hoz, ugyanis ezen
jelentsek nlkl a Name Node nem tudn, hogy milyen blokkok tallhatak a Data Node-
okon (amelyek nem kerltek mentsre mg a namespace image-be).
A metaadatok trolsnak htrnya, hogyha a Name Node kiesik, s a metaadatokrl
nincs biztonsgi msolatunk, akkor minden adatunk elveszik annak ellenre, hogy zi-
kailag az adatblokkok megmaradnak a Data Node-okon. Ennek kikszblsre RAID
s/vagy NFS (Network File System) technolgikat hasznlnak, gy mind helyileg, mind
hlzaton is tudjuk ezeket trolni.
Ltezik egy Name Node High Avaibility megolds, amely szerint tbb Name Node van a
rendszerben. gy mindegyik folyamatosan trolja az informcikat s kzlk valamelyik
aktv, a tbbi pedig passzv, a kliensek pedig mindig az aktvhoz fordulnak. Az aktv
kiesse esetn ekkor brmelyik passzv rgtn tveheti az aktv szerept. Ez a megolds
termszetesen jelentsen nagyobb terhet r a Name Node-ra, hiszen biztostani kell a
konzisztencit az aktv s passzv Name Node-ok kztt.
2.4.2. Secondary Name Node (SNN)
Ez a szerepkr ahogy elsre gondolnnk nem egy msodlagos Name Node, teht az el-
nevezse megtveszt lehet. Feladata az, hogy segtsen a NameNode-nak az ltala trolt
adatok kezelsben, s a namespace image karbantartsban. gondoskodik arrl, hogy
a fentebb emltett Edit log-ot belefzze a Namespace image-be, s ezeket jra tadja az
elsdleges Name Node-nak.
2.4.3. Data Node (DN)
Ezek a szmtgpek troljk gyakorlatilag a fentebb emltett adatblokkokat. k jelent-
keznek be a Name Node-nak egy fjl keresse sorn, hogy annak a fjlnak egy blokkja
nluk tallhat meg (reporting). A reporting folyamatosan megy, gy szerez tudomst a
Name Node a tl s alul repliklt blokkokrl, illetve gy tudja a klienst a megfelel Data
Node-hoz irnytani.
2.5. Adatmveletek
2.5.1. Olvass
Az olvasst egy pldn keresztl mutatjuk be. A 2.4. brn lthatjuk, hogy a kliens el-
szr a Name Node-dal veszi fel a kapcsolatot (), akinek megmondja, hogy a Results.txt
llomnyt szeretn olvasni. A Name Node az ltala trolt metaadatok alapjn megmondja
a kliensnek, hogy ennek a fjlnak hrom blokkja ltezik, s a blokkok kln-kln melyik
Data Node-okon vannak trolva (). Ezutn a kliens egyesvel kzvetlenl az adatblokko-
kat tartalmaz valamelyik Data Node-hoz fordul, s letlti azokat () (minden adatblokk
esetben az azt tartalmaz valamelyik Data Node-hoz).
10
ELADS 2. ELOSZTOTT RENDSZEREK, HADOOP, HDFS
2.4. bra. HDFS olvass
forrs: http://blog.csdn.net/suifeng3051/article/details/17288047
2.5.2. rs
Az rs hasonl mdon trtnik, mint az olvass. A 2.5. brn lthat, hogy a kliens
elszr felveszi a kapcsolatot a Name Node-al (), hogy egy File.txt-t szeretne trolni,
amelyet 3 blokkra tudott felbontani. A Name Node visszakld annyi Data Node cmet,
amennyi blokk szksges (). A kliens ezutn kzvetlenl a Data Node-oknak elkldi az
egyes blokkokat (). Ha ez kszen van, akkor a Data Node-ok replikljk az j blokkokat
(), s jelentik ezt a Name Node-nak ().
2.5. bra. HDFS rs
forrs: http://blog.csdn.net/suifeng3051/article/details/17288047
11
3. elads
MapReduce
A MapReduce nem egy programnyelv hanem programozsi modell, egy programozsi
keretrendszer, amely megadja, hogy hogyan hozzunk ltre elosztott programokat. Kife-
jezetten alkalmas arra, hogy nagy adathalmazon dolgozzon elosztott mdon, sok adat
prhuzamos feldolgozsra van kitallva. Mivel nem egy programnyelv, ezrt van megva-
lstsa tbbfle programozsi nyelv esetn is, pldul Java, Python, R stb. A MapReduce
nem csak Hadoop specikus, ms adattrhzakat is lehet MapReduce-ban programozni,
ilyen pldul a MongoDB.
3.1. Az ltalnos MapReduce modell
Egy pldn keresztl nzzk meg az ltalnos MapReduce modell mkdst. Adott
egy adathalmaz, amely hmrskleti rtkeket trol. Hatrozzuk meg az vi maximum
hmrskletet.
Adat: v, hnap, nap, ra, perc, vros, hmrsklet (nagy adathalmaz)
Eredmmy: v, maximum hmrsklet (kis adathalmaz)
Ha egy gpen szeretnnk leprogramozni ezt a feladatot, akkor egy sima maximum ki-
vlasztst kell valamilyen nyelven implementlnunk, gy nem kell memriban tartani az
adatot, egyszeri vgig olvasssal meg tudjuk mondani a krdsre a vlaszt. Ha viszont mr
annyi adatunk van, hogy egy gpen ezt nem tudjuk trolni, akkor valamilyen elosztott
rendszeren kell az adott problmt megoldani. Ez viszont nem egyszer, ezrt talltk
ki a MapReduce keretrendszert, amely elfedi a programoztl a prhuzamosts feladatt
(pl.: nem kell foglalkozni a gpek kztti kommunikcival, klnbz hibk s kiessek
kezelsvel, erforrs kiozstssal stb). A keretrendszer alapveten kulcs-rtk prokon
dolgozik, egy szveges tartalom esetn a kulcs az, hogy a fjl hanyadik sora, s az rtk
pedig a sor tartalma szvegknt. A MapReduce a nevbl addan kt lpsbl ll egy
Map-bl s egy Reduce-bl.
Map: (K1, V1) list(K2, V2)Reduce: (K2, list(V2)) list(K3, V3)
A Map lpsben kulcs-rtk pr jn bemenetknt s egy jfajta kulcs-rtk prt, listt
fog kiadni a kimenetn. A Reduce lps a Map kimenetn lv kulcs-rtk prokat kapja
meg, olyan formban, hogy az azonos kulcsokhoz tartoz sszes rtk egy listba kerl.
12
ELADS 3. MAPREDUCE
Errl a lpsrl a keretrendszer gondoskodik. Vgl a Reduce kimenetn jabb kulcs rtk
prokat fogunk kapni. Nzzk meg ez alapjn az elbbi pldt:
Map: (sorID, sor) (v, hmrsklet)Reduce: (v, list(hmrsklet)) (v, max(hmrsklet))
A Map bemenetn kulcs-rtk prokat kapunk, ami jelen esetben sorazonost-sor prokat
jelent. rdemes kiadnunk minden sorbl, hogy melyik vrl szl az a sor s mi volt az
ottani hmrsklet. Ezzel lnyegben a Map lpsben ebbl az adatbl kiszrjk azt
amire szksgnk van, s minden sorra kiadjuk ezt a prost gy, hogy az v lesz a kulcs.
A Reduce bemenetn megjelenik az v mint kulcs s az sszes abban az vben mrt
hmrsklet. A Reduce-bl pedig kiadjuk az vet s a maximum hmrskletet.
A MapReduce keretrendszerben megrt program esetn a programoznak annyi a fel-
adata, hogy logikailag megrjon egy Map s egy Reduce fggvnyt majd a keretrendszer
gondoskodik rla, hogy elossza ezt a feladatot. A Map fggvny bemenete lehet blokk,
fjl de akr sor is s a bemeneten egymstl fggetlenl soronknt hajtdik vgre. Teht
a Map lps trivilisan prhuzamosthat. A Reduce lps is, hogyha megkapja az egy
kulcshoz tartoz sszes elemet akkor az is egyszeren prhuzamosthat. A keretrend-
szer azt biztostja szmunkra, hogy amikor kijnnek ezek a kulcs rtk prok akkor ez
biztosan megrkezzen egy Reduce fggvny bemenetre gy, hogy az sszegyjts mr
tulajdonkppen megtrtnt. Ha kt gprl beszlnk akkor gy lehet elkpzelni, hogy
meg van rva egy Map fggvny, (hogy hogyan lehet kiszedni az vet s a hmrskleteket
az adatokbl) s itt a Map fggvnynek meg van adva az, hogy pros vszm adatokat
az egyikhez a pratlan vszm adatokat a msik gphez kldi. A Reduce gpen trtnik
ezeknek a listba rendezse, kulcs alapjn a berkez adatokat rendezi s utna knnyedn
ltre tudja hozni ezeket a listkat. Hadoop esetn az MapReduce keretrendszer gyel a
lokalits elvre is, teht minden adatot lehetleg ott dolgoz fel, ahol az rendelkezsre ll,
gy nagyban cskkentve a hlzati kommunikcit, s nvelve a sebessget.
3.1.1. 1. Feladat
Vannak dokumentumaink vagy valamilyen szveges fjlok amik soronknt tetszleges sz-
veget tartalmaznak, az elvrt eredmny az, hogy minden szra mondjuk meg, hogy hny-
szor szerepel.
Map: (sorID, sor) (sz, 1)Reduce: (sz, list(#)) (szo, #)
Ahogy ltunk egy szt, azt rgtn kiadjuk a Map oldalon, mg a Reduce oldalon egy sima
szmllt kell megvalstani. Ennek egy varicija, ha a Map oldalon megszmlljuk az
egyforma szavakat a sorban, s a szavak szmt adjuk meg a konstans 1 helyett. Az utbbi
megolds nagyobb terhet rak a Map oldalra, viszont cskkenti a hlzati kommunikcit
s a Reduce oldal terhelst.
3.1.2. 2. Feladat
Krem az sszes sort amiben szerepel a BME sz.
A feladatot Map oldalon lehet a legegyszerbben megoldani. A kiadott kulcs brmi lehet.
A Reduce egyszeren megismtli a kimenetn a bemenett.
13
ELADS 3. MAPREDUCE
Map: (sorID, sor) (?, sor)Reduce: dummy reduce
3.1.3. Hadoop MapReduce felptse
3.1. bra. A MapReduce mkdse Hadoop esetn
forrs: http://www.drdobbs.com/database/hadoop-the-lay-of-the-land/240150854
Vannak HDFS blokkjaink, a Hadoopban az esetek jelents rszben egy Map task egy
HDFS blokkon dolgozik (egy HDFS blokk egy szmtgpet jelent). A Map feladat so-
ronknt egymstl fggetlen, ltalban JAVA-ban megrt program rszletrl beszlnk,
indul egy JVM s az soronknt elkezdi feldolgozni. A kimenett pedig megfelelen irny-
tani kell a Reduce-ok fel. Az a feladata, hogy a megfelel kulcs elemeket a megfelel
Reduce-hoz juttassa el. A Map utn ltezik mg egy Partitioning fggvny ami kap egy
kulcsot s megmondja, hogy melyik Reduce folyamathoz tartozik, lnyegben ez egy hash
fggvny. A Particioning-et mr a Map gpen vgezzk. Tudunk csinlni egy Combi-
ner fggvnyt is ami egy adatblokkon a Partitioning utn lefuttat egy msik fggvnyt is.
Tudunk rni sajt particionl fggvnyt is de alaprtelmezetten egy egyenletes hash fgg-
vny, amely csak nagyon egyenetlen adateloszls esetn nem mkdik jl. Ahhoz, hogy
majd a Reduce-nl ssze tudjuk gyjteni a kulcshoz tartoz sszes rtket egy nagy Sor-
tolst kell vgrehajtani, trtnik egy loklis sort gy lesznek kisebb eredmnyhalmazaink
amik mr rendezettek s ezt kldik el a Reducer-nek. A kisebb eredmnyhalmazain-
kat egy sszefslses rendezssel rdemes sszefzni (termszetesen errl a keretrendszer
gondoskodik). A Reduce a kimenett egy HDFS fjlba szokta tipikusan kirni. Ahogy az
architektrbl ltszik egy MapReduce feladat indtsnak van egy elg nagy overhead-je
(ez akr perces nagysgrendbe is eshet), teht csak kellen nagy feladatok esetn rdemes
hasznlni, s interaktv feladatokra nem igazn alkalmas.
3.1.4. Hadoop Cluster
Vannak hasonl szerepek mint a fjlrendszer esetben. Master szerep: JobTraceker, felel
azrt, hogy egy teljes job vgrehajtsra kerljn. A TaskTraceker pedig a vgrehajtsrt
14
ELADS 3. MAPREDUCE
felels, vannak neki szabad kapacitsai, Map illetve Reduce slot-ja (mennyi az kapa-
citsa) s a JobTraceker ezzel gazdlkodik, egyszeren odaadja neki a feladatokat, hogy
melyik Map fggvnyt melyik Reduce fggvnnyel futassa le. A TaskTrackernek semmi
informcija nincs arrl, hogy a tbbiek hogy llnak, nha visszaszl a JobTracekernek,
hol tart a feladatval (HeartBeat). Lnyegben minden szervezsi logika itt is a Master-
ben (JobTrackerben) sszpontosul. A 3.2. bra az rs s olvass mkdst szemllteti.
Mi trtnik amikor egy szmtsi feladatot szeretnnk vgrehajtani. Van egy kliensnk,
egy JobTrackernk illetve tbb TaskTracker. Illetve van egy HFDS (kzs fjlrendszer)
amivel mindenki tud kommuniklni. Az els lps az az, hogy a kliens bejelentkezik a
JobTrackerhez, hogy szeretne egy feladatot vgrehajtani. Erre vlaszul kap egy azonostt
s egy jogosultsgot, hogy onnantl kezdve azzal a job-al foglalkozzon. Klnbz szk-
sges dolgokat a HDFS-re msolja a kliens (Map s Reduce kdja illetve a elre megrt
library-k amiket ezek a fggvnyek felhasznlnak) lnyegben a job-nak egy teljes infor-
mcis csomagjt felrakja a HDFS-re. A TaskTracker sebessge nagyban fgg attl, hogy
mekkora replikci szmot lltunk be a HDFS-en. Nagyon sokszor a replikcik szmt
magasra lltjk, gy minden TaskTracker gyorsan hozzfrhet az HDFS-en trolt adatok-
hoz. A kvetkez lps a submit vagyis a kliens szl a JobTrackernek, hogy induljon el ez
a job. A HDFS-en megvan minden informci ami a job-ot lerja, ez tipikusan egy XML
vagy egy JAR fjl stb.
3.2. bra. A JobTracker mkdse Hadoop esetn
Amikor a JobTracker megkapja ezt a submit-ot megnzi, hogy a ler helyes illetve az
adatot is lerja amin le kell futtatni ezt a job-ot. gy ki tudja szmolni hogy melyik fjl
hny blokkbl ll illetve hny Map s hny Reduce folyamat lesz. Rendelkezsre kell lljon
minden olyan informci ami a feladatok kiosztst s elkezdst lehetv teszi. Nagyon
fontos dolog, hogy nem a JobTracker fog kapcsolatot ltesteni a TaskTrackerek-kel, ha-
nem vrja, hogy a TaskTracker-ek bejelentkezzenek (HeartBeat)s elkldjk mennyi res
slot-juk van illetve az egyes taskok, hogy llnak nluk. A JobTracker tudja, hogy az egyes
15
ELADS 3. MAPREDUCE
adatblokkok hol helyezkednek el s melyik gpen vannak HDFS-en, tovbb tud arrl,
hogy milyen aktv jobok vannak s melyek azok amelyek nem futnak sehol s erre vlaszul
ad egy task-ot a TaskTrackernek amiben benne van, hogy a HDFS-rl hol tudja elrni an-
nak a task-nak az informcijt. A JobTracker kiadja a task-ot a TaskTracker begyjti az
informcikat, hol rhet el a Map fggvny illetve a klnbz Partcionl fggvnyeket
s ezeket a szksges adatokat a HDFS-rl betlti. gy mkdik minden HDFS esetn,
amg vannak szabad Taskok amiket vgre kell hajtani, addig mindegyik bejelentkezsnl
meg fogjk kapni a feladatokat. Ha pedig vgeznek kldenek egy HeartBeatet, hogy ez a
task kszen van. Adott esetben egy Map task szl hogy kszen van s amikor a Reduce
ezt kiolvasta akkor lesz befejezettnek tekintve a Map-nek a feladata.
3.1.5. Meghibsodsok
Ha meghal egy task akkor nincs semmi baj mert jraindtja azt a taskot a TaskTracker.
Sajnos a JobTracker nem tudhatja, hogy egy-egy task azrt halt meg mert rossz a fel-
hasznl kdja, elment az ram, elromlott egy switch stb. Ilyenkor van egy limit, hogy
hnyszor lehet jraindtani azt a taskot. Igyekszik egy msik Node-on jraindtani az el-
halt taskot a JobTracker. Ltezik egy spekulatv futtats nev eljrs, miszerint ugyanazt
a taskot tbb TaskTrackeren is futtatja. Ennek az a clja, hogy ha brmikor van egy olyan
node ami tl lass, akkor az ne blokkolja az egsz rendszert ezrt tbb pldnyon elindul
s ha valami befejezdtt a msikat eldobja (ezt leginkbb az utols task-ok esetn szokta
csinlni a JobTracker). Ez abban az esetben j, ha viszonylag kihasznlatlan a cluster s
van szabad erforrs. Ha egy TaskTracker kiesik akkor nem fog jnni tle tbb HeartBeat
ilyenkor a JobTracker azt ltja, hogy az sszes Task ami ott futott elhalt s jraindtja
mshol. Ha a JobTracker ll meg, akkor kztes llapotban maradnak a Nodeok s ha jra
elindul akkor ellrl indulnak az adott task-ok. Erre megolds a redundancia alkalmazsa,
ltezik egy High Availability kongurci ahol kt JobTracker van.
16
4. elads
MapReduce programozsi mintk,
Streaming
4.1. 1. feladat
Adott egy adathalmaz, amely hmrskleti rtkeket trol. Hatrozzuk meg egy vros
tlaghmrsklett egy adott hnapban.
Adat1: v, hnap, nap, ra, perc, vros, hmrsklet
Eredmny: vros, hnap, tlaghmrsklet
Map: (sorID, sor) ((vros + hnap), hmrsklet)Reduce: ((vros + hnap), list(hmrsklet)) ((vros + hnap), avg(hmrsklet))
A szvegfjloknl a bemeneti kulcs-rtk szinte mindig (sor, sorID) lesz, amikor valamilyen
aggreglst vgznk. Ha SQL lekrdezst ksztennk erre a feladatra, akkor a Map
kimenetnek a kulcsa az lesz, amit a GROUP BY mg rnnk, ami szerint aggreglunk.
Ezrt lesz a Map kimenetnek kulcsa a (vros + hnap). A keretrendszer automatikusan
ezen kulcs alapjn csinl egy listt, amely a Reduce bemenete lesz majd, gy egy kulcshoz
tartoz rtkek egy Reducehoz kerlnek. A Reduce pedig kiszmolja az egy kulcshoz,
azaz a (vros + hnap)-hoz tartoz tlaghmrskletet.
4.2. 2. feladat
Adott egy adathalmaz, amely egy weblog adatait trolja. Hatrozzuk meg hogy melyik
nap hny oldalletlts volt.
Adat2: dtum, id, sessionID, url
Eredmny: dtom, oldalletltsek szma
Ha ez egy strukturlt SQL tbla lenne, akkor a kvetkez lekrdezssel lehetne a vlaszt
megadni:
SELECT date, COUNT(*) FROM table GROUP BY date
A szvegfjloknl a bemeneti kulcs-rtk szinte mindig (sor, sorID) lesz, amikor valamilyen
aggreglst vgznk. A GROUP BY mgtt a dtum van, ezrt a Map kimeneti kulcsa a
17
ELADS 4. MAPREDUCE PROGRAMOZSI MINTK, STREAMING
Map: (sorID, sor) (dtum, 1)Reduce: (dtum, list(1)) (dtum, cnt(1))
dtum lesz, s csak meg kell szmolni, hogy abbl hny darab van. A Reduce-nak mr
csak ezeket az 1-eseket kell megszmolnia.
4.3. 3. feladat
Az adathalmaz ugyanaz, mint az elbb, de most azt szeretnnk megtudni, hogy hny
egyedi ltogat volt az oldalon egy napon. Egyedi ltogats alatt az egy sessionID-hoz
tartoz lekrseket rtjk.
Adat2: dtum, id, sessionID, url
Eredmny: dtum, egyedi ltogatszm
Ha ez egy strukturlt SQL tbla lenne, akkor a kvetkez lekrdezssel lehetne a vlaszt
megadni:
SELECT date, COUNT (DISTINCT(sessionID)) FROM table GROUP BY date
Map: (sorID, sor) (dtum, sessionID)Reduce: (dtum, list(sessionID))
unique (dtum, cnt(distinct(session)))
A szvegfjloknl a bemeneti kulcs-rtk szinte mindig (sor, sorID) lesz, amikor valamilyen
aggreglst vgznk. A Map kimeneti kulcsa a dtum lesz s a Reduce fogja az egyedisget
garantlni (unique). Az egy Reduce folyamatnak kell az egy dtumhoz tartoz sszes
krst a memriban tartani s ez szk keresztmetszet lehet, ha egy napon nagyon sok
adat keletkezett, akkor a folyamatunk nem tud sklzdni. Ezrt rdemesebb sztbontani
ezt kt kln MapReduce folyamatra:
Map 1: (sorID, sor) ((dtum + sessionID), 1)Reduce 1: ((dtum + sessionID), list(1)) ((dtum + sessionID), 1)
Map 2: ((dtum + sessionID), 1) (dtum, 1)Reduce 2: (dtum, list(1)) (dtum, cnt(1))
Az els MapReduce folyamat kimeneti kulcsa a (dtum + sessionID), gy minden naphoz
egy sessionID csak egyszer tartozhat. A msodik folyamatban mr csak meg kell szmol-
nunk, hogy az adott dtumhoz hny bejegyzs tallhat. Ezzel mdszerrel sklzhatv
tettk a megoldst mg akkor is, ha egy naphoz nagyon sok adat tartozik, mert nem kell
egy Reduce folyamatnak a memriban tartani az egy naphoz tartoz sszes adatot.
4.4. 4. feladat
Az adathalmazunk az elbb mr megismert weblog adatai, amihez felvesznk mg egy
kapcsoltblt, amely megmondja, hogy melyik sessionID melyik felhasznlhoz tartozik.
Gyakori feladat, hogy a kt tblt ssze kell illeszteni (join).
18
ELADS 4. MAPREDUCE PROGRAMOZSI MINTK, STREAMING
Adat2: dtum, id, sessionID, url - LEFT
Adat3: sessionID, userID - RIGHT
Map: (sorID, sor) (sessionID, (L/R + sor))Reduce: (sessionID, list(L/R + sor) list(sessionID, (sorR + sorL))
Erre az egyik lehetsg a REDUCE-SIDE join:
Az Adat2 halmazt nevezzk el baloldali tblnak, az Adat3 halmazt pedig nevezzk el
jobb oldali tblnak. A Map bemenete a mindkt tbla soraibl addik, de tudnia kell,
hogy melyik tblbl rkezett az adat. Ha SQL lekrdezst ksztennk erre a feladatra,
akkor a Map kimenetnek a kulcsa az lesz, ami alapjn vgeznnk a join mveletet. Ezrt
a Map kimenetn a kulcs a sessionID lesz, az rtk a sor tartalma s hogy melyik tblbl
szrmazik (L/R). A Reduce folymat a sessionID-hoz tartoz rtkeket a memriban
tartja s gy vgzi el az sszeillesztst (pldul egy for ciklussal sszeilleszt mindenkit
mindenkivel). Ez akkor okozhat problmt, ha az sszeilleszt elemhez (jelen esetben a
sessionID-hoz) nagyon sok adat tartozik, amely nem fr el a Reducer memrijban. A
msik hibja ennek a megoldsnak, hogy lehet olyan sessionID, amirl nincs rekordunk a
msik tblban. Ekkor ezt feleslegesen kldjk t s generlunk vele nagy adatforgalmat.
(Sok esetben elfordul, hogy a felhasznl nem lp be az adott oldalra, gy csak sessionID-t
tudunk hozz trstani, de userID-t nem.)
Ez a problma egy msfajta joinnal elkerlhet. A Map kimenetn nem adjuk ki mr
azokat az elemeket, amikhez nem lehet msik tblbl adatokat trstani, ez lesz aMAP-
SIDE (broadcast) join:
Map: (sorID, sorL) (sorID, (sorL + sorR))Reduce: -
A joinok nagy rsze olyan szokott lenni, hogy van egy nagy tblnk s van egy kisebb
tblnk, pldul minden felhasznlhoz egy rekord. Ha ez a kisebb tbla elfr a mem-
riban, akkor elszr minden Mapnek elkldjk ezt a tblt, hogy csinljon belle egy
sessionID-userID struktrt a memriban. Eztn a msik tblbl tkldjk a sorokat
s megnzzk, hogy melyiket kell ehhez hozzilleszteni. gy a Map bemenete csak a sorID
s a bal oldali tbla sorai lesznek, mg a jobb oldali tbla a Map memrijban van. Az
sszeilleszts mr a Map lpsben megtrtnik, teht nincs szksg Reduce lpsre.
ltalban ez a kt join tpus hasznlatos, mindkettnek megvannak a sajt korltai, de ha
van valamilyen plusz informcink az adatok szerkezetrl vagy rendezettsgrl, akkor
gyorsabb s jobban sklzd join fggvnyeket is tudunk kszteni.
Tovbbi MapReduce pldk az A. fggelkben tallhatak.
4.5. Streaming
Java-ban MapReduce kdot rni nehzkes, mert meglehetsen sok kdot kell rni, ezrt
vals igny az, hogy ne csak Hadoop-Java API-val rhassunk kdot. Erre van egy olyan
megolds, aminek a neve Hadoop-streaming: brmilyen nyelvben meg lehet rni MapRe-
duce fggvnyeket, amelyek a standard bemenetrl (stdin) tudnak olvasni s standard
kimenetre (stdout) tudnak rni. A keretrendszer a standard bemenetre fogja kldeni az
19
ELADS 4. MAPREDUCE PROGRAMOZSI MINTK, STREAMING
adatot s a standard kimeneten fogja vrni a fggvny eredmnyt. A kulcs-rtk prok
szeparlsa soronknt tabbal trtnik.
A kvetkez pldn keresztl nzzk meg, hogy ezt hogyan lehet megvalstani pythonban.
Bemenet: dtum, hmrsklet
Kimenet: adott vi maximum hmrsklet
Ennek a MapReduce megoldsa:
Map: (sorID, sor) (v, hmrsklet)Reduce: (v, list(hmrsklet) ) (v, maxhmrsklet)
A Map s a Reduce fggvnyek megvalstsa pythonban:
1 for line in sys.stdin:
2 vals = line.split(",")
3 print vals [0] \t vals [1]
4.1. Kdrszlet. map.py
1 last_key = None
2 max_val = -9999
3
4 for line in sys.stdin:
5 (key , value) = line.split("\t")
6 if key == last_key:
7 if max_val < value:
8 max_val = value
9 else:
10 print last_key max
11 max_val = -9999
12 last_key = key
4.2. Kdrszlet. reduce.py
4.6. Adattmrts
ltalnos felhasznls mellett a Hadoop keretrendszer inkbb trhely, mintsem processzor-
ignyes. Nagyon nagy adathalmazokat kell trolnunk, illetve egy Map s egy Reduce lps
kztt nagyon sok adatot kell mozgatnunk. Ezrt ezeket a lpseket rdemes optimalizl-
ni, amelynek az elsdleges mdja az adattmrts.
Adattovbbts a hlzaton Snappy tmrtssel trtnhet, mivel nagyon kicsi a CPU
overheadje. Nem olyan hatkony tmrt algoritmus, mint pldul a gzip, de streamknt
tud tmrteni s gy elg sokat tud sprolni az adattvitelen (20-30 %-os teljestmny-
nyeresg).
A msik lehetsg a tmrtett fjlok hasznlata. A rendszer automatikusan felismeri a
tmrtett fjlokat s kitmrti a klnbz feladatok eltt. A merevlemezen trtn
trolshoz a kvetkez tmrtseket szoktk alkalmazni:
20
ELADS 4. MAPREDUCE PROGRAMOZSI MINTK, STREAMING
gzip: Tegyk fel hogy van egy 1 GB-os fjlunk ami 16 blokkbl ll s tmrtve
van. A blokkmret 64 MB, gy ekkora rszekre van vgva a trolnkon. Ha csak
egy rsz kell a fjlbl, akkor is ki kell ki kell tmrteni az egszet, hogy ki tudjuk
olvasni belle az adatot. Egy Map folyamat eltt mindenhova el kellene juttatni a
teljes fjlt, hogy az adott blokkot a Map fel tudja dolgozni. Ezrt a gzip esetn a
fjlokat gy rdemes szervezni, hogy a fjlok a blokkmrettel azonosak legyenek.
bzip2: Olyan tmrtsi eljrs, amelyet ha brhol elkezdnk olvasni, akkor is ki
lehet olvasni a fjl tartalmt, de ezt nem annyira hasznljk, mert elgg lass s
nem annyira hatkony.
lzo: Az ezzel a tmrtett fjlt sem lehet brhonnan olvasni alapesetben anlkl,
hogy ki kellene az egsz fjlt tmrteni, de emell kitalltak egy metaadat fjlt,
amely tartalmazza a Map folyamat szmra, hogy mely blokkot kell kitmrteni.
A legegyszerbb eset, ha nyers adatokkal dolgozunk, de nagyon nagy fjlmretek ese-
tn mr szksgess vlik a tmrts, akkor ha lehetsges a gzip-es tmrtst rdemes
alkalmazni a blokkmrettel azonos nagysg fjlokkal. Ezen kvl sok kicsi fjl sszevon-
sra mg a SequenceFile formtum is hasznlatos, ami egy Hadoop specikus formtum,
leginkbb a tar formtumra hasonlt.
21
5. elads
Hadoop csomagok, SQL for Hadoop:
Hive
5.1. Hadoop csomagok
Minden csomag vagy projekt opensource, Apache oldaln megtallhat a megfelel alol-
dalon forrskddal s dokumentcival egytt.
5.1.1. Flume
Logok trolsa s gyjtse a szerepe, kpes HDFS-en trolni a logokat. Egy ltalnos
use-case, hogy van egy webes cg ahol kiszolgljk felhasznlkat. Minden webszerveren
indtanak egy Flume genst aminek van valami bemeneti pontja, s brmilyen zenetet
kap onnantl az feladat az, hogy tovbbtsa ezt az zenetet. Ez egy megbzhat logo-
lsi rendszer. Fontos, hogy a logok megmaradjanak ugyanis ksbb ezek alapjn lehet
elemezni a program mkdst s a felhasznli lmnyt. Megknnyti, hogy brmilyen
szmtgptl logokat gyjtsnk s nem kell a webalkalmazsnak azzal foglalkoznia, hogy
a logokat elkldje, a logszerver megkapja, hanem mindezt tveszi a Flume. Nem egy
specilis Hadoop csomag de a Hadoophoz nagyon sokan hasznljk. Fontos megjegyezni,
hogy ez egy egyirny adat kzvetts.
5.1.2. Sqoop
Klnbz SQL alap adatbzisokkal tud adatot cserlni. Valamilyen JDBC kapcsolaton
keresztl elr egy adatbzist s kpes arra, hogy ha valahol van egy 10 gpbl ll MySQL
cluster akkor a sqoop, ezt a tblt t tudja msolni a HDFS-re. Ilyenkor tbb Mapet
elindt s elosztottan tud msolni adatbzisok s Hadoop kztt. Ez termszetesen oda-
vissza mkdik s az a nagy elnye, hogy habr ezt brmilyen adatbzissal meg tudn
csinlni, kpes arra, hogy prhuzamostsa ezt feladatot gy sokkal gyorsabb. A folyamat
lnyegben az, hogy indul egy MapReduce job a JDBC connection kipl s jnnek az
adatok.
5.1.3. Hive
Ez a csomag mr az elemzsi rteghez tartozik mg a korbbiak az adatelrsi rtegben
nyjtanak szolgltatsokat. Tulajdonkppen egy SQL lekrdez nyelvet nyjt Hadoop
22
ELADS 5. HADOOP CSOMAGOK, SQL FOR HADOOP: HIVE
fel. A Hive-nak az a feladata, hogy SQL lekrdezseket lehet vele vgrehajtani. Az SQL
lekrdezsbl csinl egy MapReduce job-ot s ezt lefuttatja a clusteren majd visszaadja
strukturlt tblzatos formban az eredmnyeket. Ez knyelmes mivel csak SQL kifejez-
seket kell rni s nem kell gondolkozni a Map s a Reduce fggvnyeken. Sok mindenben
klnbzik egy hagyomnyos adatbzisnak az SQL lekrseitl, sokkal tbb idbe telik
egy lekrdezs, ezrt tipikusan analitikus elemzsekhez hasznljk.
5.1.4. Pig
Ez egy szkript nyelv ami cljban hasonlt az SQL-hez. A feladata lnyegben ugyanaz,
MapReduce job-okat csinl a szkriptbl. Nagyon rugalmasan kezeli a sorok feldolgozst
brmit megeszik. Preziben szinte kizrlag piget hasznlnak, viszonylag knnyen tanul-
hat s hasonl szerepe van mint a Hive-nak, hogy helyetted MapReduce jobokat hozzon
ltre.
5.1.5. HBase
Minden amirl eddig sz volt az HDFS s MapReduce alapokon mkdtt. Az HBase
egy specialitsa, hogy nem indt MapReduce jobot mivel az HBase az egy kulcs-rtk
adatbzis mely megvalstja a NoSQL paradigmt. A NoSQL (egyes rtelmezsek szerint
Not only SQL, azaz nem csak SQL, ms rtelmezs szerint egyszeren csak nem SQL)
adatbzis szoftverek gyjtneve. A NoSQL adatbzisok elssorban nem tblzatokban
troljk az adatokat s ltalban nem hasznlnak SQL nyelvet lekrdezsre. Ez egy kulcs-
rtk adatbzis amelynek hatalmas elnye az, hogy nem MapReduce alapokon dolgozik,
hanem kzvetlen hozzfrse van a HDFS-hez. gy kpes milliszekundumos lekrsek
vgrehajtsra (sokkal gyorsabb mint a Hive).
5.1.6. Mahout
Ez egy szintn npszer csomag, statisztikai gpi tanulsi algoritmusokat tartalmaz, osz-
tlyoz algoritmusok, gyakori mintakeres, szveg osztlyozsra hasznljk sokan.
5.1.7. Zookeeper
Ltezik egy llatgondoz nev csomag (Zookeeper). Minden egyb Hadoop csomag fel-
hasznlja ennek a szolgltatsait, mivel egy elosztott rendszerben elg nehz a konkurens
dolgoknak a kezelse. Ha kt kliens ugyanazt a HDFS blokkot akarja rni vagy ugyan-
azt a tblt akarjk rni, ezek nem trivilis problmk. Ezeket a szervezsi koordincis
dolgokat valstja meg a Zookeeper.
23
ELADS 5. HADOOP CSOMAGOK, SQL FOR HADOOP: HIVE
5.1. bra. A Hadoop csomagok felptse
forrs: http://www.colfax-intl.com/nd/clusters/hadoop.aspx
5.2. SQL for Hadoop: Hive
A Hadoop most mr lassan 10 ves, de kezdetben elgg res volt s kevs volt hozz
az eszkz. Szksg volt valami egyszer felletre amit tmegesen tudnak hasznlni az
emberek. A Facebook hozta ltre, kellett egy SQL alap csomag mert a JAVA MapReduce
programozs nem igazn mkdtt s elgg nehz volt. Elkezdtk a HIVE fejlesztst
ami egy SQL interface a hadoopra (egy plusz rteg de nem trhz). Maga a Hadoop
platformot azrt vlasztottk mert olcs s jl sklzdik.
5.2.1. A Hive felptse
5.2. bra. A Hive mkdse
forrs: http://blog.octo.com/en/how-to-crunch-your-data-stored-in-hdfs/
Van egy Driver ami a fordtsrt felel s az SQL kifejezseket fordtja MapReduce job-
okra. A kvetkez lpcs az optimalizlja, ezt kitallja maga, hogy hogyan legyen
hatkonyabb a lekrdezs. (minden SQL motorban tallhat egy ilyen). Az Executor
24
ELADS 5. HADOOP CSOMAGOK, SQL FOR HADOOP: HIVE
pedig az aki operatvan ezt a futtatst elvgzi. Kommunikl a MapReduce-szal s elvgzi
ennek a futtatst. Ezen kvl meg tallhatk a kvetkez elemek mg benne: Command
Line Interface (CLI), JDBC, ODBC kapcsolat tvoli elrsekhez. Ltezik tovbb egy
MetaStore nev komponens is amelyben olyan bejegyzsek vannak, hogy milyen tblink
vannak, milyen a fjlok formtuma, mi a szepartor karakter, milyen tpus adatok illetve
mezk vannak (ez rja le, hogy lehet a szveges fjlokat adatbzis tblaknt rtelmezni).
Az esetek tlnyom tbbsgben ez egy MySQL adatbzis amely ltalban kis mret,
egy gpen fut SQL adatbzis. Amikor errl a szmtgpen elindtanak egy lekrst ak-
kor ez vgig megy az sszes emltett komponensen s a vgn megkapjuk az eredmnyeket.
Furcsa lehet azonban, hogy adatot feltltnk s utlag valami smt denilunk r, ez az
eddigi tudsunkkal pont ellenttesen mkdik. Ezt a folyamatot gy hvjk, hogy scheme-
on-write. Amikor bekerl az adat akkor ellenrzm a smt (amikor a tblba betltm)
s onnantl tudom, hogy j az adat ami bekerl a tblba. A scheme-on-read pedig kiol-
vasskor ellenrzi a smt, ha rossz az adat azokon a helyeken null-t fogunk visszakapni
nem hibt. Tovbbi klnbsgek az SQL s a Hive kztt: nincs olyan hogy UPDATE.
Egyszeren nincs r szksg, logokat gyjtnk s mirt akarnnk frissteni a tegnapi ada-
tokat (persze ha meg akarjuk hamistani akkor lehet) de radsul az adatok is blokkokban
vannak trolva s egy blokkban egy adatot mdostani nem ri meg. Indexelssel vannak
kzepesen kiforrott prblkozsok, de alapveten adattblk vgig olvassra talltk ki
s nem arra, hogy egy felhasznl adataival mveleteket vgezznk, majd pedig ezeket az
adatokat jra belerjuk az adatbzisba.
25
6. elads
Pig programozs
6.1. Bevezets
A Pig egy magas szint, az SQL nyelvhez hasonl szkript nyelv, amit az Apache Hadoop
hasznl MapReduce job-ok ltrehozsra. Lehetv teszi komplex adat transzformcik
rst Java tuds nlkl.
A nyelv eszkzkszlete teljes, ezrt mindenfle adatmanipulcis mveletet tudunk vele
vgrehajtani. A felhasznl ltal denilt fggvnyeken keresztl (User Dened Functions
- UDF), pedig brmilyen kdot meghvhatunk klnfle nyelvekbl mint pldul: JRuby,
Jython s Java. A scriptnket ms nyelvekbe is begyazhatjuk, ennek eredmnyekpp
komponensknt hasznlhatjuk, hogy nagyobb rendszereket ksztsnk, s mg komplexebb
alkalmazsokat, amik relevns problmkra adnak megoldst.
A Pig tbbfle forrsbl szrmaz adattal tud dolgozni, belertve strukturlt s struk-
turlatlan adatokat, az eredmnyt pedig eltrolhatjuk a HDFS-en. A Pig szkripteket
MapReduce job-okra fordtjk, amik az Apache Hadoop klaszteren futnak. Ebben a fe-
jezetben kvetve a Hortonworks lerst (Hogyan hasznljuk az alapvet pig parancsokat
http://hortonworks.com/hadoop-tutorial/how-to-use-basic-pig-commands/), t-
nzzk az alapvet mveleteket, s a szkript nyelv hasznlatt. A kvetkez terleteket
rintjk:
Egy relci ksztse sma nlkl
Egy j relci ksztse egy ltez relcibl
Kt relci illesztse (Join mvelet)
Adatok rendezse az ORDER BY hasznlatval
Az adatok szrse s csoportostsa a GROUP BY hasznlatval
A lers a Hortonworks rendszeren lett elksztve, de valszn knnyedn tltethet
egyb rendszerekre is.
6.2. A fjlok feltltse
Elsknt szerezzk be a szksges adatokat a feladat elvgzshez. Errl a linkrl le
tudjtok tlteni a szksges adatokat, amik a New York Stock Exchange adatait tartal-
mazzk 2000 s 2001-es vbl. https://s3.amazonaws.com/hw-sandbox/tutorial1/
infochimps_dataset_4778_download_16677-csv.zip
26
ELADS 6. PIG PROGRAMOZS
Tltsk fel az adatokat a File Browser segtsgvel.
6.1. bra. Adatok feltoltese
6.3. A script megrsa
A Pig felhasznli fellett a Pig ikonra kattintssal tudjuk elhozni. A baloldali panelen
a szkriptjeink listjt lthatjuk, a jobb oldalon pedig a szerkeszt felletet, a szkriptek
rshoz s mdostshoz. Egy specilis funkci az oldal aljn tallhat, mgpedig a Pig
helper, ami templateket nyjt a Pig kifejezsekhez, fggvnyekhez, I/O mveletekhez,
stb. Az oldal aljn lthat egy sttusz fellet, amikor futtatjuk a szkriptet itt lthatjuk
majd az eredmnyeket s a log fjlokat. Adjunk egy nevet a szkriptnek s kezdjk el a
szkript rst egy relci ltrehozsval.
6.2. bra. Pig script szerkeszt fellete
6.3.1. Relci denilsa
Ebben a lpsben beolvassuk az adatokat s ltrehozunk egy relcit.
1 STOCK_A= LOAD 'nyse/NYSE_daily_prices_A.csv' using PigStorage(',');
2 DESCRIBE STOCK_A;
Az els sorban denilunk egy relcit STOCK_A nven s beolvassuk a *.csv fjlunkat,
a msodik sorban pedig kirjuk a STOCK_A relcit. A "Save" gombbal elmenthetjk
27
ELADS 6. PIG PROGRAMOZS
a szkriptet az "Execute" gombbal pedig futtathatjuk. Ez a mvelet egy, vagy tbb Ma-
pReduce job-ot fog indtani. Egy kis id mlva a script futni kezd, s az "Execute" gomb
egy "Kill" gombra fog vltozni. Ezzel megllthatjuk a szkript futst. A Progress bar
mutatja, a folyamat elrehaladst. Ha kk a szne, akkor a job fut. Ha piros a szne,
akkor valami problma, vagy hiba trtnt. Ha zldre vlt, a szkript helyesen lefutott. Az
eredmnyt megtekinthetjk a zld dobozban a Progress bar alatt, vagy el is menthetjk.
Jelenleg a STOCK_A relcinak nem lesz smja, mert nem deniltunk neki smt
mikor betltttk az adatot a STOCK_A relciba.
6.3. bra. A sma kirsa
6.3.2. Relci denilsa smval
Mdostsuk az elz szkriptnknek az els sort s adjuk hozz a "AS" kifejezst, hogy
egy smt deniljunk az adatokra.
1 STOCK_A = LOAD 'NYSE_daily_prices_A.csv' using PigStorage(',') AS (
exchange:chararray , symbol:chararray , date:chararray , open:float
, high:float , low:float , close:float , volume:int , adj_close:
float);
2 DESCRIBE STOCK_A;
Mentsk el s futtassuk a szkriptet. A kimeneten lthat lesz a sma, amit deniltunk.
6.4. bra. A ltez sma kirsa
6.3.3. Relci ltrehozsa egy msik relcibl
Egy ltez relcibl tudunk j relcikat ltrehozni. Pldul szeretnnk egy B relcit
kszteni, ami a STOCK_A relcinak az els 100 bejegyzst tartalmazza. Adjuk hozz
a szkriptnkhz a kvetkez sort.
28
ELADS 6. PIG PROGRAMOZS
1 B = LIMIT STOCK_A 100; DESCRIBE B;
2 DESCRIBE B;
Mentsk el s futtassuk a szkriptnket. Lthatjuk, hogy a B relcinak ugyanaz a smja,
mint a STOCK_A relcinak, mivel egy rszhalmaza a STOCK_A relcinak.
6.3.4. Adatok kirsa
Az adatok kirshoz hasznljuk a DUMP parancsot a Pig szkriptnkben. A szkriptnk
vghez fzzk hozz a kvetkez sort. Mentsk el s futtassuk jra a szkriptnket.
1 DUMP B;
6.3.5. Oszlop kivlasztsa a relcibl
Trljk az eddig megrt szkriptet, mivel a kvetkezkben nem lesz r szksgnk. Az
egyik elnye annak, hogy a Piget hasznljuk az adatok transzformcija. j relcikat
tudunk ltrehozni, a meglv relcikban lv mezk kivlasztsval, a FOREACH parancs
hasznlatval. Deniljunk egy j relcit C nven, ami csak a symbol, adat s close
mezket tartalmazza a B relcibl. A teljes kd a kvetkez:
1 STOCK_A = LOAD 'NYSE_daily_prices_A.csv' using PigStorage(',') AS (
exchange:chararray , symbol:chararray , date:chararray , open:float
, high:float , low:float , close:float , volume:int , adj_close:
float);
2 B = LIMIT STOCK_A 100; C = FOREACH B GENERATE symbol , date , close;
3 DESCRIBE C;
Mentsk s futtassuk a szkriptnket, a kimeneten a kvetkez fogjuk ltni.
6.3.6. Adatok rsa a HDFS-re
Ebben a rszben megnzzk, hogy hogyan tudunk rni a HDFS-re a szkriptnkbl. A
kvetkez parancsot rjuk bele a szkriptnkbe:
1 STORE C INTO 'output/C';
Ezttal is indulni fog egy MapReduce job, gy vrnunk kell egy kicsit az eredmnyre.
Amikor a Job futsa befejezdik nyissuk meg a File Browsert, s keressk meg az jonnan
ksztett knyvtrunkat, aminek a neve output. Ebben lesz egy alknyvtr C nven,
amiben tallni fogunk egy part-r-00000 nev fjlt. Ha rkattintunk lthatjuk a tartalmt.
6.3.7. Kt relci illesztse (Join mvelet)
Ksztsnk egy j Pig szkriptet Pig-Join nven, majd hozzunk ltre egy j relcit DIV_A
nven. Ezutn illesszk a kt relcit A s B a symbol s dtum mezk alapjn, majd
29
ELADS 6. PIG PROGRAMOZS
6.5. bra. Adatok kirsa a HDFS-re
rjuk ki az j relci smjt.
1 STOCK_A = LOAD 'NYSE_daily_prices_A.csv' using PigStorage(',') AS (
exchange:chararray , symbol:chararray , date:chararray , open:float
, high:float , low:float , close:float , volume:int , adj_close:
float);
2
3 DIV_A = LOAD 'NYSE_dividends_A.csv' using PigStorage(',') AS (
exchange:chararray , symbol:chararray , date:chararray , dividend:
float);
4
5 C = JOIN STOCK_A BY (symbol , date), DIV_A BY (symbol , date);
6 DESCRIBE C;
Ha meggyeljk a C relci mind a kt relcibl tartalmazni fogja az sszes mezt. A
DUMP paranccsal tudjuk kirni a C relci tartalmt.
6.3.8. Adatok rendezse
Az ORDER BY parancs segtsgvel tudjuk a relcit rendezni egy, vagy tbb mezjre.
Ksztsnk egy j Pig szkriptet Pig-Sort nven, majd adjuk ki a kvetkez parancsokat
az adatok rendezshez.
1 DIV_A = LOAD 'NYSE_dividends_A.csv' using PigStorage(',') AS (
exchange:chararray , symbol:chararray , date:chararray , dividend:
float); B = ORDER DIV_A BY symbol , date asc;
2 DUMP B;
6.3.9. Adatok szrse s csoportostsa
A GROUP paranccsal tudjuk egy mezre csoportostani az adatokat, a FILTER paranccsal
pedig szrhetjk ket egy mintra. Ksztsnk egy j Pig szkriptet Pig-group nven s
rjuk be a kvetkez parancsokat a szerkeszt felleten.
30
ELADS 6. PIG PROGRAMOZS
1 DIV_A = LOAD 'NYSE_dividends_A.csv' using PigStorage(',') AS (
exchange:chararray , symbol:chararray , date:chararray , dividend:
float);
2 B = FILTER DIV_A BY symbol =='AZZ';
3 C = GROUP B BY dividend;
4 DESCRIBE C;
5 DUMP C;
6.4. Tovbbi forrsok
Az alapvet parancsok tnzse utn, ha szeretnl jobban elmlyedni a Pig szkriptek
rsban, akkor remek elfoglaltsg a Pig dokumentcijnak az tolvassa, amelyet a
kvetkez linken rtek el. http://pig.apache.org/docs/r0.7.0/tutorial.html.
31
7. elads
Hadoop klaszterek kongurcija s
zemeltetse
Egy Hadoop cluster fellltsa annyira nem is egyszer feladat, mint ahogy azt gondol-
nnk. Sok szempontot gyelembe kell vennnk az elosztott rendszerek megtervezsekor.
7.1. Hardver
A cluster legfontosabb ptelemei a szmtgpeket (Node-okat) kiszolgl hardverek.
Minden Node-knt egy olyan hardverrel felszerelt gpet kell zemeltetnnk, amely kellen
sok httrtrral rendelkezik, s a szmtsi feladatokhoz ers CPU s jelents memria-
mennyisg jellemzi.
A hardvermretezst egy pldn keresztl mutatjuk be. Tegyk fel, hogy egy cg t
szeretne trni Hadoop cluster-es szerverparkra, amelyen naponta 100 GB j bejv adatot
szeretnnek trolni. Ezt a mennyisget egy vre levettve 36 TB-ra becslhet a trolnikvnt adat. Tudjuk, hogy a Hadoop cluster egy adatot 3 klnbz helyen trol el a
replikci miatt, teht ez a mennyisg 100 TB lesz. Az egyb dolgok s elemzsekcljbl +25%-kal szmolhatunk, teht 125 TB-nl tartunk. A Hadoop rendszer elg sok
mindenrl kszt log-ot, valamint emellett minden gpen kell opercis rendszernek futnia,
teht szksg van olyan adatok trolsra is, amik nem a HDFS-en bell tallhatak. Erre
+10%-ot szmolunk, teht nagyjbl 140 TB trhelyre van szksgnk. Egy tlagosszervergpben 4-6 HDD tallhat, ha 3 TB-os egysgekben gondolkozunk, akkor ez 12-18
TB. Ha a fentebbi adatmennyisget nzzk, akkor 10 gpes cluster-t kell fellltanunk.Mivel tipikusan az IO a szk keresztmetszet Hadoop esetn, ezrt rdemesebb tbb kisebb
HDD-t berakni, mint kevs extrm nagyot.
Hozz kell tennnk, hogy ez az adatmennyisg nem tmrtett, tmrtssel sokkal keve-
sebb adatmennyisggel is lehet szmolni. Pldul egy olyan log esetben, ahol ugyanaz
az rtk sokszor szerepel, vagy ismtldik, ott gzip esetn akr 2-3-szoros tmrtsi rta
is elrhet, ezzel rengeteg helyet tudunk sprolni.
Memria tekintetben a master szerepeket birtokl gpek esetben az ajnlott mennyisg
24 GB, a CPU-nak pedig rdemes 8 magost vlasztani (2013-as adatok alapjn). Emellett
a fontos szerepeket kiszolgl gpek esetben rdemes egy bizonyos vdelmet is beiktatni
(pl. RAID). Az egyszer Data Node-ok esetben elg egy 4 magos CPU, s 8-24 GB me-
mria. A Hortonworks ltal ajnlott hardvermretezsrl a 7.1. tblzatban tallhatunk
rszletesebb bemutatst.
32
ELADS 7. HADOOP KLASZTEREK KONFIGURCIJA S ZEMELTETSE
Machine Type Workload Pattern/ Cluster Type Storage Processor (# of Cores) Memory (GB) Network
Slaves
Balanced workload Four to six 2 TB disks One Quad 24
1 GB Ethernet all-to-allHBase cluster Six 2 TB disks Dual Quad 48
Masters Balanced and/or HBase cluster Four to six 2 TB disks Dual Quad 24
7.1. bra. Hardver mretezs ajnlsok 5-50 gpes cluster-ekhez
1
7.2. Opercis rendszer
Az opercis rendszert tekintve az sszes Hadoop disztribci UNIX-os krnyezetben
hasznlhat, ezekre lett alapveten kialaktva. Legtbbet hasznlt Linux disztribcik
Hadoop cluster-ekhez a RedHat, s a CentOS. Cges krnyezetben leginkbb az elbbivel
tallkozhatunk a legtbbszr, mg otthoni felhasznlk krben az Ubuntu, s klnb-
z Debian verzik az elterjedtebbek. Mivel nincs nagy klnbsg Hadoop szempontjbl
a klnbz opercis rendszerek kztt, ezrt ltalnos ajnls, hogy a tmogatsi id-
intervallum s a rendszergazdk tapasztalata alapjn rdemes OS-t vlasztani.
Ltezik emellett egy Windows Server szmtgpekre talaktott verzi is, amelyet jsze-
rsge s kisebb kzssgi tmogatsa miatt kockzatos lehet hasznlni.
7.2. bra. Hadoop futtatsra alkalmas opercis rendszerek
7.3. Hlzat
A j s alapos hlzati belltsok rendkvl fontosak, mivel ezek szoktk okozni a legtbb
problmt s furcsa hibajelensget telepts s zemeltets kzben. Emiatt fontos, hogy
minden szmtgpnek tudnia kell a sajt host nevt, IP cmt. DNS s reverseDNS-nek
hibtlanul kell mkdnie privt cmek esetn is, mert lteznek olyan feladatok, ahol a
Node-tl a rendszer megkrdezi a host nevt, s erre neki vlaszolnia kell tudnia, hiszen
egyb esetben mondjuk nem tud az a feladat lefutni, s rengeteg hibt kaphatunk.
A cluster ltalban bels hlzaton van, s nincs kls interfsze, teht csak a bels hln
rhet el. Erre a bels hlra pl. VPN-el szoks bejelentkezni, s gy hasznlhat a
cluster. Ennek az a clja, hogy a kls tmadsokat teljesen ki tudjuk szrni, s csak
akkor trhet fel a rendszer, ha valaki a bels hlra be tudott jutni.
1
http://hortonworks.com/ ajnlsa
33
ELADS 7. HADOOP KLASZTEREK KONFIGURCIJA S ZEMELTETSE
7.4. Disztribci
Mivel a Hadoop-nak sok cg ltal elksztett vltozata van, gy ezek klnbz egyb szol-
gltatsokkal vannak kiegsztve, s ms-ms feladatokra vagy akr platformokra vannak
optimalizlva.
A legelterjedtebb a Cloudera (CDH) ltal ksztett verzi, amely egy olyan komplex se-
gdszolgltatsokat nyjt programokkal, illetve webes fellettel rendelkezik, amelyekkel
nagyon knny kezelni az egyedi Node-okat, s a klnbz keretszolgltatsokat, ame-
lyek segtik a rendszer sszhangban val mkdst. Ezen fell vannak az Intel, Amazon,
Hortonworks ltal ksztett verzik is.
ltalban minden verzibl ltezik zets s ingyenes vagy akr nylt forrskd verzi is.
A zetsk leginkbb internetes tmogats megltben s pr egyb extra szolgltatsban
trnek el az ingyenes verziktl, s ltalban csak nagyvllalati krnyezetben hasznljk
ket az ruk miatt.
rdemes megemlteni mg, hogy termszetesen a Hadoop minden rsze letlthet az
Apache oldalrl is, de azok egyesvel trtn teleptse s kongurcija nagysgren-
dekkel nagyobb szakrtelmet s idt ignyelnek, mint egy disztribci hasznlata.
7.3. bra. Hadoop disztribcik
7.5. Feladatok temezse s kvtk hasznlata
MapReduce feladat esetn a FIFO alapelv feladattemez volt a legelterjedtebb, de
ez tl egyszer volt, s egy kis slotigny (slot - szabad kapacits) feladatnak is vrnia
kellett egy nagy slotignyre, ami igen sok vrakozst eredmnyezett a lekrdezst futtat
szmra. Ennek a kikszblsre talltk ki a Fair scheduler-t, amely lehetsget ad arra,
hogy a kisebb job-okat a nagyok kz be tudjuk szrni, ezltal cskken a vrakozsi id.
Lteznek slot pool-ok, amelyek lehetv teszik, hogy a slot-ok egy csoportjt pldul a
kisebb job-oknak fenntartjuk, gy a nagy job-ok a tbbi slot hasznlatval helyet hagynak
a kisebbek szmra.
Az zemeltets egy msik tipikus problmja, ha egy HDFS fjl mrete tvedsbl hatal-
masra n (pldul kt nagy fjl join-olsa miatt), s elfoglalja a helyet minden ms adat
ell. Ez ellen kvtk bevezetsvel lehet vdekezni.
34
8. elads
Hadoop 2.0 - YARN, Tez, Spark
8.1. Hadoop 2.0
8.1.1. Kialakulsa
A Hadoop 2.0-ban rengeteg j lehetsget s szolgltatst vezettek be, amelyek sokkal
knnyebb teszik az elosztott rendszerek hasznlatt, azok kezelhetsgt s feladatok
futtatst. A rendszer jragondolsnl az volt az elsdleges cl, hogy ne csak MapRe-
duce job-okat lehessen indtani, hanem ms tpus szolgltatsok s applikcik is gond
nlkl fussanak. Emellett a rgi rendszerben nem volt lehetsg klnbz csoportoknak
klnbz adathalmazokon dolgozni, elklntett elemzseket futtatni. Eddig a HDFS-en
erre csak a klnbz jogosultsgokkal val trols volt a lehetsges md.
8.1.2. Klnbsgek
A Hadoop 1.0-ban JobTracker-nl volt minden szerep, felgyelte az erforrsokat, osztot-
ta ki a feladatokat a DataNode-ok szmra MapReduce job-oknl, valamint monitorozta
a feladatok futst. Felismertk, hogy az erforrs menedzsmentet s az alkalmazsok
kezelst kln kell vlasztani. Emiatt az j YARN architektra kerlt kialaktsra (lsd
8.1. bra), ami gyakorlatilag egy j genercis MapReduce-t jelent. Az erforrsok ki-
osztsa s a feladatok temezse levlasztdik a JobTracker-rl, s a JobTracker szerep
feldaraboldik. gy kerltek bevezetsre a ResourceManager az ApplicationMaster szere-
pek.
A rgi TaskTracker-ek helyett NodeManager-ek vannak az egyes node-okon, amelyek fel-
adata a programkd futtatsa s a MapReduce kommunikcik felgyelete. A ResourceM-
anager a job futtatsa sorn kivlasztja, hogy melyik node-on helyezi el a feladat futtat-
srt felels ApplicationMaster szerepet, amelybl minden feladathoz kln pldny kerl
ltrehozsra. Az ApplicationMaster a ResourceManager-tl kapott informci alapjn kel-
l mennyisg ResourceContainer-t fog ignyelni, amely egy erforrs foglals a Map s
Reduce taskok szmra. A ResourceContainer-ek kommuniklnak az ApplicationMaster-
rel, s jelentik, hogy hol tartanak a feladat futtatsval. Az ApplicationMaster a job
futsa utn megsznik.
A korbbi gyakorlattal ellenttben az erforrs foglalskor a NodeManager-ek - a rgi
TaskTracker-ek slot s progress informcii helyett - szabad memria s CPU llapo-
tot kldenek vissza. Az alkalmazs futsrt az ApplicationMaster a felels, teht a
ResourceManager-nek nem kell a progress-t jelenteni.
35
ELADS 8. HADOOP 2.0 - YARN, TEZ, SPARK
Mivel a MapReduce job-ok mellett mr alkalmazsok is lehetnek, gy az ApplicationMa-
ster visszajelez, hogy melyik mdban indult el a bekldtt feladat. Pldul az HBase
szolgltats is a ResourceManager-en keresztl tudja elrni a cluster-t, gy a klnbz
folyamatok nem veszik el egyms ell az erforrsokat.
8.1. bra. Az j YARN rteg
forrs: http://hortonworks.com/hadoop/yarn/
8.1.3. YARN job futtats
Az j YARN rendszerben jelentsen megvltozott a rendszerben indthat feladatok fut-
tatsa. A 8.2. brn bemutatott mdon futtatja a rendszer a bekldtt feladatokat:
1. A kliens bekldi a feladatot a rendszernek az alkalmazs specikus ApplicationMa-
ster indtshoz szksges informcikkal egytt.
2. A ResourceManager eldnti, hogy melyik node-ra deleglja az ApplicationMaster
elindtsval s futtatsval jr feladatkrt.
3. Az ApplicationManager a ltrejtte utn bejelentkezik a ResourceManager-nl, aki
lehetv teszi a kliens szmra a kzvetlen kommunikcit az ApplicationMaster-rel.
4. A futs sorn az ApplicationMaster a resource-request protokoll segtsgvel meg-
felel ResourceContainer-eket foglal az alkalmazs futshoz.
5. A sikeres erforrs foglals utn az ApplicationManager a NodeManager szm-
ra elkldi a megfelel informcikat s adatokat, gy elindul a Container futta-
tsa. Ezek az informcik tartalmazzk azt is, hogy a Container miknt tud az
ApplicationManager-rel kommuniklni.
6. A Container elkezdni futtatni a programkdot, mikzben az applikci specikus
protokoll segtsgvel folyamatosan jelenti a feladat elrehaladtt, llapott.
7. Szintn az applikci specikus protokoll segtsgvel a feladatot bekld kliens az
ApplicationMaster-rel kommuniklva krdezi le a feladat sttuszt, illetve az azzal
kapcsolatos egyb informcikat.
8. Amikor a feladat elkszlt s minden szksges httrfolyamat lefutott, az Appli-
cationMaster trli magt a ResourceManager-nl, s lell. Ekkor a Container jra
felhasznlhat lesz.
36
ELADS 8. HADOOP 2.0 - YARN, TEZ, SPARK
8.2. bra. YARN job futtats
forrs: http://hortonworks.com/hadoop/yarn/
8.2. Tez
A Tez projekt ltrehozsnak clja az volt, hogy az j YARN rendszerhez egy forra-
dalmastott, gyorsabb, egyszerbb MapReduce megoldst nyjtsanak, amely cskkenti a
rendszer erforrs hasznlatt.
A korbbi MapReduce-ok mkdsi elve az volt, hogy minden Map s Reduce fzis kztt
a kztes adatok a HDFS-re rdtak ki (replikcival egytt), gy jelents I/O kapacitst
hasznltak el (klnsen tbb MapReduce job egyszerre trtn futtatsval). Ezt a Tez-
ben azzal kszbltk ki, hogy nem felttlen kell kln MapReduce job-okat ltrehozni az
adatok feldolgozsa sorn, hanem lehet ezeket batch-esteni (Map Reduce Reduce),gy nem kell mindig kzttk HDFS-t hasznlni, teht sprolhatunk az I/O kapacitssal.
Ezen kialakts elsdleges clja volt, hogy a Hive s a Pig-beli feladatokat egyetlen Ma-
pReduce job-bal valstsunk meg. A rendszer a feladatokbl itt is egy DAG-ot (krmentes
grf) alakt ki, s kszti el a futtats sorrendjt. Eltrs, hogy a Tez-ben a MapReduce-al
ellenttben nem kell ezt megadni, hogy hny Reduce feladatunk lesz, ezt a rendszer futs
kzben kioptimalizlja.
8.2.1. Eloszott rendezsi plda Tez-ben
A 8.4. brn lthat egy elosztott rendezsi plda, amely mdszerrel akr 10-szeresen
gyorsabb adatfeldolgozs rhet el. A korbbi egy Reduce job-tl eltren, itt 3 rszbl
ll a folyamat.
Az elfeldolgoz szakasz mintkat kld a Sampler-nek, amely az adatokat egyenletesen
elosztja rendezett tartomnyokra osztja. Ezek a tartomnyok a partcionl s aggregl
fzisba kerlnek, ahol a megfelel feldolgozk a sajt tartomnyukat olvassk be, s el-
vgzik az adatok sszefzst. Ez az adatfolyam egyetlen Tez feladat, amely elvgzi az
37
ELADS 8. HADOOP 2.0 - YARN, TEZ, SPARK
8.3. bra. Tez s a YARN kapcsolata
forrs: http://hortonworks.com/hadoop/tez/
egsz szmtst.
8.4. bra. Tez elosztott rendezs
forrs: http://hortonworks.com/hadoop/tez/
8.3. Impala
Az Impala egy Hive alternatvaknt jtt ltre annak rdekben, hogy egy egyszer lekr-
dezsre egy kisebb tbln ne kelljen 5-10 sec-et vrni. A megvalsts tisztn C s C++
alap, s az adatokat is cache-eli, ezrt jval gyorsabb, mint a Hive. A cache-els lnyege
ebben az esetben, hogy a mr korbban kiszmolt vagy futtatott lekrdezsek eredmnyt
memriban trolja, gy azokat nem kell minden esetben jra a HDFS-rl olvasni, ha
gyakran hasznljuk.
38
ELADS 8. HADOOP 2.0 - YARN, TEZ, SPARK
8.4. Spark
A Spark valjban egy memria alap MapReduce keretrendszer, amelyet szintn a
YARN-hoz fejlesztettek ki. Ez leginkbb iteratv szmtsokhoz idelis (pl. logisztikus
regresszi, neurlis hlk). Bizonyos adatokrl kdszinten meg lehet mondani, hogy le-
gyen cache-elve, teht akr az adathalmaz trolhat memriban a futs idejn, s csak
a vgeredmnyt rjuk HDFS-re.
A Shark a Spark rendszerhez nagyon hasonlan egy memria alap megolds, amelyet a
Hive futtatshoz terveztek.
8.5. Storm
A Storm egy valsidej, nem batchelt feldolgoz rendszer, amelyben topolgiba rend-
szerezhetnk forrsokat s feldolgoz egysgeket, amely folyam vgn kerl csak az adat
elmentsre a httrtrra vagy adatbzisba (lsd 8.5. bra). Ez a leggyakrabban olyan
felhasznlsi mdoknl jelent hatalmas elnyt, ahol azonnali jelentseket vagy vals idej
analzist kell kszteni. A feldolgoz egysgek lnyege, hogy azonnali szmolst vgeznek,
adattrolst egyltaln nem. Felhasznlsi pldk kz tartozik gyakori szavak, kulcs-
szavak keresse sok bejv rvid zenetben, amelyet azonnal kivezethetnk egy vals
megjelent felletre.
Ezek mellett termszetesen a trolt adatokon ksbb Tez-t vagy MapReduce-t is futtat-
hatunk a korbbi gyakorlatnak megfelelen.
8.5. bra. Storm topolgia
forrs: https://storm.incubator.apache.org/
39
9. elads
Hadoop & NoSQL: HBase
9.1. Adatbzis-kezel rendszerek
Az adatbzis-kezel rendszereknek kt nagy csoportjt klnbztetjk meg, amelyek ssze-
hasonltsa a 9.1. tblzatban lthat.
OLTP
(On-line Transaction Processing)
OLTP
(On-line Analytical Processing)
Clja tranzakcikezels adatelemzs
Formja adatbzis adattrhz
Mveletek gyors, kis mveletek: SELECT,
UPDATE, DELETE, INSERT
komplex SELECT tpus lekrdez-
sek
Tervezs normalizlt forma (1NF, 2NF,
3NF, BCNF)
nem normalizlt, csillag sma:
egy f tbla s tbb hozz fz-
d kapcsoltbla
Technolgik standard SQL adatbzisok HBase, Accumulo, Cassandra
9.1. tblzat. OLTP vs. OLAP
ltalban megprbljuk a ktfle adatbzis-kezel rendszert elszeparlni akkor is, ha
ugyanazzal az eszkzkkel valstottuk meg ket. Ennek legfbb szerepe az erforrsok
kiosztsnl van, hiszen egy komolyabb elemzsi mvelettel nem szeretnnk a tranzakcis
adatbzist lebntani.
9.1.1. Elosztott adatbzis-kezel rendszerek
Az adatbzis kezel rendszerek egygpes krnyezetben viszonylag egyszeren elkszt-
hetek, de elosztott esetben szmos problmba tkzhetnk, amelyhez kapcsoldik a
kvetkez ttel:
CAP-ttel: egy-egy konkrt elosztott rendszer az albbi hrom alapvet kpessg kzl
legfeljebb kettt tud megvalstani:
Consistency (konzisztencia): mindig ugyanazt olvassuk ki, mint amit bertunk
Availibility (rendelkezsre lls): mindig kapunk vlaszt a krdsre
Parition tolerance (particionls-trs): mennyire viseli el a rendszer, ha valamilyen
okbl kifolylag sztesik tbb klnll rszre
40
ELADS 9. HADOOP & NOSQL: HBASE
A 9.1. brn lthat a klnbz adatbzis-kezel rendszereknek az sszefoglalsa a
CAP-ttel alapjn, hogy melyik kt kpessggel rendelkezik.
9.1. bra. CAP-ttel
forrs: http://robertgreiner.com/2014/06/cap-theorem-explained/
9.2. NoSQL adatbzis-kezel rendszerek
A NoSQL adatbzisok nem relcis adatmodellt hasznlnak, hanem klnfle megoldsok
lteznek:
dokumentum alap: MongoDB
Ezek az adatbzis-kezel rendszerek legfkpp az aggregtum szmolsra, GROUP
BY-jelleg mveletekre vannak specializlva. Ms mveletet vagy nem is tudnak,
vagy nem hatkonyan tudnak elvgezni.
grf alap: Neo4j
oszlop alap: HBase, Cassandra
kulcs-rtk alap: DynamoDB, Riak
41
ELADS 9. HADOOP & NOSQL: HBASE
9.3. HBase
A Google 2006-ban publiklta a BigTable nev oszlop alap adatbzis-kezel rendsze-
rt. Clja, hogy a Google ltal hasznlt HDFS-hez hasonl fjlrendszeren sklzhatan
tudjanak adatokat trolni. Ennek mintjra kszlt az HBase, amelynek dencija a
kvetkez:
sparse: ritka, ugyanis az oszlopok rtkt nem ktelez mindig megadni s nem trol
klnfle NULL rtkeket, mint az SQL alap adatbzisok
consistant : konzisztens
distributed : elosztott, mivel az adatok HDFS-en elhelyezett fjlokban tallhatak
multidimensional : tbbdimenzis, azaz egy kulcshoz tbb oszlop (column) is tartoz-
hat s ezek oszlopcsaldokba (columnfamily) vannak rendezve, teht (columnfamily:
column) alapjn lehet rtket lekrni. Ezenfell trol mg timestampet is, vagyis
az rtkek verzizva vannak s mindig a legfrissebb kerl visszaadsra. (A konzisz-
tencinak felttele, hogy mindig legyen timestamp a beszrt rtkek mellett.)
sorted : rendezett, teht nem csak kulcs alapjn kereshet, hanem tartomnyt is
egyszeren le lehet krni
map: kulcs-rtk prok trolsa
A kvetkez mveleteket lehet elvgezni az HBase-ben:
put(kulcs: {'cf:c': rtk, 'cf:c': rtk, ...}): egy elem beszrsa
get(kulcs): egy kulcshoz tartoz rtkek lekrse
scan(kezdrtk, vgrtk): egy tartomny lekrse, illetve hasznlhat prex
keressre
delete(kulcs): egy elem trlse
A hasznlathoz vegynk egy webkeresses pldt, aminek a clja, hogy a klnfle URL-
ekhez adatokat mentsnk le. HBase-ben a kulcsot rowkey-nek szoktk nevezni, amely jelen
esetben az URL lesz. Mivel nagyon sok URL-hez kell adatot trolni, ezrt mindenkppen
szksg van valamilyen elosztott infrastruktrra. Az rtkek pedig a MIME-type, nyelv,
tartalmazott szveg, stb. lesz, amely a oszlopok szabad felhasznlhatsgbl addan
brmikor bvthet s szabadon kihagyhat.
Mivel az HBase-nek nagyon kicsi a ksleltetse, ezrt a klnfle modulok (crawlerek)
nagyon gyorsan tudnak lekrdezni. Minden vltoztats atomi, teht nem fogjk blokkolni
egymst s nem okoz problmt az sem, ha kt klnbz modul ugyanazt a rowkey-t
akarja fellrni. gy kaptunk egy nagyon jl sklzd, kis ksleltets adatbzist, amelyet
(cserbe) csak URL alapjn tudunk elrni, de ehhez a felhasznlshoz ez pont elg.
Egy columnfamily kerl egy HDFS fjlba, teht ha egy rowkey-hez tbb columnfamily
tartozik, akkor tbb fjlbl kell az rtkeket kiolvasni. Oszlop alap adattmrtst hasz-
nl az HBase, de hasznlhat a rendszer key-value adatbzis felfogsban, amelybl ltszik,
hogy nincs les hatr a kt tpus adatbzis-kezel rendszer kztt.
42
ELADS 9. HADOOP & NOSQL: HBASE
9.3.1. Mkdse
HDFS fltt fut, de nem MapReduce alapokon, hiszen tudjuk, hogy a MapReduce-nak
msodperces nagysgrend ksleltetse van, mg a NoSQL rendszerek ms-os vlaszidveldolgoznak. Felptsben hasonlt a HDFS s a MapReduce struktrra, hiszen Master-
Slave architektrra pl ahogyan azt a 9.2. brn lthat.
9.2. bra. HBase felptse
forrs: http://blog.xebia.fr/2009/11/18/devoxx-jour-1-nosql-avec-hbase/
Van egy HBase master s vannak klnbz rgiszerverek. Ezek kln szolgltatsknt
futnak a Hadoop clusteren, teht teljesen fggetlenek a MapReduce keretrendszertl. Mi-
vel az adathalmazunk rendezett, ezrt a rgiszerverek a kulcs szerint vannak felosztva,
teht minden rgiszervernek van egy kulcstartomnya (start_key stop_key), amit az
kezel. Ha a kliens le akar krni egy rtket kulcs szerint, akkor elszr a master meg-
mondja, hogy melyik rgiszerverhez tartozik s utna attl a rgiszervertl fogja elkrni
az adott elemet s bers is hasonlan mkdik. Ahhoz, hogy a rendszer valban ms-osnagysgrendben futhasson, a kliensek cash-elik, hogy a rgik hogyan oszlanak el. Ha ez
a feloszts valami miatt megvltozik, akkor az adott rgiszerver vlaszol, hogy ez a kulcs
nem hozz tartozik s akkor fordul jra a masterhez a kliens. A master elg kicsi szerepet
kap a rendszerben, mivel csak a kezdeti krseket kell kiszolglnia, illetve az jraszervezsi
feladatokat kell neki elvgeznie. A nagy terhels a rgiszerverekre jut.
A felptsbl mr jl ltszik, hogy a rendszer mirt nem ll mindig rendelkezsre. Ha
egy rgiszerver kiesik, akkor az tartomnya aktulisan kiszolglatlan lesz addig, amg
a master ezt szre nem veszi (nem rkezik heartbeat). Ezutn kiosztja ms rgiszer-
vereknek ezt a tartomnyt, aki meg fogja tallni a HDFS-en az ehhez a rgiszerverhez
tartoz fjlokat, de gy vannak olyan tmeneti idszakok, amely alatt bizonyos rekordok
nem elrhetek. A particionls-trs viszont teljeslni fog, hiszen ha a cluster sztesik
tbb rszre akkor is adott rgiszerverek a hozzjuk tartoz krseket teljesteni tudjk.
gy a rendszer tovbbra is mkdni fog, termszetesen a HDFS replikcit nem biztos,
hogy vgre tudja hajtani amg a teljes cluster jra ssze nem kapcsoldik.
Ahhoz hogy a krsek minnl elbb ki legyenek szolglva a rgiszerverek folyamatosan
nyitva tartjk a HDFS fjlokat, amik hozzjuk tartoznak s ltalban replikkat is igyek-
szik a rendszer gy elhelyezni, hogy legyen a rgiszerven egy loklis replika a hozz
tartoz blokkokbl. A rgiszerver ezekbe a fjlokba nagyon gyorsan bele tud indexelni
s visszaadni a megfelel rtket. Ezen fell az adatok nagy rszt memriban tartjk,
teht ezrt fontos a sok memria az HBase-t kiszolgl zikai gpekbe. (Vessk ssze
43
ELADS 9. HADOOP & NOSQL: HBASE
a 7.1. brn tallhat Slave-hez tartoz Balanced workload s HBase cluster rtkeket.)
Az adatok bersnak folyamata
Az HBase rsi folyamata a 9.3. brn lthat szekvenciadiagram szerint trtnik.
9.3. bra. HBase vltoztats rsi folyamata
forrs: http://blog.cloudera.com/blog/2012/06/hbase-write-path/
Inicializlskor a kliens megkrdezi a master-t, hogy melyik rgiszerverhez kell fordulnia,
ha ez mg ezeltt nem trtnt meg. Egy kulcsot s a hozz tartoz rtke(ke)t szeretn
a kliens beszrni vagy trlni (). A rgiszerver elszr a vltozst berja a commit
log-ba (), ami a loklis diszken troldik, hogy adatvesztsnk ne legyen. Ezutn kerl
be a memstore-ba, ahol a rgiszerver trolja a vltozsokat s kveti azok verziit ().
Amikor ez a memstore kezd betelni, akkor a commit log-nak egy rendezett formjt
HDFS-re rja (). A commit log s a memstore rsa nagyon gyors s utna visszatr a
parancs (), mg a HDFS-re rs mr aszinkron mdon hajtdik vgre. gy esetleges hiba
esetn, ha visszatr a rgiszerver, akkor a commit log-bl jra fel tudja pteni a hinyz
mdostsokat. Ebbl kvetkezik, ha rgiszerver tbbet nem tr vissza, akkor azok a
vltozsok elvesznek, amik HDFS-re nem kerltek t.
9.3.2. HBase adatszervezsi plda
A legfbb krds: Hogyan vlasszuk meg a kulcsokat? Ehhez elszr is meg kell vizsgl-
nunk, hogy milyen lekrdezseket szeretnnk futtatni. Egy pldn keresztl vizsgljuk
meg, hogy milyen szempontokra rdemes odagyelni.
Tegyk fel, hogy idjrsi adatokat gyjtnk. Vannak idjrs llomsok, amelyekhez
timestamp-et s mrsi adatokat szeretnnk letrolni. A lekrdezseinket arra szeretnnk
optimalizlni, hogy a leggyorsabban kapjuk vissza az adott idjrs llomshoz tarto-
z legfrissebb mrt adatokat. Ebben az esetben trivilisnak tnik, hogy vlasszuk az
lloms+timestamp-et kulcsnak. De ez ebben az esetben nem a legoptimlisabb megol-
dst adja, ugyanis a keressnl mindig vgig kell nzni az sszes adott llomshoz tartoz
adatot amg elrjk az utolst.
Erre azt a megoldst szoktk alkalmazni, hogy egy tvoli jvbeli idpontbl kivonjk
az aktulis timestamp-et, ezzel megfordtva annak nvekv voltt. Ha gy futtatjuk le a
keresst, akkor els elemknt az llomshoz tartoz legfrissebb adatokat kapjuk meg.
44
A. fggelk
MapReduce Patterns, Algorithms, and
Use Cases
Source: http://highlyscalable.wordpress.com/2012/02/01/mapreduce-patterns/
In this article I digested a number of MapReduce patterns and algorithms to give a syste-
matic view of the dierent techniques that can be found on the web or scientic articles.
Several practical case studies are also provided. All descriptions and code snippets use the
standard Hadoop's MapReduce model with Mappers, Reduces, Combiners, Partitioners,
and sorting. This framework is depicted in the gure below.
A.1. bra. MapReduce Framework
45
FGGELK A. MAPREDUCE PATTERNS, ALGORITHMS, AND USE CASES
A.1. Basic MapReduce Patterns
A.1.1. Counting and Summing
Problem Statement: There is a number of documents where each document is a set
of terms. It is required to calculate a total number of occurrences of each term in all
documents. Alternatively, it can be an arbitrary function of the terms. For instance, there
is a log le where each record contains a response time and it is required to calculate an
average response time.
Solution: Let start with something really simple. The code snippet below shows Mapper
that simply emit 1 for each term it processes and Reducer that goes through the lists
of ones and sum them up:
1 class Mapper
2 method Map(docid id, doc d)
3 for all term t in doc d do
4 Emit(term t, count 1)
5
6 class Reducer
7 method Reduce(term t, counts [c1, c2 ,...])
8 sum = 0
9 for all count c in [c1, c2 ,...] do
10 sum = sum + c
11 Emit(term t, count sum)
The obvious disadvantage of this approach is a high amount of dummy counters emitted
by the Mapper. The Mapper can decrease a number of counters via summing counters
for each document:
1 class Mapper
2 method Map(docid id, doc d)
3 H = new AssociativeArray
4 for all term t in doc d do
5 H{t} = H{t} + 1
6 for all term t in H do
7 Emit(term t, count H{t})
In order to accumulate counters not only for one document, but for all documents pro-
cessed by one Mapper node, it is possible to leverage Combiners:
1 class Mapper
2 method Map(docid id, doc d)
3 for all term t in doc d do
4 Emit(term t, count 1)
5
6 class Combiner
7 method Combine(term t, [c1, c2 ,...])
8 sum = 0
9 for all count c in [c1, c2 ,...] do
46
FGGELK A. MAPREDUCE PATTERNS, ALGORITHMS, AND USE CASES
10 sum = sum + c
11 Emit(term t, count sum)
12
13 class Reducer
14 method Reduce(term t, counts [c1, c2 ,...])
15 sum = 0
16 for all count c in [c1, c2 ,...] do
17 sum = sum + c
18 Emit(term t, count sum)
Applications: Log Analysis, Data Querying
A.1.2. Collating
Problem Statement: There is a set of items and some function of one item. It is
required to save all items that have the same value of function into one le or perform
some other computation that requires all such items to be processed as a group. The
most typical example is building of inverted indexes.
Solution: The solution is straightforward. Mapper computes a given function for each
item and emits value of the function as a key and item itself as a value. Reducer obtains
all items grouped by function value and process or save them. In case of inverted indexes,
items are terms (words) and function is a document ID where the term was found.
Applications: Inverted Indexes, ETL
A.1.3. Filtering (Grepping), Parsing, and Validation
Problem Statement: There is a set of records and it is required to collect all records
that meet some condition or transform each record (independently