MapReduce on suurten datamäärien prosessointiin tarkoitettu ohjelmointimalli. Google App Engine tarjoaa oman MapReduce-ympäristönsä.
Siihen voi tutustua vaikka App Enginen MapReduce-dokumentaatiosta. Python-spesifistä ohjeistusta on luvussa 3.
App Enginen MapReduce Python-kirjasto pitää itse käsin lisätä projektiin. Tähän projektiin se on jo lisätty hakemistoon mapreduce
.
App Enginen MapReduce-toteutuksessa on erilaisia tapoja lukea syötettä ja kirjoittaa tuloksia.
Tässä harjoituksessa voi esimerkiksi lukea käyttäen DatastoreInputReader
:ia ja kirjoittaa tulokset GoogleCloudStorageOutputWriter
:illä Cloud Storageen.
- Toisessa viikkoharjoituksessa tallennettiin eläimiä Datastore-tietokantaan. Voit jatkaa joko omasta 2. harjoituksen toteutuksestasi tai kloonata tämän repositorion, johon on jo valmiiksi lisätty mapreduce-kirjasto.
- Laske MapReducen avulla kunkin eläimen saalistajien lukumäärä. Eli se kuinka monta kertaa kukin eläin esiintyy muiden eläinten saaliseläimenä.
- Tulosten esittämiseen ei tässä tarvitse keskittyä. Voit katsoa ne vaikka SDK:n kehityskonsolin Blobstore Viewerillä (jos tallensit käyttäen
GoogleCloudStorageOutputWriter
:iä). Tai App Enginessä ajaessasi sen kehityskonsolista.
HUOM1: Tämä tehtävä ei nyt ole erityisen hyvä esimerkki MapReducen käytöstä. Ensinnäkin dataa on niin vähän, että MapReducen käytössä ei ole mitään järkeä; saman voisi tehdä tietokantakyselyinkin.
HUOM2: Jos tallensit DataStoreen kaksisuuntaiset saalistaja-saalis-linkit (tässä esimerkissä ei), on MapReduce-ajo triviaalihko. (Hakujen tehokkuuden takia moinen tietokantarakenne voisi olla järkeväkin.) Mieti kuitenkin tässäkin tapauksessa, että miten suorittaisit MapReducen jos DataStoressa olisi vain yksisuuntaiset linkit saalistaja->saalis (kuten tässä esimerkissä).