Wikipedian analysointi pilvessä Amazon Elastic MapReducella



MapReduce on Googlen kehittämä laskentamalli ja ohjelmistokehys rinnakkaislaskennalle. Se mahdollistaa suurien tietomäärien helpon käsittelyn esittämällä ohjelmointimallin jonka ohjelmat ovat rinnakkaistettavia ja tarjoamalla valmiin alustan näiden rinnakkaistettavien ohjelmien suorittamiselle. Noudattamalla tätä mallia kehittäjä säästyy rinnakkaislaskennassa toistuvista päänsäryistä, ja pystyy keskittyä varsinaiseen sovellukseen. MapReduce-malliin sopivia sovelluksia ovat muun muassa suurien tietomäärien lajittelu, haku, tilastointi ja logien analysointi.

Apache Hadoop on avoimen lähdekoodin toteutus edellä mainitusta MapReduce-ohjelmistokehyksestä joka mahdollistaa oman MapReduce-klusterin pystyttämisen. Amazon Elastic MapReduce -palvelun avulla ei tarvitse edes pystyttää tai ylläpitää omaa MapReduce-klusteria: rinnakkaislaskentatehtäviä voi suorittaa välittömästi pilvessä.

Amazon Elastic MapReduce hyödyntää Apache Hadoopia, jonka streaming-moduulilla pääsee tosi nopeasti käyntiin: yhden parin rivin mapper-komponentin toteuttaminen Rubyssä tai Pythonissa riittää, ja reducer-komponentteja toistuville tarpeille löytyy valmiina kirjastosta.

Esimerkkinä rinnakkaislaskentasovelluksesta voi käyttää vaikka Wikipedian pyyntölogien analysointi. Laskenta sisältää seuraavat osat:

  • Analysoitava tieto joka tässä tapauksessa siis on Wikipedian pyyntölogit yhdeltä päivältä (päivämäärälle 2.1.2011 tiedostot pagecounts-20110102-*.gz) tallennetaan Amazonin S3-palveluun josta Amazon Elastic MapReduce sitten lukee sen laskennan alkaessa.
  • Laskennan mapper-komponentti tallennetaan Amazon S3-palveluun jotta se olisi jokaisen laskentaan osallistuvan noodin saatavissa. Pyyntölogit koostuvat riveistä joiden muoto on: [Wikipedia-projektin nimi, esim. “fi”] [sivun nimi, esim. “Suomi”] [osumat tunnin aikana, esim. “100”] [siirretyt tavut, esim. “1000000”]. Alla oleva mapper-komponentti huomioi pelkästään suomalaisen Wikipedian sivut.
    #!/usr/bin/ruby
    
    $stdin.each_line do |line|
      project, page, hits, bytes = line.split
      next if project != 'fi' or project =~ /./ or page =~ /:/
      puts "LongValueSum:#{page}t#{hits}"
    end
    
  • Laskennan reducer-komponentti jätetään oletukseksi (“aggregate”). “LongValueSum” määrittää että jokaisen Wikipedia-sivun eri pyyntölogeissa olevat osumat tulee laskea yhteen reduce-vaiheessa.
  • Laskenta käynnistetään komennolla:
    bucket=samplebucket/samplejob
    elastic-mapreduce --create --num-instances 2 
        --stream --input s3n://$bucket/input 
        --mapper s3://$bucket/mapper.rb 
        --output s3n://$bucket/output
    

Rinnakkaislaskennan tulos ilmestyy jonkun ajan kuluttua Amazon S3 -palveluun tiedostomuodossa. Laskennan tulos on lista sivuja ja vastaavat pyyntömäärät. Lajittelun jälkeen seuraavat sivut ilmenevät suosituimpina suomalaisessa Wikipediassa maanantaina 2.1.2011:

Sivu Pyyntöä
Olli_Johansson 12488
Mikko_Niskanen 5147
Idän_pikajuna 3592
James_Bond 2922
Syyskuun_11._päivän_iskut 2554
Loppiainen 2256
Charme_Asserdal 2099
Harry_Potter 2012
Suomi 1810
Idän_pikajunan_arvoitus 1694

Tässä ei ole tarkoitus sen lähempää analysoida Wikipedia-kävijöiden käyttäytymistä, mutta tuloksiin näyttää vaikuttaneen erilaiset samana päivänä näytetyt TV-ohjelmat ja viihdeuutiset.

Tässä tulee huomauttaa siitä että yhden vuorokauden Wikipedia-pyyntölogit (kooltaan noin 1 gigatavu) eivät ole vielä niin isoja että ne välttämättä vaatii rinnakkaislaskentaa MapReduce-tyyliin – laskennan voisi tehdä yhdelläkin tietokoneella. Mutta kun analysoitava data lähestyy satoja gigatavuja tai jopa teratavuja (esim. kuukauden tai vuosien pyyntölogit) rinnakkaislaskenta alkaa olla tarpeellista. Laskennan suorittaminen yhdellä tietokoneella yksinkertaisesti kestäisi liian kauan: päiviä tai jopa viikkoja. Tälläisessa tapauksessa, jos MapReduce-laskentamalli sopii ongelmaan, Amazon Elastic MapReducen hyödyntäminen on vaihtoehto jolla pääsee nopeasti liikkeelle.

Lisää tietoa kehittäjille löytyy Amazon Elastic MapReducen dokumentaatiosta.

Tämän artikkelin on kirjoittanut Markus Holmberg  ja sitä ovat sittemmin muokanneet muut Codenton työntekijät.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *