Što je Apache Spark? Platforma za velike podatke koja je slomila Hadoop

Apache Spark definiran

Apache Spark je okvir za obradu podataka koji može brzo izvršavati zadatke obrade na vrlo velikim skupovima podataka, a također može distribuirati zadatke obrade podataka na više računala, samostalno ili u tandemu s drugim distribuiranim računalnim alatima. Te su dvije osobine ključne za svijet velikih podataka i strojnog učenja, koji zahtijevaju razvrstavanje ogromne računalne snage da bi prokrčili velike pohrane podataka. Spark također skida neka programska opterećenja ovih zadataka s ramena programera s API-jem jednostavnim za upotrebu koji apstrahira velik dio grubog rada distribuiranog računanja i obrade velikih podataka.

Od svojih skromnih početaka u AMPLabu na UC Berkeley 2009. godine, Apache Spark postao je jedan od ključnih svjetskih okvira za distribuciju velikih podataka. Spark se može implementirati na razne načine, pruža nativne veze za programske jezike Java, Scala, Python i R i podržava SQL, strujanje podataka, strojno učenje i obradu grafova. Naći će ga da ga koriste banke, telekomunikacijske tvrtke, kompanije za igre, vlade i svi glavni tehnološki divovi poput Applea, Facebooka, IBM-a i Microsofta.

Apache Spark arhitektura

Na osnovnoj se razini aplikacija Apache Spark sastoji od dvije glavne komponente: upravljačkog programa koji pretvara korisnički kod u više zadataka koji se mogu rasporediti po radničkim čvorovima i izvršitelja koji se izvode na tim čvorovima i izvršavaju dodijeljene im zadatke. Za posredovanje između njih potreban je neki oblik upravitelja klastera.

Spark se može pokrenuti u samostalnom načinu klastera koji jednostavno zahtijeva Apache Spark okvir i JVM na svakom stroju u vašem klasteru. Međutim, vjerojatnije je da ćete htjeti iskoristiti robusniji sustav upravljanja resursima ili klasterima kako biste se pobrinuli za dodjelu radnika na zahtjev za vas. U poduzeću to obično znači pokretanje na Hadoop YARN (tako distribucije Cloudera i Hortonworks pokreću poslove Spark), ali Apache Spark također može raditi na Apache Mesos, Kubernetes i Docker Swarm.

Ako tražite upravljano rješenje, Apache Spark možete pronaći kao dio Amazon EMR, Google Cloud Dataproc i Microsoft Azure HDInsight. Databricks, tvrtka koja zapošljava osnivače Apache Spark, također nudi Databricks Unified Analytics Platform, koja je sveobuhvatna upravljana usluga koja nudi klastere Apache Spark, podršku za streaming, integrirani razvoj prijenosnika na mreži i optimizirane I / O performanse u oblaku preko standardna distribucija Apache Spark.

Apache Spark gradi naredbe za obradu podataka korisnika u usmjereni aciklički graf ili DAG. DAG je sloj raspoređivanja Apache Sparka; određuje koji se zadaci izvršavaju na kojim čvorovima i u kojem slijedu.  

Spark vs. Hadoop: Zašto koristiti Apache Spark?

Vrijedno je istaknuti da je Apache Spark protiv Apache Hadoop pomalo pogrešan naziv. Spark ćete naći danas u većini distribucija Hadoopa. No, zbog dvije velike prednosti, Spark je postao okvir izbora prilikom obrade velikih podataka, pretekavši staru paradigmu MapReduce koja je Hadoop istaknula.

Prva prednost je brzina. Sparkov mehanizam podataka u memoriji znači da može izvršavati zadatke i sto puta brže od MapReducea u određenim situacijama, posebno u usporedbi s višestepenim poslovima koji zahtijevaju vraćanje stanja na disk između faza. U osnovi, MapReduce stvara dvofazni grafikon izvršenja koji se sastoji od mapiranja i smanjenja podataka, dok DAG Apache Sparka ima više stupnjeva koji se mogu učinkovitije distribuirati. Čak i poslovi tvrtke Apache Spark kod kojih se podaci ne mogu u potpunosti sadržavati u memoriji obično su oko 10 puta brži od njihovih kolega MapReduce.

Druga prednost je Spark API prilagođen programerima. Koliko god je ubrzanje Sparka važno, moglo bi se tvrditi da je prijateljstvo Spark API-a još važnije.

Iskra jezgra

U usporedbi s MapReduceom i ostalim komponentama Apache Hadoop-a, API Apache Spark vrlo je prijateljski prema programerima, skrivajući velik dio složenosti distribuiranog mehanizma za obradu iza poziva jednostavnih metoda. Kanonski primjer toga je kako se gotovo 50 redaka MapReduce koda za brojanje riječi u dokumentu može svesti na samo nekoliko redaka Apache Spark (ovdje prikazano u Scali):

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

broji val = textFile.flatMap (linija => line.split (““))

                      .map (riječ => (riječ, 1))

                      .reduceByKey (_ + _)

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

Pružajući veze za popularne jezike za analizu podataka kao što su Python i R, kao i Java i Scala prilagođeni poduzećima, Apache Spark omogućuje svima, od programera aplikacija do znanstvenika podataka, da iskoriste njegovu skalabilnost i brzinu na pristupačan način.

Spark RDD

U središtu Apache Sparka koncept je Resilient Distributed Dataset (RDD), programska apstrakcija koja predstavlja nepromjenjivu zbirku objekata koji se mogu podijeliti u računski klaster. Operacije na RDD-ima također se mogu podijeliti po klasteru i izvršiti u paralelnom batch procesu, što dovodi do brze i skalabilne paralelne obrade.

RDD-ovi se mogu kreirati iz jednostavnih tekstualnih datoteka, SQL baza podataka, NoSQL trgovina (poput Cassandre i MongoDB), segmenata Amazon S3 i još mnogo toga. Većina API-ja Spark Core izgrađena je na ovom RDD konceptu, omogućavajući tradicionalno mapiranje i smanjujući funkcionalnost, ali također pružajući ugrađenu podršku za spajanje skupova podataka, filtriranje, uzorkovanje i agregiranje.

Spark se pokreće distribuirano kombinirajući glavni proces upravljačkog programa koji Spark aplikaciju dijeli na zadatke i distribuira ih među mnogim izvršnim procesima koji obavljaju posao. Ti se izvršitelji mogu povećavati i smanjivati ​​prema potrebama aplikacije.

Spark SQL

Izvorno poznat kao Shark, Spark SQL postajao je sve važniji za projekt Apache Spark. Vjerojatno je to sučelje koje današnji programeri najčešće koriste prilikom stvaranja aplikacija. Spark SQL usredotočen je na obradu strukturiranih podataka, koristeći pristup podatkovnom okviru posuđen od R i Python (u Pandasu). No, kao što i samo ime govori, Spark SQL također nudi sučelje usklađeno s SQL2003 za upite podataka, donoseći snagu Apache Sparka analitičarima, ali i programerima.

Uz standardnu ​​podršku za SQL, Spark SQL nudi i standardno sučelje za čitanje i upisivanje u druge podatkovne baze, uključujući JSON, HDFS, Apache Hive, JDBC, Apache ORC i Apache Parquet, a sve je to podržano izvan okvira. Ostale popularne trgovine - Apache Cassandra, MongoDB, Apache HBase i mnoge druge - mogu se koristiti povlačenjem zasebnih konektora iz ekosustava Spark Packages.

Odabir nekih stupaca iz podatkovnog okvira jednostavno je poput ovog retka:

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

Korištenjem SQL sučelja registriramo podatkovni okvir kao privremenu tablicu, nakon čega možemo izdati SQL upite prema njemu:

gradoviDF.createOrReplaceTempView (“gradovi”)

spark.sql („ODABERI ime, pop IZ gradova“)

Iza kulisa, Apache Spark koristi optimizator upita nazvan Catalyst koji ispituje podatke i upite kako bi izradio učinkovit plan upita za lokalitet podataka i proračun koji će izvršiti potrebne izračune na klasteru. U Apache Spark 2.x eri, Spark SQL sučelje podatkovnih okvira i skupova podataka (u biti tipizirani podatkovni okvir koji se može provjeriti u vrijeme kompajliranja za ispravnost i iskoristiti daljnju optimizaciju memorije i računanja u vrijeme izvođenja) preporučuje se za razvoj . RDD sučelje je i dalje dostupno, ali preporučuje se samo ako se vaše potrebe ne mogu riješiti u okviru Spark SQL paradigme.

Spark 2.4 predstavio je skup ugrađenih funkcija višeg reda za izravno manipuliranje nizovima i ostalim vrstama podataka višeg reda.

Iskra MLlib

Apache Spark također uključuje knjižnice za primjenu tehnika strojnog učenja i analize grafova na podatke u opsegu. Spark MLlib uključuje okvir za stvaranje cjevovoda za strojno učenje, omogućavajući jednostavnu implementaciju izdvajanja, odabira i transformacije značajki na bilo kojem strukturiranom skupu podataka. MLlib dolazi s distribuiranim implementacijama algoritama za grupiranje i klasifikaciju, kao što su k-znači klasteriranje i slučajne šume, koje se s lakoćom mogu zamijeniti u i iz prilagođenih cjevovoda. Znanstvenici podataka mogu obučiti modele u Apache Sparku koristeći R ili Python, spremiti ih pomoću MLlib, a zatim uvesti u cjevovod zasnovan na Javi ili Scali za proizvodnu upotrebu.

Imajte na umu da iako Spark MLlib pokriva osnovno strojno učenje, uključujući klasifikaciju, regresiju, klasterizaciju i filtriranje, ne uključuje mogućnosti za modeliranje i obuku dubokih neuronskih mreža (za detalje pogledajte pregled Spark MLlib). Međutim, u pripremi su cjevovodi za dubinsko učenje.

Iskra GraphX

Spark GraphX ​​dolazi s izborom distribuiranih algoritama za obradu struktura grafova, uključujući implementaciju Googleova PageRank-a. Ovi algoritmi koriste RDD pristup Spark Corea za modeliranje podataka; paket GraphFrames omogućuje vam obavljanje operacija grafikona na podatkovnim kadrovima, uključujući iskorištavanje prednosti Catalyst optimizatora za upite grafikona.

Iskreno strujanje

Spark Streaming je rani dodatak Apache Spark-u koji mu je pomogao da stekne snagu u okruženjima koja zahtijevaju obradu u stvarnom vremenu ili gotovo u stvarnom vremenu. Ranije su batch i stream obrada u svijetu Apache Hadoop-a bile zasebne stvari. Napisali biste MapReduce kôd za svoje potrebe serijske obrade, a za potrebe strujanja u stvarnom vremenu koristili biste nešto poput Apache Storma. To očito dovodi do različitih baza koda koje moraju biti sinkronizirane za domenu aplikacije, iako se temelje na potpuno različitim okvirima, zahtijevaju različite resurse i uključuju različite operativne probleme za njihovo pokretanje.

Spark Streaming proširio je Apache Spark koncept batch obrade u streaming razlažući stream u kontinuirani niz mikrobacha, kojima se potom moglo manipulirati pomoću Apache Spark API-ja. Na taj način, kôd u batch i streaming operacijama može dijeliti (uglavnom) isti kôd koji radi na istom okviru, čime se smanjuju režijski troškovi i programera i operatora. Svi pobjeđuju.

Kritika pristupa Spark Streaming-a je da mikrobatchiranje, u scenarijima gdje je potreban odgovor s malim kašnjenjem na dolazne podatke, možda neće moći podudarati se s performansama drugih okvira koji podržavaju streaming, poput Apache Storm, Apache Flink i Apache Apex, svi oni koriste čistu metodu strujanja, a ne mikroparke.

Strukturirano strujanje

Strukturirano strujanje (dodano u Spark 2.x) je Spark Streaming ono što je Spark SQL bio Spark Core API-ima: API više razine i lakša apstrakcija za pisanje aplikacija. U slučaju strukturalnog strujanja, API više razine u osnovi omogućuje programerima stvaranje beskonačnih okvira podataka i skupova podataka. Također rješava neke vrlo stvarne probleme s kojima su se korisnici borili u ranijim okvirima, posebno u vezi s bavljenjem agregacijama u vrijeme događaja i kasnom dostavom poruka. Svi upiti o strukturiranim streamovima prolaze kroz Catalyst optimizator upita, a mogu se čak pokretati i na interaktivan način, omogućavajući korisnicima izvršavanje SQL upita protiv streaming podataka uživo.

Strukturirano strujanje izvorno se oslanjalo na mikrosretnu shemu Spark Streaminga za rukovanje streaming podacima. No, u Sparku 2.3, tim Apache Sparka dodao je način kontinuirane obrade s malim kašnjenjem u strukturirano strujanje, omogućujući mu da obrađuje odgovore s latencijama od samo 1 ms, što je vrlo impresivno. Od Sparka 2.4, kontinuirana obrada i dalje se smatra eksperimentalnom. Iako je strukturirano strujanje izgrađeno na vrhu Spark SQL mehanizma, kontinuirano strujanje podržava samo ograničeni skup upita.

Strukturirano strujanje budućnost je streaming aplikacija s platformom, pa ako gradite novu aplikaciju za streaming, trebali biste koristiti strukturirani streaming. Naslijeđeni API-ji Spark Streaming i dalje će biti podržani, ali projekt preporučuje prijenos na strukturirani streaming, jer nova metoda čini pisanje i održavanje streaming koda puno podnošljivijim.

Cjevovodi za duboko učenje

Apache Spark podržava duboko učenje putem cjevovoda za duboko učenje. Koristeći postojeću strukturu cjevovoda MLlib, možete nazvati biblioteke dubokog učenja niže razine i izraditi klasifikatore u samo nekoliko redaka koda, kao i primijeniti prilagođene TensorFlow grafikone ili Keras modele na dolazne podatke. Ovi grafikoni i modeli mogu se čak registrirati kao prilagođeni Spark SQL UDF-ovi (korisnički definirane funkcije), tako da se modeli dubinskog učenja mogu primijeniti na podatke kao dio SQL izraza.

Vodiči za Apache Spark

Jeste li spremni zaroniti i naučiti Apache Spark? Preporučujemo Vodič za neandertalca Evana Heitmana za Apache Spark na Pythonu, koji ne samo da iznosi relativno jednostavne izraze kako Apache Spark djeluje, već vas vodi kroz postupak pisanja jednostavne Python aplikacije koja koristi okvir . Članak je napisan iz perspektive znanstvenika podataka, što ima smisla jer je znanost podataka svijet u kojem su veliki podaci i strojno učenje sve kritičniji.

Ako tražite neke primjere Apache Spark koji će vam dati osjećaj što platforma može i kako to čini, pogledajte Spark By {Primjeri}. Ovdje postoji obilje uzoraka koda za niz osnovnih zadataka koji čine gradivne dijelove programiranja Spark, tako da možete vidjeti komponente koje čine veće zadatke za koje je Apache Spark stvoren.

Trebate ići dublje? DZone ima ono što skromno naziva Kompletna kolekcija Apache Spark, koja se sastoji od mnoštva korisnih vodiča o mnogim temama Apache Spark. Sretno učenje!