Articles

Introduksjon til Apache Spark med Eksempler og Brukstilfeller

Jeg hørte først Om Spark i slutten av 2013 da jeg ble interessert i Scala, språket Der Spark er skrevet. Noen gang senere gjorde jeg et morsomt datavitenskapsprosjekt som prøvde å forutsi overlevelse På Titanic. Dette viste seg å være en fin måte å bli ytterligere introdusert Til Spark konsepter og programmering. Jeg anbefaler det for alle aspirerende Spark utviklere på jakt etter et sted å komme i gang.

I Dag blir Spark vedtatt av store aktører Som Amazon, eBay og Yahoo! Mange organisasjoner kjører Spark på klynger med tusenvis av noder. Ifølge Spark FAQ har den største kjente klyngen over 8000 noder. Faktisk, Spark er en teknologi vel verdt å ta notat av og lære om.

Denne artikkelen gir En introduksjon Til Spark, inkludert brukstilfeller og eksempler. Den inneholder informasjon Fra Apache Spark nettsiden samt boken Learning Spark-Lynrask Big Data Analyse.

Hva Er Apache Spark? En Introduksjon

Spark Er Et Apache-prosjekt annonsert som «lynrask cluster computing». Den har et blomstrende open source-samfunn og er det mest aktive Apache-prosjektet for øyeblikket.

Spark gir en raskere og mer generell databehandlingsplattform. Spark lar deg kjøre programmer opptil 100 ganger raskere i minnet, eller 10 ganger raskere på disk, Enn Hadoop. I fjor Tok Spark Over Hadoop ved å fullføre 100 TB Daytona GraySort contest 3x raskere på en tiendedel av antall maskiner, og det ble også den raskeste open source-motoren for å sortere en petabyte.

Spark gjør det også mulig å skrive kode raskere da du har over 80 operatører på høyt nivå til din disposisjon. For å demonstrere dette, la Oss ta en titt på «Hello World!»Av BigData: Ordet Teller eksempel. Skrevet I Java For MapReduce har den rundt 50 linjer med kode, mens I Spark (Og Scala) kan du gjøre det så enkelt som dette:

sparkContext.textFile("hdfs://...") .flatMap(line => line.split(" ")) .map(word => (word, 1)).reduceByKey(_ + _) .saveAsTextFile("hdfs://...")

Et annet viktig aspekt når du lærer Å bruke Apache Spark er det interaktive skallet (REPL) som det gir ut av boksen. Ved HJELP AV REPL, kan man teste utfallet av hver linje med kode uten først å måtte kode og utføre hele jobben. Veien til arbeidskode er dermed mye kortere og ad hoc dataanalyse er gjort mulig.Foreløpig Gir Apier I Scala, Java Og Python, med støtte for andre språk (For eksempel R) på vei Integrerer godt med Hadoop økosystem og datakilder (HDFS, Amazon S3, Hive, Hbase, Cassandra, etc.)

  • kan kjøre på klynger administrert Av Hadoop YARN ELLER Apache Mesos, og kan også kjøre frittstående
  • Gnistkjernen suppleres med et sett med kraftige biblioteker på høyere nivå som kan brukes sømløst i samme applikasjon. Disse bibliotekene inkluderer For tiden SparkSQL, Spark Streaming, MLlib (for maskinlæring) og GraphX, som hver er nærmere beskrevet i denne artikkelen. Ekstra Spark biblioteker og utvidelser er for tiden under utvikling også.

    gnistbiblioteker og utvidelser

    Gnistkjerne

    Gnistkjerne Er basismotoren for parallell og distribuert databehandling i stor skala. Det er ansvarlig for:

    • minnehåndtering og feilgjenoppretting
    • planlegging, distribusjon og overvåking av jobber på en klynge
    • samspill med lagringssystemer

    Spark introduserer konseptet MED EN RDD (Resilient Distributed Dataset), en uforanderlig feiltolerant, distribuert samling av objekter som kan betjenes parallelt. EN RDD kan inneholde alle typer objekter og opprettes ved å laste inn et eksternt datasett eller distribuere en samling fra driverprogrammet.

    RDDs støtter to typer operasjoner:

    • Transformasjoner Er operasjoner (for eksempel kart, filter, join, union og så videre) som utføres på EN RDD og som gir en ny RDD som inneholder resultatet.
    • Handlinger er operasjoner (for eksempel redusere, telle, først og så videre) som returnerer en verdi etter å ha kjørt en beregning på EN RDD.

    Transformasjoner I Spark er «lat», noe som betyr at de ikke beregner resultatene med en gang. I stedet «husker» de bare operasjonen som skal utføres og datasettet(f. eks. Transformasjonene beregnes bare når en handling kalles og resultatet returneres til driverprogrammet. Denne designen gjør At Spark kan kjøre mer effektivt. Hvis En stor fil for eksempel ble transformert på forskjellige måter og overført til første handling, Ville Spark bare behandle og returnere resultatet for den første linjen, i stedet for å gjøre arbeidet for hele filen.

    som standard kan hver transformerte RDD beregnes på nytt hver gang du kjører en handling på den. Du kan imidlertid også vedvare EN RDD i minnet ved hjelp av vedvarer eller cache-metoden, I så fall Spark vil holde elementene rundt på klyngen for mye raskere tilgang neste gang du spør den.

    SparkSQL

    SparkSQL er En Spark-komponent som støtter spørringsdata enten VIA SQL eller Via Hive-Spørringsspråket. Det oppsto Som Apache Hive port for å kjøre på Toppen Av Spark (i stedet For MapReduce) og er nå integrert Med Spark stack. I tillegg til å gi støtte for ulike datakilder, gjør DET mulig å veve SQL-spørringer med kode transformasjoner som resulterer i et svært kraftig verktøy. Nedenfor er et eksempel på En Hive-kompatibel spørring:

    // sc is an existing SparkContext.val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")sqlContext.sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src")// Queries are expressed in HiveQLsqlContext.sql("FROM src SELECT key, value").collect().foreach(println)

    Spark Streaming

    Spark Streaming støtter sanntidsbehandling av streaming av data, for eksempel produksjon webserver loggfiler (F.Eks Apache Flume og HDFS/S3), sosiale medier som Twitter, og ulike meldingskøer som Kafka. Under hetten mottar Spark Streaming inndatastrømmene og deler dataene i batcher. Deretter blir de behandlet Av Gnistmotoren og genererer endelig strøm av resultater i grupper, som vist nedenfor.

    spark streaming

    Gniststrømmings-API-en samsvarer tett med Gnistkjernen, noe som gjør det enkelt for programmerere å jobbe i verdener av både batch-og streamingdata.MLlib Er et maskinlæringsbibliotek som gir ulike algoritmer designet for å skalere ut på en klynge for klassifisering, regresjon, clustering, samarbeidsfiltrering og så videre (sjekk Ut Toptals artikkel om maskinlæring for mer informasjon om dette emnet). Noen av disse algoritmene fungerer også med streaming av data, for eksempel lineær regresjon ved bruk av vanlige minste kvadrater eller k-betyr clustering (og mer på vei). Apache Mahout (et maskinlæringsbibliotek For Hadoop) har allerede vendt seg bort Fra MapReduce og gått sammen Om Spark MLlib.

    GraphX

    graphx

    GraphX Er et bibliotek for å manipulere grafer og utføre graf-parallelle operasjoner. Det gir et enhetlig verktøy for ETL, utforskende analyse og iterative graf beregninger. Bortsett fra innebygde operasjoner for grafmanipulering, gir det et bibliotek med vanlige grafalgoritmer som PageRank.

    Hvordan Bruke Apache Spark: Event Detection Use Case

    Nå som vi har besvart spørsmålet » Hva Er Apache Spark ?», la oss tenke på hva slags problemer eller utfordringer det kan brukes til mest effektivt.jeg kom over en artikkel nylig om et eksperiment for å oppdage et jordskjelv ved å analysere En Twitter-strøm. Interessant, det ble vist at denne teknikken var sannsynlig å informere deg om et jordskjelv i Japan raskere Enn Japan Meteorological Agency. Selv om De brukte annen teknologi i artikkelen, synes jeg det er et godt eksempel å se hvordan Vi kunne sette Spark til bruk med forenklede kodebiter og uten limkoden.Først må vi filtrere tweets som virker relevante som «jordskjelv» eller «risting». Vi kan enkelt bruke Spark Streaming for det formålet som følger:

    TwitterUtils.createStream(...) .filter(_.getText.contains("earthquake") || _.getText.contains("shaking"))

    Da må vi kjøre noen semantisk analyse på tweets for å avgjøre om de ser ut til å referere til en nåværende jordskjelvforekomst. Tweets som » Jordskjelv!»Eller» Nå rister det», for eksempel, ville vurdere positive kamper, mens tweets som «Delta På En Jordskjelvkonferanse «eller» jordskjelvet i går var skummelt » ikke ville. Forfatterne av papiret brukte en støttevektormaskin (SVM) til dette formålet. Vi gjør det samme her, men kan også prøve en streaming-versjon. Et resulterende kodeeksempel fra MLlib vil se ut som følgende:

    // We would prepare some earthquake tweet data and load it in LIBSVM format.val data = MLUtils.loadLibSVMFile(sc, "sample_earthquate_tweets.txt")// Split data into training (60%) and test (40%).val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)val training = splits(0).cache()val test = splits(1)// Run training algorithm to build the modelval numIterations = 100val model = SVMWithSGD.train(training, numIterations)// Clear the default threshold.model.clearThreshold()// Compute raw scores on the test set. val scoreAndLabels = test.map { point => val score = model.predict(point.features) (score, point.label)}// Get evaluation metrics.val metrics = new BinaryClassificationMetrics(scoreAndLabels)val auROC = metrics.areaUnderROC()println("Area under ROC = " + auROC)

    hvis vi er fornøyd med modellens prediksjonshastighet, kan vi gå videre til neste trinn og reagere når vi oppdager et jordskjelv. For å oppdage en trenger vi et visst antall (dvs. tetthet) av positive tweets i et definert tidsvindu (som beskrevet i artikkelen). Merk at for tweets med Twitter location services aktivert, vil vi også trekke ut plasseringen av jordskjelvet. Bevæpnet med denne kunnskapen, kunne Vi bruke SparkSQL og spørre et eksisterende Hive-bord (lagring av brukere som er interessert i å motta jordskjelvvarsler) for å hente e-postadressene og sende dem en personlig advarsel-e-post, som følger:

    // sc is an existing SparkContext.val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)// sendEmail is a custom functionsqlContext.sql("FROM earthquake_warning_users SELECT firstName, lastName, city, email") .collect().foreach(sendEmail)

    Andre Apache Spark-Brukstilfeller

    Potensielle brukstilfeller For Spark strekker seg langt utover deteksjon av jordskjelv selvfølgelig.

    Her er en rask (men absolutt ikke i nærheten av uttømmende!) prøvetaking av andre brukstilfeller som krever håndtering av hastighet, variasjon og volum Av Store Data, Som Spark er så godt egnet:

    i spillbransjen, behandling og oppdage mønstre fra den potensielle firehose av sanntid i spillet hendelser og være i stand til å svare på dem umiddelbart er en evne som kan gi en lukrativ virksomhet, for formål som spiller oppbevaring, målrettet annonsering, auto-justering av kompleksitet nivå, og så videre.

    i e-handelsbransjen kan sanntids transaksjonsinformasjon sendes til en streaming clustering algoritme som k-means eller samarbeidsfiltrering som ALS. Resultatene kan da til og med kombineres med andre ustrukturerte datakilder, for eksempel kundekommentarer eller produktomtaler, og brukes til stadig å forbedre og tilpasse anbefalinger over tid med nye trender.

    I finans-eller sikkerhetsbransjen kan Spark stack brukes på et system for gjenkjenning av svindel eller inntrenging eller risikobasert godkjenning. Det kan oppnå topp resultater ved å høste store mengder arkiverte logger, kombinere den med eksterne datakilder som informasjon om databrudd og kompromitterte kontoer (se for eksempel https://haveibeenpwned.com/) og informasjon fra tilkoblingen/forespørselen som IP geolocation eller tid.

    Konklusjon

    For å oppsummere Bidrar Spark til å forenkle den utfordrende og beregningsintensive oppgaven med å behandle store mengder sanntids-eller arkiverte data, både strukturerte og ustrukturerte, sømløst integrere relevante komplekse evner som maskinlæring og grafalgoritmer. Spark bringer Stor Databehandling til massene. Sjekk det ut!