Bedste svar
For hvad det vedrører rammen som helhed: i dette øjeblik er Apache Spark et skridt foran sine konkurrenter på grund af nogle egenskaber som implementering (og integration) af forskellige og meget nyttige værktøjer (Spark SQL og MLlib bare for at nævne to) og muligheden for at gemme mellemliggende data i RDDerne. På grund af dette motiv koncentrerer mange udviklere sig om det, og jeg gætter på, at indtil et nyt gennembrud i den underliggende teknologi kommer op, vil enhver konkurrent være ubetydelig.
Hvis du overvejer de enkelte implementeringer, er det anderledes. på Apache Spark kan du identificere nogle konkurrenter: H2O er en udfordrer af Spark MLlib, Storm (har påpeget af Joe) er et alternativ til Spark-streaming, og derude er der flere SQL-lignende motorer, der kan sammenlignes med Spark SQL .
Svar
Her er nogle JARGONS fra Apache Spark, jeg vil bruge.
Job: – Et stykke kode, der læser noget input fra HDFS eller lokalt, udfører noget beregning af dataene og skriver nogle outputdata.
Faser: -Jobs er opdelt i faser . Stadier klassificeres som et kort eller reducerer etaper (det er lettere at forstå, hvis du har arbejdet på Hadoop og vil korrelere). Stadier er opdelt baseret på beregningsgrænser, alle beregninger (operatorer) kan ikke opdateres i en enkelt fase. Det sker over mange faser.
Opgaver: – Hver fase har nogle opgaver, en opgave pr. Partition. Én opgave udføres på en partition af data på en eksekutor (maskine).
DAG – DAG står for Directed Acyclic Graph, i den nuværende sammenhæng er det en DAG af operatører.
Executor – Den proces, der er ansvarlig for at udføre en opgave.
Driver – Programmet / processen, der er ansvarlig for at køre jobbet over Spark Engine
Master – Maskinen, som driverprogrammet kører på
Slave – Maskinen, som Executor-programmet kører på
Alle job i gnist består af en række operatører og kører på et datasæt. Alle operatører i et job bruges til at konstruere en DAG (Directed Acyclic Graph). DAG er optimeret ved at omarrangere og kombinere operatører, hvor det er muligt. Lad os for eksempel antage, at du skal indsende et gnistjob, der indeholder en korthandling efterfulgt af en filterhandling. Spark DAG optimizer vil omarrangere rækkefølgen af disse operatører, da filtrering vil reducere antallet af poster, der skal gennemføres på kort.
Spark har en lille kodebase, og systemet er opdelt i forskellige lag. Hvert lag har nogle ansvar. Lagene er uafhængige af hinanden.
- Det første lag er tolk bruger Spark en Scala-tolk med nogle ændringer.
- Når du indtaster din kode i gnistkonsol (opretter RDDer og anvender operatører ), Gnist opretter en operatørgraf.
- Når brugeren kører en handling (som f.eks. Indsamling), sendes grafen til en DAG-planlægger. DAG-planlægning deler operatørgraf i (kortlæg og reducer) faser.
- Et trin består af opgaver, der er baseret på partitioner af inputdataene. DAG-planlæggeren leder operatører sammen for at optimere grafen. For f.eks. mange kortoperatører kan planlægges i et enkelt trin. Denne optimering er nøglen til Sparks-ydeevne. Det endelige resultat af en DAG-planlægning er et sæt trin.
- Trinene sendes videre til Opgaveplanlægger . Opgaveplanlæggeren starter opgaver via klyngemanager . (Spark Standalone / Garn / Mesos). Opgaveplanlæggeren ved ikke om afhængigheder mellem faser.
- Arbejdstager udfører opgaverne på Slave. En ny JVM startes pr. JOB. Arbejderen kender kun til koden, der sendes til den.
Spark cachelagrer de data, der skal behandles, hvilket giver mig 100 gange hurtigere end hadoop. Spark bruger Akka til Multithreading, administrerer eksekutortilstand, planlægning af opgaver. Den bruger Jetty til at dele filer (krukker og andre filer), Http Broadcast, køre Spark Web UI. Spark er meget konfigurerbar og er i stand til at udnytte de eksisterende komponenter, der allerede findes i Hadoop Eco-System. Dette har gjort det muligt for gnisten at vokse eksponentielt, og på kort tid bruger mange organisationer det allerede i produktionen.
Du kan se på
for at forstå tingene mere detaljeret.