Programiranje

Kaj je Apache Spark? Platforma za velike podatke, ki je zdrobila Hadoop

Apache Spark definiran

Apache Spark je okvir za obdelavo podatkov, ki lahko hitro izvaja naloge obdelave na zelo velikih naborih podatkov in lahko tudi razdeli naloge obdelave podatkov v več računalnikov, bodisi samostojno bodisi skupaj z drugimi razdeljenimi računalniškimi orodji. Ti dve lastnosti sta ključni za svet velikih podatkov in strojnega učenja, ki zahtevata razvrščanje velike računalniške moči, da se prebije skozi velike shrambe podatkov. Spark prav tako s programskega API-ja, ki je enostaven za uporabo, odvzame večji del grgravega dela porazdeljenega računalništva in obdelave velikih podatkov, s programskih bremen odstrani nekatere programske obremenitve teh nalog.

Od skromnih začetkov v AMPLab v Združenem kraljestvu Berkeley je leta 2009 Apache Spark postal eden ključnih svetovnih okvirov za obdelavo podatkov, razdeljenih na velike podatke. Spark je mogoče razviti na različne načine, ponuja izvorne povezave za programske jezike Java, Scala, Python in R ter podpira SQL, pretakanje podatkov, strojno učenje in obdelavo grafov. Uporabljali ga bodo banke, telekomunikacijska podjetja, igralniške družbe, vlade in vsi največji tehnološki velikani, kot so Apple, Facebook, IBM in Microsoft.

Arhitektura Apache Spark

V bistvu je aplikacija Apache Spark sestavljena iz dveh glavnih komponent: a voznik, ki pretvori uporabniško kodo v več nalog, ki jih je mogoče razporediti po delovnih vozliščih, in izvršitelji, ki se izvajajo na teh vozliščih in izvajajo naloge, ki so jim dodeljene. Za posredovanje med njima je potrebna neka oblika upravitelja grozdov.

Spark lahko zažene v samostojnem načinu gruče, ki preprosto zahteva ogrodje Apache Spark in JVM na vsakem računalniku v gruči. Vendar je verjetneje, da boste želeli izkoristiti močnejši sistem za upravljanje virov ali grozdov, ki bo poskrbel za razporejanje delavcev na zahtevo. V podjetju to običajno pomeni zagon na Hadoop YARN (tako distribucije Cloudera in Hortonworks izvajajo opravila Spark), Apache Spark pa lahko deluje tudi na Apache Mesos, Kubernetes in Docker Swarm.

Če iščete upravljano rešitev, lahko Apache Spark najdete kot del Amazon EMR, Google Cloud Dataproc in Microsoft Azure HDInsight. Podjetje Databricks, ki zaposluje ustanovitelje Apache Spark, ponuja tudi platformo Databricks Unified Analytics Platform, ki je celovita upravljana storitev, ki ponuja grozde Apache Spark, podporo za pretakanje, integriran spletni prenosni razvoj in optimizirano delovanje I / O v oblaku. standardna distribucija Apache Spark.

Apache Spark uporabniške ukaze za obdelavo podatkov gradi v a Usmerjeni aciklični grafali DAG. DAG je plast razporejanja Apache Spark; določa, katere naloge se izvajajo na katerih vozliščih in v kakšnem zaporedju.

Spark vs. Hadoop: Zakaj uporabljati Apache Spark?

Omeniti velja, da je Apache Spark proti Apache Hadoop malce napačno poimenovan. Spark boste danes našli v večini distribucij Hadoopa. Toda zaradi dveh velikih prednosti je Spark postal okvir izbire pri obdelavi velikih podatkov, ki je prehitel staro paradigmo MapReduce, ki je Hadoop uveljavila.

Prva prednost je hitrost. Sparkin podatkovni motor v pomnilniku pomeni, da lahko v določenih situacijah opravi naloge do stokrat hitreje kot MapReduce, zlasti v primerjavi z večstopenjskimi opravili, ki zahtevajo zapis stanja na disk med fazami. MapReduce v bistvu ustvari dvostopenjski izvedbeni graf, ki je sestavljen iz preslikave in zmanjšanja podatkov, medtem ko ima DAG Apache Spark več stopenj, ki jih je mogoče učinkoviteje distribuirati. Tudi opravila Apache Spark, pri katerih podatkov ni mogoče popolnoma vsebovati v pomnilniku, so običajno približno 10-krat hitrejša od primerka MapReduce.

Druga prednost je razvijalcem prijazen API Spark. Ne glede na to, kako pomembna je Sparkova pospešitev, bi lahko trdili, da je prijaznost API-ja Spark še pomembnejša.

Spark Core

V primerjavi z MapReduce in drugimi komponentami Apache Hadoop je API Apache Spark zelo prijazen do razvijalcev in skriva večino zapletenosti porazdeljenega procesorja za klici preprostih metod. Kanonični primer tega je, kako lahko skoraj 50 vrstic kode MapReduce za štetje besed v dokumentu zmanjšamo na le nekaj vrstic Apache Spark (tukaj prikazano v Scali):

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

štetje val = textFile.flatMap (vrstica => line.split (““))

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

.reduceByKey (_ + _)

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

Z zagotavljanjem vezav na priljubljene jezike za analizo podatkov, kot sta Python in R, pa tudi podjetjem prijaznejša Java in Scala, Apache Spark vsem, od razvijalcev aplikacij do znanstvenikov podatkov, omogoča dostopnost do njene razširljivosti in hitrosti.

Spark RDD

V središču Apache Spark je koncept Resilient Distributed Dataset (RDD), programske abstrakcije, ki predstavlja nespremenljivo zbirko predmetov, ki jih je mogoče razdeliti po računski gruči. Operacije na RDD-jih je mogoče tudi razdeliti po gruči in izvajati v vzporednem paketnem postopku, kar vodi do hitre in razširljive vzporedne obdelave.

RDD-je je mogoče ustvariti iz preprostih besedilnih datotek, baz podatkov SQL, trgovin NoSQL (kot sta Cassandra in MongoDB), ved Amazon S3 in še veliko več. Večina API-ja Spark Core je zgrajena na tem konceptu RDD, kar omogoča tradicionalno preslikavo in zmanjšuje funkcionalnost, hkrati pa zagotavlja tudi vgrajeno podporo za združevanje naborov podatkov, filtriranje, vzorčenje in združevanje.

Spark deluje na porazdeljen način, tako da kombinira a voznik jedrni proces, ki aplikacijo Spark razdeli na naloge in jih razdeli med mnoge izvršitelj procesi, ki opravljajo delo. Te izvajalce je mogoče povečati in znižati, kot je potrebno za potrebe aplikacije.

Spark SQL

Spark SQL, prvotno znan kot Shark, je za projekt Apache Spark postajal vse bolj pomemben. Verjetno gre za vmesnik, ki ga najpogosteje uporabljajo današnji razvijalci pri ustvarjanju aplikacij. Spark SQL je osredotočen na obdelavo strukturiranih podatkov z uporabo podatkovnega okvira, izposojenega od R in Python (v Pandah). Kot že ime pove, Spark SQL ponuja tudi vmesnik, skladen s SQL2003, za poizvedovanje po podatkih, ki analitikom in razvijalcem prinaša moč Apache Spark.

Spark SQL poleg standardne podpore za SQL ponuja tudi standardni vmesnik za branje in zapisovanje v druge podatkovne shrambe, vključno z JSON, HDFS, Apache Hive, JDBC, Apache ORC in Apache Parquet, ki so vsi podprti. Druge priljubljene trgovine - Apache Cassandra, MongoDB, Apache HBase in številne druge - lahko uporabimo tako, da v ekološke sisteme Spark Packages potegnemo ločene konektorje.

Izbira nekaterih stolpcev iz podatkovnega okvira je tako preprosta kot ta vrstica:

citiesDF.select (“ime”, “pop”)

Z uporabo vmesnika SQL registriramo podatkovni okvir kot začasno tabelo, po kateri lahko proti njemu izdamo poizvedbe SQL:

citiesDF.createOrReplaceTempView (“mesta”)

spark.sql (“IZBERI ime, pop IZ mest”)

V zakulisju Apache Spark uporablja poizvedbeni optimizator z imenom Catalyst, ki preučuje podatke in poizvedbe, da bi ustvaril učinkovit načrt poizvedb za lokacijo in izračun podatkov, ki bo izvedel zahtevane izračune v celotni gruči. V dobi Apache Spark 2.x je vmesnik Spark SQL podatkovnih okvirjev in naborov podatkov (v bistvu tipiziran podatkovni okvir, ki ga je mogoče med prevajanjem preveriti za pravilnost in izkoristiti nadaljnje optimizacije pomnilnika in računanja v času izvajanja) priporočljiv pristop za razvoj . Vmesnik RDD je še vedno na voljo, vendar je priporočljiv le, če v paradigmi Spark SQL ni mogoče obravnavati vaših potreb.

Spark 2.4 je predstavil nabor vgrajenih funkcij višjega reda za neposredno manipulacijo nizov in drugih podatkovnih vrst višjega reda.

Spark MLlib

Apache Spark vključuje tudi knjižnice za uporabo tehnik strojnega učenja in analize grafov na obsežne podatke. Spark MLlib vključuje okvir za ustvarjanje cevovodov za strojno učenje, ki omogoča enostavno izvedbo ekstrakcije, izbire in transformacije funkcij na katerem koli strukturiranem naboru podatkov. MLlib prihaja z porazdeljenimi izvedbami algoritmov za združevanje in razvrščanje, kot so grozdenje k-pomeni in naključni gozdovi, ki jih je mogoče enostavno zamenjati v in iz drugih cevovodov. Znanstveniki za podatke lahko v Apache Sparku učijo modele z uporabo R ali Pythona, shranijo jih z MLlib in nato uvozijo v cevovod na osnovi Jave ali Scale za proizvodno uporabo.

Upoštevajte, da čeprav Spark MLlib zajema osnovno strojno učenje, vključno s klasifikacijo, regresijo, združevanjem v skupine in filtriranjem, ne vključuje pripomočkov za modeliranje in usposabljanje globokih nevronskih mrež (za podrobnosti glejte pregled Spark MLlib). Deep Learning Pipelines so v pripravi.

Spark GraphX

Spark GraphX ​​ima izbor porazdeljenih algoritmov za obdelavo grafnih struktur, vključno z implementacijo Googlovega PageRank. Ti algoritmi uporabljajo pristop RDD podjetja Spark Core za modeliranje podatkov; paket GraphFrames omogoča izvajanje grafičnih operacij na podatkovnih okvirih, vključno z izkoriščanjem orodja za optimiziranje Catalyst za poizvedbe grafov.

Spark Streaming

Spark Streaming je bil zgodnji dodatek Apache Spark, ki mu je pomagal pridobiti oprijem v okoljih, ki so zahtevala obdelavo v realnem času ali skoraj v realnem času. Prej je bila obdelava paketov in tokov v svetu Apache Hadoop ločena stvar. Za potrebe serijske obdelave bi napisali kodo MapReduce in uporabili nekaj, kot je Apache Storm, za potrebe pretakanja v realnem času. To očitno vodi do različnih baz kod, ki jih je treba sinhronizirati za aplikacijsko domeno, čeprav temeljijo na popolnoma drugačnih okvirih, zahtevajo različne vire in vključujejo različne operativne skrbi za njihovo izvajanje.

Spark Streaming je koncept serijske obdelave Apache Spark razširil v pretakanje, tako da je tok razdelil v neprekinjeno serijo mikro-paketov, s katerimi je bilo mogoče manipulirati z API-jem Apache Spark. Na ta način lahko koda v paketnih in pretočnih operacijah deli (večinoma) isto kodo, ki deluje v istem okviru, s čimer se zmanjšajo tako režijski stroški razvijalca kot operaterja. Vsi zmagajo.

Kritika pristopa Spark Streaming je, da mikrobatch v scenarijih, kjer je potreben odziv z nizko zakasnitvijo na vhodne podatke, morda ne bo mogel ustrezati zmogljivosti drugih okvirov, ki podpirajo pretakanje, kot so Apache Storm, Apache Flink in Apache Apex, vsi uporabljajo metodo čistega pretoka in ne mikroparke.

Strukturirano pretakanje

Strukturirano pretakanje (dodano v Spark 2.x) je za Spark Streaming tisto, kar je bil Spark SQL API-jem Spark Core: API na višji ravni in lažja abstrakcija za pisanje aplikacij. V primeru Strukturnega pretakanja API na višji ravni v bistvu omogoča razvijalcem, da ustvarijo neskončne pretočne podatkovne okvire in nabore podatkov. Prav tako rešuje nekaj zelo resničnih bolečih točk, s katerimi so se uporabniki spopadali v prejšnjem okviru, zlasti v zvezi z združevanjem dogodkov in zamudo pri dostavi sporočil. Vse poizvedbe v strukturiranih tokovih gredo skozi orodje za optimiziranje poizvedb Catalyst in jih je mogoče celo izvajati na interaktiven način, ki uporabnikom omogoča izvajanje poizvedb SQL pred pretakanjem podatkov v živo.

Strukturirano pretakanje se je prvotno opiralo na mikropartirno shemo Spark Streaming za obdelavo pretočnih podatkov. Toda v Sparku 2.3 je ekipa Apache Spark dodala način neprekinjene obdelave z nizko zakasnitvijo v strukturirano pretakanje, kar mu omogoča, da obvladuje odzive z zakasnitvami do 1 ms, kar je zelo impresivno. Od Spark 2.4 se neprekinjena obdelava še vedno šteje za eksperimentalno. Medtem ko je strukturirano pretakanje zgrajeno na vrhu mehanizma Spark SQL, pa neprekinjeno pretakanje podpira le omejen nabor poizvedb.

Strukturirano pretakanje je prihodnost pretočnih aplikacij s platformo, zato, če gradite novo pretočno aplikacijo, uporabite strukturirano pretakanje. Podprti API-ji za pretočno predvajanje Spark bodo še naprej podprti, vendar projekt priporoča prenos na strukturirano pretakanje, saj je zaradi nove metode pisanje in vzdrževanje pretočne kode veliko bolj znosno.

Cevovodi za globoko učenje

Apache Spark podpira poglobljeno učenje prek cevovodov za globoko učenje. Z obstoječo strukturo cevovoda MLlib lahko prikličete knjižnice globljega učenja na nižji ravni in v samo nekaj vrsticah kode zgradite klasifikatorje ter na dohodne podatke uporabite grafe TensorFlow ali modele Keras po meri. Te grafe in modele je mogoče celo registrirati kot uporabniške funkcije Spark SQL UDF (uporabniško določene funkcije), tako da je mogoče modele globokega učenja uporabiti za podatke kot del stavkov SQL.

Vadnice za Apache Spark

Ste pripravljeni na potapljanje in učenje Apache Spark? Toplo priporočamo Neandertalčev vodnik Apache Spark v Pythonu Evana Heitmana, ki ne samo, da sorazmerno preprosto izrazi osnove delovanja Apache Spark, temveč vas tudi vodi skozi postopek pisanja preproste aplikacije Python, ki uporablja ogrodje. . Članek je napisan z vidika podatkovnega znanstvenika, kar je smiselno, saj je znanost o podatkih svet, v katerem so veliki podatki in strojno učenje vse bolj kritični.

Če iščete nekaj primerov Apache Spark, da boste lažje razumeli, kaj lahko platforma počne in kako to počne, si oglejte Spark By {Primeri}. Tu je na voljo veliko vzorčne kode za številne osnovne naloge, ki tvorijo gradnike programov Spark, tako da si lahko ogledate komponente, ki sestavljajo večje naloge, za katere je namenjena Apache Spark.

Morate iti globlje? DZone ima tako imenovano The Complete Apache Spark Collection, ki jo sestavlja množica koristnih vadnic o številnih temah Apache Spark. Srečno učenje!

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