Aw.. jeeeez – Microintro til Apache Storm



Aw.. jeeeez – Microintro til Apache Storm

0 0


storm-intro-talk-mars

Short talk about Apache Storm

On Github gronnbeck / storm-intro-talk-mars

Aw.. jeeeez

Microintro til Apache Storm

Created by MacMan and KennyG

Outline:
  • Åpning: Ken
  • Motivasjon: Ken
  • Introduksjon: Steffen
  • Three Vs: Steffen
  • Bruksområder: Steffen
  • Datastruktur: Ken
  • Trident: Ken
  • Hvorfor Storm: Steffen
  • Bekks prosjekter: ken
  • SPM

Buzzwords

NoData, BigSQL

Motivasjon

  • Hva er storm
  • Skape interesse

when I test the alpha release

Introduksjon

History time

Nathan Marz - Backtype Kjøpt av Twitter i 2011 Apache Storm - 2013 Backtype var en social analyse-dashboard rettet mot å hjelpe brukere forstå hvilken rekkevidde tweets og lignende har, og knytte det opp mot markedsføringen sin. I 2013 ble prosjektet inkubert i Apache, og blir utviklet på av blant annet ansatte i Groupon og Microsoft. Siste release er 0.9.1

Hva er Storm?

Distributed and fault-tolerant realtime computation. Distribuert og feil-tolerant sanntidsutregnings-system. Det er skalerbart, garanterer at meldinger blir prosessert og er lett å jobbe med. Det har støtte for strømprosessering, kontinuerlige utregninger, og distribuert RPC.
Hadoop for data-streams. Storm blir ofte omtalt som Hadoop for data-streams. Hvor man bruker hadoop til å gjøre batch-prosessering av store datamengder bruker man Storm til å gjøre kontinuerlige utregninger på mindre data-sett, men realtime. Kan brukes i samsvar med en distribuert kø for input og Cassandra som lagring.

Bruksområder

Kompleks event-prosessering, kontinuerlig kalkulering og data-aggregering.

Kompleks event-prosessering

Use cases

  • Twitter
  • Loggly
  • Weather Channel
  • Flipboard

Twitter: Trending topics fra firehose-api'et

Loggly: Log aggregation as a service - filter, parse, analyse data.

Weather channel - vasking av data slik at det passer egent format før lagring.

Flipboard - Social magazine. søk, real-time analytics, generering av custom-feeds on the fly. Integrert med HBase, ElasticSearch.

Datastruktur og oppbyggning

S->B->B->B

Topologi

  • En graph
  • Eksempel har 6 noder
  • Hver node har sin egen jobb
  • Ikke delt state -> enkelt å distribuere og skalere

Spouts

I Storm kan "sourcene" for eventene sees på som en kran. Og de har dermed fått navnet "Spout" som rett og slett betyr kran. Og som dere ser her har jeg lagt ved et elegant bilde av en kran.

Spoutene er utvikles av utviklerne, og Storm gir oss kun et enkelt interface som må implementeres.

Spouts, kan og vil ofte, fungere som koblingen mellom "den ekte verden" og "storm sin verden". Der den siste nevnte har en flukserende og ikke nødvendigvis en fullstendig state. Og derfor kan utnytte dette til å gjøre ting raskt.

Eksempler på hva man kan bruke en Spout til:

  • Hente og videresende data fra en kø
  • Produsere randomsert data. F.eks. til
generering av RSA-nøkler

Bolts

Bolts. Usain Bolt. Disse kompoenentene har fått navnet sitt fordi de skal være uavhengige og raske, som et lyn.

Derfor følte jeg at det passet med et bilde av Usain. Jeg vet ikke hvor uavhengig han er, men jeg vet at han er jærlig rask.

Nok om det Usain. Det er i boltene Storm vil at vi skal implementere logikk og potensielt state. Ved å implentere bolter slik at de er uavhengig av hverandre, tidligere meldinger (til den graden det er mulig) og feil tolerante. Kan man få et event strøm prosesseringsmiljø som kan skaleres veldig bra.

Hvor mye det vil skalere er basert på hvor godt boltene er programmert. Men Storm tvinger utviklere til å tenke funksjonelt og stateless. Slik at man faktisk vil klare å utvikle en skalerbar Storm topologi.

Eksempler på hva man kan bruke en Bolt til er å:

  • Gjøre enkel logikk som filtrering
  • Manipulere data
  • Gjøre persistering
  • etc

Meldinger

Kommunisere mellom noder ved hjelp av meldinger. En melding er representert som en Tuppel

Tuppel

Felter og Verdier

Immutable

Spouter og Usain Bolter må snakke sammen. Disse to snakker sammen kun via meldinger. Der Spouter kan sende meldinger til Bolter. Og bolter igjen til andre bolter. Meldinger er strukturert som Immutable Tupler. Der hver verdi ligger i et forhåndsdefinert felt.

Eksempler med Trident

Nå tenkte jeg at vi skulle gå igjennom et eksempel på hvordan man kan bruke Storm. Jeg har elegant sakset koden fra Nathan Marz sin introduksjon til Storm.

Så eksempelet er gankse triviellt, men tar oss igjennom de viktigste konseptene for å komme i gang med Storm. Bare husk at det vi presenterer her er kun overflaten av hva man kan få til i rammeverket / platformen.

Tilbake til eksempelet. Helt konkret skal vi lage en topologi som tar inn en menge med setninger, og teller "word-occurance" for alle inkommende setninger.

En Spout

 FixedBatchSpout spout =
   new FixedBatchSpout(
    new Fields("sentence"), 3,
    new Values("the cow jumped over the moon"),
    new Values("the man went to the store and bought some candy"),
    new Values("four score and seven years ago"),
    new Values("how many apples can you eat"));

 spout.setCycle(true);

Denne Spouten er ganske triviell og lite brukelig til noe annet enn eksempel kode.

Kort fortalt tar denne disse fire sentingene om kuer epler og godterier og sender dem til topologien.

Hvor de blir sendt kommer vi tilbake til senere

En veldig enkel Bolt

public class Split extends BaseFunction {
  public void execute(TridentTuple tuple, TridentCollector collector) {
    String sentence = tuple.getString(0);
      for(String word: sentence.split(" ")) {
        collector.emit(new Values(word));
      }
  }
}

Her kommer et eksempel på en bolt. Dette er en helt enkel Java-snippet.

Og som dere ser tar denne inn en setning, splitter opp setningen til ord og sender dem videre ut til den store verdenen.

En topologi

 TridentTopology topology = new TridentTopology();
 TridentState wordCounts =
 topology.newStream( "spout1" , spout )
  .each( new Fields( "sentence" ), new Split(), new Fields( "word" ) )
  .groupBy( new Fields( "word" ) )
  .persistentAggregate( new MemoryMapState.Factory(),
                        new Count(),
                        new Fields( "count" ))
  .parallelismHint(6);

Det er her, når man skal definere topolgien, man bestemmer hvor spoutene og boltene skal levere meldingene sine.

I dette kodeeksempelet har vi brukt Trident. Trident er et høynivå API for å definere topologier. Trident sørger også for at meldinger garantert blir prosessert.

Steffen: Husker du hvordan garanterer dette?

Hvorfor Storm?

Lett å skrive og skalere komplekse, sanntidsutregninger. Storm er på en måte Hadoop for real-time. Abstraherer bort kompleksiteten av kø/worker systemer, og kompleksiteten rundt feilhåndtering og skalering.
Prosessere millioner av meldinger i sekundetStorm kan prosessere flere millioner meldinger i sekundet på en liten cluster, så man slipper å bekymre seg om skalering.
Kan kan skrive topologier i hvilket som helst språk.
Enkel programmeringsmodell - lett å ressonere rundt Smertefritt å utvide eksisterende topologier - iterativ utvikling.
Valgfri meldingssemantikkat least once, at most once eller excatly once.
FeiltolerentZookeeper keeps your state safe - hvis noder dør / må restartes.
Open source! med utvikler fra Microsoft, Yahoo, Twitter ++.

Spm?