Beste svaret
For hva det gjelder rammeverket som helhet: i dette øyeblikket er Apache Spark et skritt foran konkurrentene. , på grunn av noen egenskaper som implementering (og integrering) av forskjellige og svært nyttige verktøy (Spark SQL og MLlib bare for å nevne to) og muligheten til å lagre mellomliggende data i RDDene. På grunn av dette motivet konsentrerer mange utviklere seg om det, og jeg antar at inntil et nytt gjennombrudd i den underliggende teknologien vil komme opp, vil enhver konkurrent være ubetydelig.
Annerledes, hvis du vurderer enkeltimplementeringene på Apache Spark kan du identifisere noen konkurrenter: H2O er en utfordrer av Spark MLlib, Storm (har påpekt av Joe) er et alternativ til Spark-streaming, og der ute er det flere SQL-lignende motorer som kan sammenlignes med Spark SQL .
Svar
Her er noen JARGONS fra Apache Spark jeg skal bruke.
Jobb: – Et stykke kode som leser noe input fra HDFS eller lokalt, utfører noe beregning av dataene og skriver noen outputdata.
Stadier: -Jobs er delt inn i trinn . Stadier klassifiseres som et kart eller reduserer trinn (det er lettere å forstå hvis du har jobbet på Hadoop og vil korrelere). Stadier er delt basert på beregningsgrenser, alle beregninger (operatører) kan ikke oppdateres i ett trinn. Det skjer over mange trinn.
Oppgaver: – Hvert trinn har noen oppgaver, en oppgave per partisjon. Én oppgave utføres på en partisjon av data på en utfører (maskin).
DAG – DAG står for Directed Acyclic Graph, i den nåværende sammenheng er det en DAG av operatører.
Executor – Prosessen som er ansvarlig for å utføre en oppgave.
Driver – Programmet / prosessen som er ansvarlig for å kjøre jobben over Spark Engine
Master – Maskinen som driverprogrammet kjører på
Slave – Maskinen som Executor-programmet kjører på
Alle jobber i gnist består av en rekke operatører og kjøres på et datasett. Alle operatørene i en jobb brukes til å konstruere en DAG (Directed Acyclic Graph). DAG er optimalisert ved å omorganisere og kombinere operatører der det er mulig. La oss for eksempel anta at du må sende inn en Spark-jobb som inneholder en kartoperasjon etterfulgt av en filteroperasjon. Spark DAG optimizer vil omorganisere rekkefølgen til disse operatørene, ettersom filtrering vil redusere antall poster som skal gjennomføres på kart.
Spark har en liten kodebase og systemet er delt inn i forskjellige lag. Hvert lag har noen ansvar. Lagene er uavhengige av hverandre.
- Det første laget er tolk , bruker Spark en Scala-tolk, med noen modifikasjoner.
- Når du skriver inn koden din i gnistkonsoll (oppretter RDD-er og bruker operatører ), Oppretter Spark en operatørgraf.
- Når brukeren kjører en handling (som samle), sendes grafen til en DAG-planlegger. DAG-planleggeren deler operatørgraf i (kartlegge og redusere) trinn.
- Et trinn består av oppgaver basert på partisjoner av inngangsdataene. DAG-planleggeren leder operatører sammen for å optimalisere grafen. For f.eks. mange kartoperatører kan planlegges i ett trinn. Denne optimaliseringen er nøkkelen til ytelsen til Sparks. Det endelige resultatet av en DAG-planlegger er et sett med trinn.
- Stadiene videreføres til Oppgaveplanlegger . Oppgaveplanleggeren starter oppgaver via klyngebehandler . (Spark Standalone / Garn / Mesos). Oppgaveplanleggeren vet ikke om avhengigheter mellom trinn.
- Arbeider utfører oppgavene på Slaven. En ny JVM startes pr. JOBB. Arbeideren vet bare om koden som sendes til den.
Spark cacher dataene som skal behandles, slik at de blir 100 ganger raskere enn hadoop. Spark bruker Akka for Multithreading, administrere eksekutortilstand, planlegge oppgaver. Den bruker brygge til å dele filer (krukker og andre filer), Http Broadcast, kjøre Spark Web UI. Spark er svært konfigurerbar, og er i stand til å bruke de eksisterende komponentene som allerede eksisterer i Hadoop Eco-System. Dette har gjort at gnisten vokser eksponentielt, og på kort tid bruker mange organisasjoner den allerede i produksjonen.
Du kan se på
for å forstå ting mer detaljert.