Ohjelmointi

Mikä on Apache Spark? Suuri tietojärjestelmä, joka mursi Hadoopin

Apache Spark määritelty

Apache Spark on tietojenkäsittelykehys, joka pystyy suorittamaan nopeasti käsittelytehtäviä erittäin suurille tietojoukoille, ja voi myös jakaa tietojenkäsittelytehtäviä useille tietokoneille joko yksin tai yhdessä muiden hajautettujen tietojenkäsittelytyökalujen kanssa. Nämä kaksi ominaisuutta ovat avain big data- ja koneoppimisen maailmaan, jotka edellyttävät massiivisen laskentatehon yhdistämistä suurten tietovarastojen läpi. Spark ottaa myös osan näiden tehtävien ohjelmointitaakasta kehittäjien harteilta helppokäyttöisen sovellusliittymän avulla, joka poimii suurimman osan hajautetun tietojenkäsittelyn ja ison tietojenkäsittelyn ahkasta työstä.

Nöyrästä alusta AMC: ssä U.C. Berkeley vuonna 2009, Apache Sparkista on tullut yksi tärkeimmistä suurten datan hajautettujen käsittelykehysten puitteista maailmassa. Spark voidaan ottaa käyttöön monin eri tavoin, se tarjoaa natiivisitoutumiset Java-, Scala-, Python- ja R-ohjelmointikielille ja tukee SQL: ää, suoratoistotietoja, koneoppimista ja kaavioiden käsittelyä. Löydät sen käyttävän pankkeja, telekommunikaatioyrityksiä, peliyrityksiä, hallituksia ja kaikkia tärkeimpiä teknologiajätteitä, kuten Apple, Facebook, IBM ja Microsoft.

Apache Spark -arkkitehtuuri

Perustasolla Apache Spark -sovellus koostuu kahdesta pääkomponentista: a kuljettaja, joka muuntaa käyttäjän koodin useiksi tehtäviksi, jotka voidaan jakaa työntekijöiden solmuille, ja toimeenpanijat, jotka suorittavat noissa solmuissa ja suorittavat niille osoitetut tehtävät. Jonkinlainen klusterinhallinta on tarpeen näiden kahden välittämiseen.

Spark voi käydä paketissa erillisessä klusterimoodissa, joka vaatii yksinkertaisesti Apache Spark -kehyksen ja JVM: n jokaisessa klusterisi koneessa. On kuitenkin todennäköisempää, että haluat hyödyntää vankemman resurssien tai klusterien hallintajärjestelmän, jotta voit huolehtia työntekijöiden jakamisesta sinulle tarvittaessa. Yrityksessä tämä tarkoittaa yleensä juoksemista Hadoop YARNilla (näin Cloudera- ja Hortonworks-jakelut suorittavat Spark-töitä), mutta Apache Spark voi toimia myös Apache Mesosilla, Kubernetesilla ja Docker Swarmilla.

Jos haet hallittua ratkaisua, Apache Spark löytyy osana Amazon EMR: ää, Google Cloud Dataprocia ja Microsoft Azure HDInsightia. Apache Sparkin perustajia palveleva yritys Databricks tarjoaa myös Databricks Unified Analytics Platform -alustan, joka on kattava hallittu palvelu, joka tarjoaa Apache Spark -klustereita, suoratoistotukea, integroitua verkkopohjaista muistikirjakehitystä ja optimoitua pilvi I / O-suorituskykyä vakio Apache Spark -jakelu.

Apache Spark rakentaa käyttäjän tietojenkäsittelykomennot a Suunnattu asyklinen kaaviotai DAG. DAG on Apache Sparkin ajoituskerros; se määrittää, mitkä tehtävät missä solmuissa ja missä järjestyksessä suoritetaan.

Spark vs. Hadoop: Miksi käyttää Apache Sparkia?

On syytä huomauttaa, että Apache Spark vs. Apache Hadoop on hieman väärinkäytös. Löydät Sparkin useimpiin Hadoop-jakeluihin nykyään. Mutta kahdesta suuresta edusta johtuen Sparkista on tullut valintakehys suurten tietojen käsittelyssä ohittamalla vanha MapReduce-paradigma, joka toi Hadoopin esiin.

Ensimmäinen etu on nopeus. Sparkin muistin sisäinen datamoottori tarkoittaa, että se voi suorittaa tehtäviä jopa sata kertaa nopeammin kuin MapReduce tietyissä tilanteissa, etenkin verrattuna monivaiheisiin töihin, jotka edellyttävät tilan kirjoittamista takaisin levylle vaiheiden välillä. Pohjimmiltaan MapReduce luo kaksivaiheisen suorituskaavion, joka koostuu tietojen kartoittamisesta ja vähentämisestä, kun taas Apache Sparkin DAG: lla on useita vaiheita, jotka voidaan jakaa tehokkaammin. Jopa Apache Spark -työt, joissa tietoja ei voida sisällyttää kokonaan muistiin, ovat yleensä noin 10 kertaa nopeammat kuin MapReduce-vastineensa.

Toinen etu on kehittäjäystävällinen Spark API. Yhtä tärkeää kuin Sparkin nopeus on, voidaan väittää, että Spark-sovellusliittymän ystävällisyys on vielä tärkeämpää.

Kipinän ydin

MapReduceen ja muihin Apache Hadoop -komponentteihin verrattuna Apache Spark -sovellusliittymä on erittäin ystävällinen kehittäjille, piilottaen suuren osan hajautetun prosessorin monimutkaisuudesta yksinkertaisten menetelmäpuheluiden taakse. Kanoninen esimerkki tästä on, kuinka lähes 50 MapReduce-koodin riviä sanojen laskemiseksi asiakirjassa voidaan vähentää vain muutamaan Apache Spark -riviin (tässä Scalassa):

val textFile = sparkSession.sparkContext.textFile (“hdfs: /// tmp / words”)

val countts = textFile.flatMap (rivi => line.split (““))

.map (sana => (sana, 1))

.reduceByKey (_ + _)

countts.saveAsTextFile (“hdfs: /// tmp / words_agg”)

Tarjoamalla sidoksia suosittuihin kieliin tietojen analysointia varten, kuten Python ja R, sekä yritysystävällisemmäksi Java ja Scala, Apache Spark antaa kaikille sovellusten kehittäjistä datatieteilijöille mahdollisuuden hyödyntää sen skaalautuvuutta ja nopeutta helposti saatavilla olevalla tavalla.

Spark RDD

Apache Sparkin ytimessä on Resilient Distributed Dataset (RDD) -konsepti, ohjelmointi abstraktio, joka edustaa muuttumattomaa objektien kokoelmaa, joka voidaan jakaa tietokoneryhmään. RDD-levyjen toiminnot voidaan myös jakaa klusterin yli ja suorittaa rinnakkaisessa eräprosessissa, mikä johtaa nopeaan ja skaalautuvaan rinnakkaiskäsittelyyn.

RDD-tiedostoja voidaan luoda yksinkertaisista tekstitiedostoista, SQL-tietokannoista, NoSQL-kaupoista (kuten Cassandra ja MongoDB), Amazon S3 -kauhoista ja monista muista. Suuri osa Spark Core -sovellusliittymästä on rakennettu tälle RDD-konseptille, mikä mahdollistaa perinteisen kartan ja vähentää toiminnallisuutta, mutta tarjoaa myös sisäänrakennetun tuen tietojoukkojen yhdistämiseen, suodattamiseen, näytteenottoon ja yhdistämiseen.

Spark toimii hajautetusti yhdistämällä a kuljettaja ydinprosessi, joka jakaa Spark-sovelluksen tehtäviksi ja jakaa ne monien kesken toimeenpanija prosessit, jotka tekevät työn. Näitä suorittimia voidaan skaalata ylös ja alas tarpeen mukaan sovelluksen tarpeiden mukaan.

Spark SQL

Alun perin nimellä Shark, Spark SQL on tullut yhä tärkeämmäksi Apache Spark -projektille. Se on todennäköisesti käyttöliittymä, jota nykyiset kehittäjät käyttävät yleisimmin sovelluksia luodessaan. Spark SQL on keskittynyt strukturoidun datan käsittelyyn käyttämällä tietokehysmenetelmää, joka on lainattu R: ltä ja Pythonilta (pandoissa). Mutta kuten nimestä voi päätellä, Spark SQL tarjoaa myös SQL2003-yhteensopivan käyttöliittymän tietojen kyselyyn, mikä tuo Apache Sparkin voiman sekä analyytikoille että kehittäjille.

Normaalin SQL-tuen lisäksi Spark SQL tarjoaa vakioliitännän lukemiseen ja kirjoittamiseen muille tietopisteille, mukaan lukien JSON, HDFS, Apache Hive, JDBC, Apache ORC ja Apache Parquet, joita kaikkia tuetaan suoraan pakkauksesta. Muita suosittuja kauppoja - Apache Cassandra, MongoDB, Apache HBase ja monia muita - voidaan käyttää vetämällä erilliset liittimet Spark Packages -ekosysteemistä.

Joidenkin sarakkeiden valinta datakehyksestä on yhtä helppoa kuin tämä rivi:

kaupungitDF.select ("nimi", "pop")

SQL-käyttöliittymän avulla rekisteröimme datakehyksen väliaikaiseksi taulukoksi, jonka jälkeen voimme antaa SQL-kyselyjä sitä vastaan:

kaupungitDF.createOrReplaceTempView (“kaupungit”)

spark.sql (“VALITSE nimi, pop FROM kaupungeista”)

Kulissien takana Apache Spark käyttää Catalyst-nimistä kyselynoptimointia, joka tutkii tietoja ja kyselyitä tuottamaan tehokas kyselysuunnitelma tietojen sijainnille ja laskennalle, joka suorittaa tarvittavat laskelmat koko klusterissa. Apache Spark 2.x -aikakaudella tietokehysten ja tietojoukkojen Spark SQL -rajapinta (lähinnä kirjoitettu tietokehys, joka voidaan tarkistaa kääntämisajankohtana ja käyttää hyväksi lisämuistia ja laskea optimointia ajon aikana) on suositeltava lähestymistapa kehitykseen . RDD-käyttöliittymä on edelleen käytettävissä, mutta sitä suositellaan vain, jos tarpeitasi ei voida vastata Spark SQL -paradigmassa.

Spark 2.4 esitteli joukon sisäänrakennettuja korkeamman tason toimintoja taulukoiden ja muiden korkeamman asteen tietotyyppien suoraan käsittelyyn.

Spark MLlib

Apache Spark niputtaa myös kirjastoja koneoppimisen ja kaavioanalyysitekniikoiden soveltamiseksi mittakaavassa olevaan dataan. Spark MLlib sisältää puitteet koneoppimisen putkilinjojen luomiselle, mikä mahdollistaa ominaisuuksien purkamisen, valintojen ja muunnosten helpon toteuttamisen missä tahansa strukturoidussa tietojoukossa. MLlibin mukana toimitetaan klusterointi- ja luokittelualgoritmien hajautetut toteutukset, kuten k-tarkoittaa klustereita ja satunnaisia ​​metsiä, jotka voidaan vaihtaa helposti mukautettuihin putkistoihin ja sieltä pois. Datatieteilijät voivat kouluttaa malleja Apache Sparkissa R- tai Python-ohjelmalla, tallentaa MLlibin avulla ja tuoda ne sitten Java- tai Scala-pohjaiseen putkistoon tuotantokäyttöä varten.

Huomaa, että vaikka Spark MLlib kattaa koneen perusopetuksen, mukaan lukien luokittelu, regressio, klusterointi ja suodatus, se ei sisällä tiloja syvän hermoverkkojen mallintamiseen ja kouluttamiseen (lisätietoja on Spark MLlib -katsauksessa). Deep Learning Pipelines on kuitenkin töissä.

Spark GraphX

Spark GraphX ​​sisältää valikoiman hajautettuja algoritmeja kaaviorakenteiden käsittelemiseksi, mukaan lukien Googlen PageRankin toteutus. Nämä algoritmit käyttävät Spark Corein RDD-lähestymistapaa tietojen mallintamiseen; GraphFrames-paketin avulla voit tehdä kaaviooperaatioita datakehyksissä, mukaan lukien Catalyst-optimoijan hyödyntäminen graafikyselyissä.

Kipinän suoratoisto

Spark Streaming oli varhainen lisäys Apache Sparkiin, joka auttoi sitä saamaan pidon ympäristöissä, jotka vaativat reaaliaikaista tai lähes reaaliaikaista käsittelyä. Aikaisemmin erä- ja suoratoistokäsittely Apache Hadoopin maailmassa olivat erillisiä asioita. Kirjoitat MapReduce-koodin eräkäsittelytarpeisiisi ja käytät jotain Apache Stormia reaaliaikaisiin suoratoistovaatimuksiisi. Tämä johtaa tietysti erilaisiin koodipohjoihin, jotka on pidettävä synkronoituna sovellusalueelle huolimatta siitä, että ne perustuvat täysin erilaisiin kehyksiin, vaativat erilaisia ​​resursseja ja edellyttävät erilaisia ​​operatiivisia huolenaiheita niiden ajamiseksi.

Spark Streaming laajensi Apache Spark -komennon eräkäsittelystä suoratoistoon jakamalla virta jatkuvaksi mikroryhmiksi, joita voitiin sitten käsitellä Apache Spark -sovellusliittymän avulla. Tällä tavoin erä- ja suoratoistotoimintojen koodi voi jakaa (pääosin) saman koodin, joka toimii samalla kehyksellä, mikä vähentää sekä kehittäjän että operaattorin yleiskustannuksia. Kaikki voittavat.

Spark Streaming -lähestymistavan kritiikki on, että mikropakkaus, skenaarioissa, joissa vaaditaan matalan viiveen vastausta saapuvaan dataan, ei välttämättä pysty vastaamaan muiden suoratoistoa tukevien kehysten, kuten Apache Storm, Apache Flink ja Apache Apex, suorituskykyyn, kaikki käyttävät puhdasta suoratoistomenetelmää mikropanosten sijaan.

Jäsennelty suoratoisto

Strukturoitu suoratoisto (lisätty Spark 2.x: ään) on Spark Streamingiin, mikä Spark SQL oli Spark Core -sovellusliittymiin: korkeamman tason sovellusliittymä ja helpompi abstraktio sovellusten kirjoittamiseen. Rakenteiden suoratoiston tapauksessa ylemmän tason sovellusliittymä antaa kehittäjille lähinnä mahdollisuuden luoda loputtomia suoratoiston datakehyksiä ja tietojoukkoja. Se ratkaisee myös joitain hyvin todellisia kipupisteitä, joita käyttäjät ovat kamppailleet aikaisemmissa puitteissa, erityisesti tapahtuma-aikojen yhdistämisen ja viivästyneiden viestien toimittamisen suhteen. Kaikki jäsenneltyjen virtojen kyselyt käyvät läpi Catalyst-kyselyn optimoijan, ja ne voidaan jopa suorittaa interaktiivisella tavalla, jolloin käyttäjät voivat suorittaa SQL-kyselyitä suoratoistodataa vastaan.

Strukturoitu suoratoisto luotti alun perin Spark Streamingin mikrobakteerijärjestelmään suoratoistodatan käsittelemiseksi. Mutta Spark 2.3: ssa Apache Spark -tiimi lisäsi matalaviiveisen jatkuvan prosessointitilan strukturoituun suoratoistoon, jolloin se pystyi käsittelemään vastauksia jopa 1 ms viiveillä, mikä on erittäin vaikuttavaa. Spark 2.4: stä lähtien jatkuvaa prosessointia pidetään edelleen kokeellisena. Vaikka rakenteinen suoratoisto on rakennettu Spark SQL -moottorin päälle, Jatkuva suoratoisto tukee vain rajoitettuja kyselyitä.

Strukturoitu suoratoisto on sovellusten suoratoiston tulevaisuus, joten jos rakennat uutta suoratoistosovellusta, käytä strukturoitua suoratoistoa. Vanhoja Spark Streaming -sovellusliittymiä tuetaan edelleen, mutta projekti suosittelee siirtämistä strukturoituun suoratoistoon, koska uusi menetelmä tekee suoratoistokoodin kirjoittamisesta ja ylläpidosta paljon siedettävämpää.

Syvän oppimisen putket

Apache Spark tukee syvää oppimista Deep Learning Pipelinesin kautta. MLlibin nykyisen putkistorakenteen avulla voit kutsua alemman tason syväoppimiskirjastoja ja rakentaa luokittelijoita vain muutamalla koodirivillä sekä soveltaa mukautettuja TensorFlow-kaavioita tai Keras-malleja saapuvaan dataan. Nämä kaaviot ja mallit voidaan jopa rekisteröidä mukautetuiksi Spark SQL UDF-tiedostoiksi (käyttäjän määrittelemät toiminnot), jotta syvällisiä oppimismalleja voidaan soveltaa tietoihin osana SQL-lauseita.

Apache Spark -oppaat

Oletko valmis sukeltamaan ja oppimaan Apache Sparkia? Suosittelemme erittäin paljon Evan Heitmanin A Neanderthal's's Guide to Apache Spark in Python -ohjelmaa, jossa ei pelkästään esitetä Apache Sparkin toiminnan perusteet suhteellisen yksinkertaisilla termeillä, vaan myös opastetaan yksinkertaisen Python-sovelluksen kirjoittamisprosessissa, joka käyttää kehystä. . Artikkeli on kirjoitettu datatieteilijän näkökulmasta, mikä on järkevää, koska datatiede on maailma, jossa big data ja koneoppiminen ovat yhä kriittisempiä.

Jos etsit joitain Apache Spark -esimerkkejä, jotka antavat sinulle käsityksen siitä, mitä foorumi voi tehdä ja miten se toimii, tutustu Spark By {Esimerkit} -artikkeliin. Täällä on runsaasti esimerkkikoodia useille perustehtäville, jotka muodostavat Spark-ohjelmoinnin rakennuspalikat, joten näet komponentit, jotka muodostavat suuremmat tehtävät, joihin Apache Spark on tehty.

Pitäisikö mennä syvemmälle? DZonella on vaatimattomasti nimeltään täydellinen Apache Spark -kokoelma, joka koostuu joukosta hyödyllisiä oppaita monista Apache Spark -aiheista. Hyvää oppimista!