Budapesti Műszaki és Gazdaságtudományi EgyetemMéréstechnika és Információs Rendszerek Tanszék
R és MapReduce
„Big Data” elemzési módszerek
Kocsis [email protected]
2013.10.09.
MapReduce: a teljes kép
Forrás: [1], p 30
MapReduce: a keretrendszer feladatai [1] „What” és „how” szétválasztása Job: „kód”
o Mapper, reducer, (partitioner, combiner)o Egy kijelölt csomópontnak adjuk ki („JobTracker”)
Ütemezés (scheduling)o „task”-okra szétválasztás; pl bemeneti (k,v) párok blokkjao task-ok csomóponthoz rendeléseo Szükség lehet várakozási sorra is!o „stragglers” spekulatív végrehajtás
• map és reduce is a leglassabb task-tól függ• Kulcselolszlás miatt reduce esetén nem mindenképp megoldás
Kitérő: Zipf eloszlás Zipf törvénye: természetes nyelvi szövegben (a
legtöbb nyelvre, elég nagy korpuszra, …) bármely szó gyakorisága inverz arányos a frekvenciatáblában vett helyezésével (ranking).
„A leggyakoribb háromszor olyan gyakori, mint a harmadik”
k: helyezés, s: paraméter (klasszikusan 1), N: elemek száma
MapReduce: a keretrendszer feladatai [1] Adat és kód kolokáció
o „kódot visszük az adathoz”o Taszk indításnál: helyi „rack” „távoli”
SzinkronizációoMap és Reduce közötto „shuffle and sort” (nagy, elosztott GROUP BY key)
Hibakezelés!
Partícionálás és Kombinálás Legegszerűbb part.: hash(kulcs) mod #reducer
o f: kulcs reducer
Kombinálás: lokális aggregáláso „mini-reducer”oWord count?o Hálózati kommunikáció redukálásao Általánosságban nem „csereszabatos” a reducer-rel
R és funkcionális programozás Az R-ben ez is van.
Ismerkedjünk meg:o lapply, sapply, tapply, apply, mapply, Reduce, {plyr
csomag}, …
‚foreach’ csomag (doParallel/doMC/doSNOW backend)
foreach
RHADOOP
R és Hadoop? Miért?
o R reuse: nyelv és létező megvalósítások• Vizualizáció!!!
o R: létező funkcionális programozási támogatás
Megvalósítások?o RHadoop (github: RevolutionAnalytics/RHadoop), RHIPE,
segue, HadoopStreaming, rHadoopClient, …
Kulcs: Streaming APIo stdin/stdout: „tetszőleges” futtatható állomány
befűzhető map vagy reduce taszknak
Wordcount - Java
(Persze ez így nem teljesen fair…)
Olvasni: [5]
Wordcount - R
rmr.options(backend = "local")!
rmr2 local backend [6] Kész VM használata [7]
o http://vcl.inf.mit.bme.hu !
(R)Hadoop-ot
k-means [6] Adatpontok: vektortér Klaszter reprezentációja: súlyponttal /
”középponttal” (vektor-átlag) : i-edik klaszter reprezentánsa Minimalizálandó a négyzetes távolságösszeg, mint
hiba:
Egy megoldás [8] repr. kezdeti halmazawhile változik
do for adott sorrendbendo klaszter-indexe
if then {
}return R: kmeans; példa
k-meansrmr2/blob/master/pkg/tests/kmeans.R
dist.fun = function(C, P){ apply(C,
1, function(x)
colSums((t(P) - x)^2))}
k-means: map kmeans.map = function(., P) { nearest = { if(is.null(C)) sample(1:num.clusters,nrow(P),
replace = T) else { D = dist.fun(C, P) nearest = max.col(-D)}}
if(!(combine || in.memory.combine)) keyval(nearest, P) else keyval(nearest, cbind(1, P))}
k-means: map Kulcs: P ponthoz legközelebbi klaszter-centrum
o C „normál” R objektum o scoping miatt elérhető a map-beno P: HDFS-ből
Érték: P
Ha még nincsenek klaszter-centrumok: mintavétel visszahelyezéssel
Vektorizált keyval ismét
in.memory.combine, combine: nem a mapreduce függvényé!
k-means: reduce kmeans.reduce = { if (!(combine||in.memory.combine)) function(., P) t(as.matrix(apply(P, 2, mean))) else function(k, P) keyval( k, t(as.matrix(apply(P, 2, sum))))}
k-means: reduce Azonos kulcshoz (középpont) tartozó vektorok átlaga
Azaz:o Map: a legközelebbi klaszterbe sorol (középpont)o Reduce: kialakult új középpontok
Szemlétesen: a középpontokat „tologatjuk”
Beragadhat lokális minimumba! (aut. Megállásnál)
Algoritmust lásd (aut. megállással): [8], p 1422
kmeans.mr: törzs (1)
kmeans.mr: törzs (1) Iterációk C felüldefiniálásával
Minden menetben mapreduce-szal új középpontok
kmeans-törzs (2)
Regresszióf függvény,• bemenet:
az attribútumok értéke,• kimenet: megfigyelések
legjobb közelítése• „ökölszabály”• Példa:
testtömeg/magasság együttes eloszlás valójában egyenesreilleszthető,
Regressziós módszerek Alapelv:
t tY f Véletlen változó Közelítés Hiba
1 2( , ,..., )nY f X X XJósolt esemény
Megfigyelhető változók
1
n
t tt
Y FME
n
•Átlagos hiba (mean error)
Mért érték
Becsült érték
Lineáris regresszió Egyszerű lin. függvény illesztése az adatokra
o nem vár alapvető változást a rendszer viselkedésében
Legkisebb négyzetek módszereo keressük azokat az a,b paramétereket, amelyekre
cél:
2
2
1 1
n n
t t tt t
SSE Y F
minimális (Sum of Squared Errors)
Y a bX
2
2
1 1
n n
t t t tt t
Y F Y a bX
minimalizálása
2
1
1
1
2
1
1
1 1 1 1 1 1 1
2 0
0
1 1 1
n
t t nt
t tt
n
t tt
n
t t nt
t t tt
n n n n n n
t t t t t t t t t t tt t t t t t t
d Y a bXY a bX
da
na Y bX
a Y bX
d Y a bXX Y a bX
db
X Y Y bX bX X Y X Y b X Xn n n
2
1
1 1 12
2
1 1
0n n
tt
n n n
t t t tt t t
n n
t tt t
b X
n X Y X Y
b
n X X
Levezetés (parc. deriválás)
Xi, Yi a mért értékpárok (pl. idő, terhelés)
Lineáris regresszió Legjobban illeszkedő egyenes , ahol DE:
Anscombe’squartetoMinőségileg
különbözőadatok
o Azonos regressziósegyenes
Lineáris regresszió: általános alak
Solve:
:„design matrix” - tanító-minták a sorok : „target labels”
„Summation form”
és
… és ezek a szummák már párhuzamosíthatóak m-ben.
„Summation form”-ban felírható problémák [9]
Locally Weighted Linear Regression Naive Bayes Gaussian Discriminative Analysis k-means Logistic regression Neural network Principal Component Analysis Independent Component Analysis Expectation Maximization Support Vector Machine
„Summation form” Gradienseket és (stat. modellre nézve) elégséges
statisztikákat számító algoritmusok
Hivatkozások [1] Lin, J., & Dyer, C. (2010). Data-Intensive Text Processing with MapReduce.
Synthesis Lectures on Human Language Technologies, 3(1), 1–177. doi:10.2200/S00274ED1V01Y201006HLT007
[2] http://www.slideshare.net/jeffreybreen/big-data-stepbystep-using-r-hadoop-with-rhadoops-rmr-package
[3] http://www.cloudera.com/content/support/en/downloads.html [4] http://hortonworks.com/products/hortonworks-sandbox/ [5] http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html [6]
http://home.mit.bme.hu/~ikocsis/notes/2013/10/23/(r)hadoop-sandbox-howto/ [7]
http://home.mit.bme.hu/~ikocsis/notes/2013/10/28/rhadoop-sandbox-with-the-cloudera-quickstart-vm/
[8] Iványi, A. "Informatikai algoritmusok." ELTE Eötvös Kiadó, Budapest (2004). [9] Chu, C. T., Kim, S. K., Lin, Y. A., Yu, Y., Bradski, G. R., Ng, A. Y., & Olukotun, K.
(2006). Map-reduce for machine learning on multicore. In B. Schölkopf, J. Platt, & T. Hofmann (Eds.), Advances in Neural Information Processing Systems 19: Proceedings of the 2006 Conference (pp. 281–288). MIT Press.