Programavimas

Kas yra „Apache Spark“? Didžioji duomenų platforma, sutriuškinusi Hadoopą

Apache Spark apibrėžta

„Apache Spark“ yra duomenų apdorojimo sistema, kuri gali greitai atlikti labai didelių duomenų rinkinių apdorojimo užduotis, taip pat gali paskirstyti duomenų apdorojimo užduotis keliuose kompiuteriuose atskirai arba kartu su kitais paskirstytais skaičiavimo įrankiais. Šios dvi savybės yra raktas į didžiųjų duomenų ir mašininio mokymosi pasaulį, kuriai reikalinga didžiulė skaičiavimo galia, kad būtų galima peržengti dideles duomenų saugyklas. „Spark“ taip pat nuima dalį šių užduočių programavimo naštos nuo kūrėjų pečių, naudodama lengvai naudojamą API, kuri pašalina didžiąją dalį paskirstyto skaičiavimo ir didelių duomenų apdorojimo darbo.

Nuo savo kuklaus pradžios AMPLab U.C. „Berkeley“ 2009 m. „Apache Spark“ tapo viena pagrindinių pasaulyje didelių duomenų paskirstymo apdorojimo sistemomis. „Spark“ galima diegti įvairiais būdais, jis teikia „Java“, „Scala“, „Python“ ir R programavimo kalbų pririšimus ir palaiko SQL, srautinius duomenis, mašininį mokymąsi ir grafikų apdorojimą. Rasite, kad jį naudoja bankai, telekomunikacijų bendrovės, žaidimų kompanijos, vyriausybės ir visi pagrindiniai technologijų gigantai, tokie kaip „Apple“, „Facebook“, IBM ir „Microsoft“.

Apache Spark architektūra

Iš esmės „Apache Spark“ programa susideda iš dviejų pagrindinių komponentų: a vairuotojas, kuris vartotojo kodą paverčia keliomis užduotimis, kurias galima paskirstyti tarp darbuotojų mazgų, ir vykdytojai, kurie veikia tuose mazguose ir vykdo jiems paskirtas užduotis. Tam tikra klasterio valdytojo forma yra būtina tarpininkaujant tarp jų.

Iš dėžutės „Spark“ gali veikti atskiru grupių režimu, kuriam tiesiog reikalinga „Apache Spark“ sistema ir JVM kiekvienoje jūsų klasterio mašinoje. Tačiau labiau tikėtina, kad norėsite pasinaudoti patikimesne išteklių ar grupių valdymo sistema, kad pasirūpintumėte darbuotojų paskirstymu pagal jūsų poreikius. Įmonėje tai paprastai reiškia, kad reikia paleisti „Hadoop YARN“ (taip „Cloudera“ ir „Hortonworks“ paskirstymai vykdo „Spark“ užduotis), tačiau „Apache Spark“ taip pat gali veikti „Apache Mesos“, „Kubernetes“ ir „Docker Swarm“.

Jei ieškote valdomo sprendimo, „Apache Spark“ galite rasti kaip „Amazon EMR“, „Google Cloud Dataproc“ ir „Microsoft Azure HDInsight“ dalį. „Databricks“, įmonė, įdarbinanti „Apache Spark“ įkūrėjus, taip pat siūlo „Databricks Unified Analytics Platform“, kuri yra išsami valdoma paslauga, siūlanti „Apache Spark“ grupes, srautinį palaikymą, integruotą internetinių nešiojamųjų kompiuterių kūrimą ir optimizuotą debesies I / O našumą. standartinis „Apache Spark“ paskirstymas.

„Apache Spark“ sukuria vartotojo duomenų apdorojimo komandas į Kreipiamasis aciklinis grafikasarba DAG. DAG yra „Apache Spark“ planavimo sluoksnis; ji nustato, kokios užduotys vykdomos kokiuose mazguose ir kokia seka.

„Spark vs. Hadoop“: kodėl naudoti „Apache Spark“?

Verta pabrėžti, kad „Apache Spark“ ir „Apache Hadoop“ yra šiek tiek klaidingas pavadinimas. Šiomis dienomis „Spark“ rasite daugumoje „Hadoop“ platinimų. Tačiau dėl dviejų didelių privalumų „Spark“ tapo pasirinkimo sistema apdorojant didelius duomenis, aplenkiant senąją „MapReduce“ paradigmą, kuri išryškino Hadoopą.

Pirmasis privalumas yra greitis. „Spark“ atmintyje esantis duomenų variklis reiškia, kad tam tikrose situacijose jis gali atlikti užduotis iki šimto kartų greičiau nei „MapReduce“, ypač lyginant su daugiapakopiais darbais, kuriems reikalinga būsenos įrašymas atgal į diską tarp etapų. Iš esmės „MapReduce“ sukuria dviejų pakopų vykdymo grafiką, susidedantį iš duomenų susiejimo ir redukcijos, o „Apache Spark“ DAG turi kelis etapus, kuriuos galima paskirstyti efektyviau. Net „Apache Spark“ darbai, kurių duomenys negali būti visiškai atmintyje, yra maždaug 10 kartų greitesni nei jų „MapReduce“ atitikmuo.

Antrasis privalumas yra kūrėjams tinkama „Spark“ API. Kad ir koks svarbus yra „Spark“ spartinimas, galima teigti, kad „Spark“ API patogumas yra dar svarbesnis.

Kibirkšties šerdis

Palyginti su „MapReduce“ ir kitais „Apache Hadoop“ komponentais, „Apache Spark“ API yra labai draugiška kūrėjams, slėpdama didelę paskirstyto apdorojimo variklio sudėtingumo dalį už paprastų metodų skambučių. Kanoniškas to pavyzdys yra tai, kaip beveik 50 „MapReduce“ kodo eilučių, kad būtų galima suskaičiuoti žodžius dokumente, galima sumažinti iki kelių „Apache Spark“ eilučių (čia parodyta „Scala“):

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

val countes = textFile.flatMap (eilutė => line.split („“))

.map (žodis => (žodis, 1))

.reduceByKey (_ + _)

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

Teikdama susiejimus su populiariomis duomenų analizės kalbomis, tokiomis kaip „Python“ ir „R“, taip pat įmonėms labiau pritaikytomis „Java“ ir „Scala“, „Apache Spark“ leidžia visiems, pradedant programų kūrėjais ir baigiant duomenų mokslininkais, naudotis jo masteliu ir sparta prieinamu būdu.

„Spark RDD“

„Apache Spark“ yra „Resilient Distributed Dataset“ (RDD), programavimo abstrakcijos, kuri atspindi nekintamą objektų rinkinį, kurį galima padalyti į skaičiavimo klasterį, koncepcija. RDD operacijos taip pat gali būti padalytos į grupę ir vykdomos lygiagrečiu paketiniu procesu, todėl greitas ir keičiamo mastelio lygiagretus apdorojimas.

RDD galima sukurti iš paprastų tekstinių failų, SQL duomenų bazių, NoSQL parduotuvių (tokių kaip „Cassandra“ ir „MongoDB“), „Amazon S3“ kibirų ir daug daugiau. Didžioji dalis „Spark Core“ API yra sukurta remiantis šia RDD koncepcija, leidžiančia tradicinį žemėlapį ir sumažinti funkcionalumą, tačiau taip pat teikia integruotą palaikymą prisijungiant prie duomenų rinkinių, filtruojant, imant ir kaupiant.

Kibirkštis veikia paskirstytai, derinant a vairuotojas pagrindinis procesas, kuris padalija „Spark“ programą į užduotis ir paskirsto jas daugeliui vykdytojas procesai, kurie atlieka darbą. Šie vykdytojai gali būti keičiami aukštyn ir žemyn, jei to reikia programos poreikiams.

„Spark SQL“

Iš pradžių žinomas kaip „Shark“, „Spark SQL“ tapo vis svarbesnis „Apache Spark“ projektui. Tikėtina, kad sąsaja dažniausiai naudojama šių dienų kūrėjų kuriant programas. „Spark SQL“ yra orientuota į struktūrinių duomenų apdorojimą, naudojant „Dataframe“ metodą, pasiskolintą iš „R“ ir „Python“ („Pandas“). Tačiau, kaip rodo pavadinimas, „Spark SQL“ taip pat teikia su SQL2003 suderinamą sąsają duomenims pateikti, suteikdama „Apache Spark“ galią tiek analitikams, tiek kūrėjams.

Be standartinio SQL palaikymo, „Spark SQL“ suteikia standartinę sąsają, skirtą skaityti iš kitų duomenų saugyklų ir rašyti joms, įskaitant JSON, HDFS, „Apache Hive“, JDBC, „Apache ORC“ ir „Apache Parquet“, kurios visos palaikomos iš dėžutės. Kitos populiarios parduotuvės - „Apache Cassandra“, „MongoDB“, „Apache HBase“ ir daugelis kitų - gali būti naudojamos traukiant atskiras jungtis iš „Spark Packages“ ekosistemos.

Kai kurių stulpelių pasirinkimas iš duomenų rėmelio yra toks pat paprastas kaip ši eilutė:

MiestaiDF.select („vardas“, „pop“)

Naudodami SQL sąsają, duomenų kadrą užregistruojame kaip laikiną lentelę, po kurios galime pateikti SQL užklausas:

MiestaiDF.createOrReplaceTempView („miestai“)

spark.sql („PASIRINKITE pavadinimą, pop iš miestų“)

Užkulisiuose „Apache Spark“ naudoja užklausų optimizavimo priemonę „Catalyst“, kuri nagrinėja duomenis ir užklausas, kad būtų sukurtas efektyvus duomenų lokalizacijos ir skaičiavimo užklausų planas, kuris atliktų reikiamus skaičiavimus klasteryje. „Apache Spark 2.x“ eroje duomenų kadrų ir duomenų rinkinių „Spark SQL“ sąsaja (iš esmės tipizuotas duomenų rėmelis, kurį galima patikrinti kompiliavimo metu ir ar jis naudojasi tolimesne atmintimi ir skaičiuoja optimizavimą vykdymo metu) yra rekomenduojamas kūrimo metodas . RDD sąsaja vis dar yra prieinama, tačiau rekomenduojama tik tuo atveju, jei jūsų poreikiai negali būti patenkinti „Spark SQL“ paradigmoje.

„Spark 2.4“ pristatė įmontuotų aukštesnio lygio funkcijų rinkinį, skirtą tiesiogiai manipuliuoti masyvais ir kitais aukštesnės eilės duomenų tipais.

„Spark MLlib“

„Apache Spark“ taip pat sujungia bibliotekas, skirtas mašininio mokymosi ir grafikų analizės metodams taikyti masto duomenims. „Spark MLlib“ apima mašininio mokymosi vamzdynų kūrimo sistemą, leidžiančią lengvai įgyvendinti funkcijų išskyrimą, pasirinkimą ir transformavimą bet kuriame struktūriniame duomenų rinkinyje. „MLlib“ tiekiamas su paskirstytais klasterizavimo ir klasifikavimo algoritmais, tokiais kaip „k“ reiškia klasterius ir atsitiktinius miškus, kuriuos galima lengvai keisti ir pritaikyti vamzdynams. Duomenų mokslininkai modelius gali apmokyti „Apache Spark“ naudodami „R“ arba „Python“, išsaugoti naudodami „MLlib“ ir tada juos importuoti į „Java“ arba „Scala“ pagrindą.

Atkreipkite dėmesį, kad nors „Spark MLlib“ apima pagrindinį mašininį mokymąsi, įskaitant klasifikavimą, regresiją, grupavimą ir filtravimą, jis neapima giliųjų neuroninių tinklų modeliavimo ir mokymo galimybių (išsamesnės informacijos žr. „Spark MLlib“ apžvalgoje). Tačiau „Deep Learning Pipelines“ yra darbe.

„Spark GraphX“

„Spark GraphX“ komplekte yra paskirstytų algoritmų, skirtų apdoroti grafikų struktūras, pasirinkimas, įskaitant „Google“ puslapio reitingo įgyvendinimą. Šiuose algoritmuose modeliuojant duomenis naudojamas „Spark Core“ RDD metodas; „GraphFrames“ paketas leidžia atlikti grafiko operacijas su duomenų rėmeliais, įskaitant naudojimąsi „Catalyst“ optimizavimo priemone grafikų užklausoms.

„Spark Streaming“

„Spark Streaming“ buvo ankstyvas „Apache Spark“ priedas, kuris padėjo jai pritraukti aplinką, kuriai reikalingas apdorojimas realiuoju laiku arba beveik realiuoju laiku. Anksčiau paketų ir srautų apdorojimas „Apache Hadoop“ pasaulyje buvo atskiri dalykai. Parašysite „MapReduce“ kodą savo paketinio apdorojimo poreikiams ir naudosite kažką panašaus į „Apache Storm“ savo realaus laiko srautinio perdavimo reikalavimams. Tai akivaizdžiai lemia skirtingas kodų bazes, kurias reikia sinchronizuoti programų srityje, nepaisant to, kad jos pagrįstos visiškai skirtingomis sistemomis, reikalaujantys skirtingų išteklių ir kuriant įvairias operacines problemas.

„Spark Streaming“ išplėtė „Apache Spark“ paketinio apdorojimo koncepciją į srautą, suskirstydamas srautą į nenutrūkstamą mikropartelių seriją, kurią vėliau buvo galima valdyti naudojant „Apache Spark“ API. Tokiu būdu paketinėse ir srautinėse operacijose naudojamas kodas gali (dažniausiai) naudotis tuo pačiu kodu, veikiančiu vienoje sistemoje, taip sumažinant tiek kūrėjo, tiek operatoriaus pridėtines išlaidas. Laimi visi.

Kritika dėl „Spark Streaming“ požiūrio yra ta, kad mikrokomandos tais atvejais, kai reikalingas mažo delsos atsakas į gaunamus duomenis, gali nepavykti suderinti kitų srautiniu būdu palaikomų sistemų, tokių kaip „Apache Storm“, „Apache Flink“ ir „Apache Apex“, našumo, visi jie naudoja gryną srautinio perdavimo metodą, o ne mikrogrupes.

Struktūrinis srautas

Struktūrizuotas srautas (įtrauktas į „Spark 2.x“) yra „Spark Streaming“, kas „Spark SQL“ buvo „Spark Core“ API: Aukštesnio lygio API ir lengvesnė abstrakcija programų rašymui. „Structure Streaming“ atveju aukštesnio lygio API iš esmės leidžia kūrėjams kurti begalinius srautinius duomenų kadrus ir duomenų rinkinius. Tai taip pat išsprendžia keletą labai realių problemų, su kuriomis vartotojai susidūrė ankstesnėje sistemoje, ypač kalbant apie įvykių ir laiko sujungimą ir pavėluotą pranešimų pristatymą. Visos struktūrizuotų srautų užklausos eina per „Catalyst“ užklausų optimizavimo priemonę ir netgi gali būti vykdomos interaktyviu būdu, leidžiant vartotojams atlikti SQL užklausas pagal tiesioginio srauto duomenis.

Struktūrinis srautas iš pradžių rėmėsi „Spark Streaming“ srautinių duomenų tvarkymo mikropakavimo schema. Tačiau programoje „Spark 2.3“ „Apache Spark“ komanda prie struktūrinio srauto pridėjo mažo delsos nepertraukiamo apdorojimo režimą, leidžiantį valdyti atsakymus, kurių vėlavimo trukmė buvo vos 1 ms, o tai yra labai įspūdinga. Nuo „Spark 2.4“ nuolatinis apdorojimas vis dar laikomas eksperimentiniu. Nors struktūrinis srautas yra sukurtas ant „Spark“ SQL variklio, „Continuous Streaming“ palaiko tik ribotą užklausų rinkinį.

Struktūrizuotas srautas yra programų srautinio perdavimo per platformą ateitis, todėl, jei kuriate naują srautinio perdavimo programą, turėtumėte naudoti struktūrinį srautą. Senos „Spark Streaming“ API ir toliau bus palaikomos, tačiau projektas rekomenduoja perkelti į „Struktūrinį srautą“, nes naujasis metodas leidžia labiau pakelti srautinio kodo rašymą ir palaikymą.

Gilaus mokymosi vamzdynai

„Apache Spark“ palaiko gilų mokymąsi per „Deep Learning Pipelines“. Naudodami esamą „MLlib“ vamzdynų struktūrą, galite iškviesti į žemesnio lygio giluminio mokymosi bibliotekas ir susikurti klasifikatorius tik keliose kodo eilutėse, taip pat pritaikyti pasirinktinius „TensorFlow“ grafikus ar „Keras“ modelius gaunamiems duomenims. Šie grafikai ir modeliai gali būti net užregistruoti kaip pasirinktiniai „Spark SQL UDF“ (vartotojo nustatytos funkcijos), kad giluminio mokymosi modelius būtų galima pritaikyti duomenims kaip SQL sakinių dalį.

„Apache Spark“ pamokos

Pasiruošę pasinerti ir išmokti „Apache Spark“? Mes labai rekomenduojame Evano Heitmano „Neandertaliečio„ Apache Spark “vadovą„ Python “, kuriame ne tik gana paprastai išdėstomi„ Apache Spark “veikimo pagrindai, bet ir nurodoma, kaip rašyti paprastą„ Python “programą, kurioje naudojama sistema. . Straipsnis parašytas iš duomenų mokslininko perspektyvos, o tai prasminga, nes duomenų mokslas yra pasaulis, kuriame didieji duomenys ir mašininis mokymasis tampa vis kritiškesni.

Jei ieškote „Apache Spark“ pavyzdžių, kad suprastumėte, ką platforma gali ir kaip tai daro, peržiūrėkite „Spark By“ {Pavyzdžiai}. Čia yra daug pavyzdžio kodo, skirto daugeliui pagrindinių užduočių, sudarančių „Spark“ programavimo elementus, todėl galite pamatyti komponentus, sudarančius didesnes „Apache Spark“ užduotis.

Reikia gilintis? „DZone“ kukliai vadina „Pilną„ Apache Spark “kolekciją“, kurią sudaro daugybė naudingų mokymo programų daugeliu „Apache Spark“ temų. Laimingo mokymosi!

$config[zx-auto] not found$config[zx-overlay] not found