Programmēšana

Kas ir Apache Spark? Lielā datu platforma, kas sagrauj Hadoopu

Apache Spark definēts

Apache Spark ir datu apstrādes sistēma, kas var ātri veikt apstrādes uzdevumus ļoti lielās datu kopās, kā arī var izplatīt datu apstrādes uzdevumus vairākos datoros vai nu atsevišķi, vai tandēmā ar citiem izplatītiem skaitļošanas rīkiem. Šīs divas īpašības ir atslēgas lielo datu un mašīnmācīšanās pasaulei, kas prasa milzīgu skaitļošanas jaudu, lai izietu cauri lieliem datu krājumiem. Spark arī noņem daļu no šo uzdevumu programmēšanas sloga no izstrādātāju pleciem, izmantojot viegli lietojamu API, kas atņem lielu daļu no izplatītās skaitļošanas un lielo datu apstrādes lielo darbu.

Kopš tā pazemīgajiem pirmsākumiem AMPLab U.C. Berkeley 2009. gadā Apache Spark ir kļuvis par vienu no galvenajiem lielo datu izplatīšanas apstrādes ietvariem pasaulē. Spark var izvietot dažādos veidos, nodrošina vietējās saites Java, Scala, Python un R programmēšanas valodām un atbalsta SQL, straumēšanas datus, mašīnmācīšanos un diagrammu apstrādi. To atradīs bankas, telekomunikāciju uzņēmumi, spēļu uzņēmumi, valdības un visi lielākie tehnoloģiju giganti, piemēram, Apple, Facebook, IBM un Microsoft.

Apache Spark arhitektūra

Fundamentālā līmenī Apache Spark lietojumprogramma sastāv no divām galvenajām sastāvdaļām: a šoferis, kas lietotāja kodu pārvērš vairākos uzdevumos, kurus var sadalīt pa darba ņēmēju mezgliem, un izpildītāji, kas darbojas šajos mezglos un izpilda tiem uzticētos uzdevumus. Ir nepieciešama kāda veida kopu pārvaldnieka forma, lai starpotos starp abiem.

No kastes Spark var darboties atsevišķā klastera režīmā, kas vienkārši prasa Apache Spark ietvaru un JVM katrai klastera mašīnai. Tomēr, visticamāk, jūs vēlēsities izmantot stabilākas resursu vai kopu pārvaldības sistēmas priekšrocības, lai rūpētos par darbinieku piešķiršanu pēc pieprasījuma. Uzņēmumā tas parasti nozīmē darboties ar Hadoop YARN (šādā veidā Cloudera un Hortonworks izplatījumos tiek palaisti Spark darbi), bet Apache Spark var darboties arī Apache Mesos, Kubernetes un Docker Swarm.

Ja meklējat pārvaldītu risinājumu, Apache Spark var atrast kā daļu no Amazon EMR, Google Cloud Dataproc un Microsoft Azure HDInsight. Uzņēmums Databricks, kas nodarbina Apache Spark dibinātājus, piedāvā arī Databricks Unified Analytics platformu, kas ir visaptverošs pārvaldīts pakalpojums, kas piedāvā Apache Spark kopas, straumēšanas atbalstu, integrētu tīmekļa piezīmju grāmatiņu izstrādi un optimizētu mākoņa I / O veiktspēju. standarta Apache Spark izplatīšana.

Apache Spark izveido lietotāja datu apstrādes komandas a Virzīts aciklisks grafiksvai DAG. DAG ir Apache Spark plānošanas slānis; tas nosaka, kādi uzdevumi kādos mezglos un kādā secībā tiek izpildīti.

Spark vs Hadoop: Kāpēc izmantot Apache Spark?

Ir vērts norādīt, ka Apache Spark pret Apache Hadoop ir mazliet nepareizs nosaukums. Mūsdienās Spark būs iekļauta lielākajā daļā Hadoop izplatījumu. Bet divu lielo priekšrocību dēļ Spark ir kļuvis par izvēles ietvaru, apstrādājot lielos datus, apsteidzot veco MapReduce paradigmu, kas Hadoopu izcēla.

Pirmā priekšrocība ir ātrums. Spark atmiņā esošais datu dzinējs nozīmē, ka noteiktās situācijās tas var veikt uzdevumus līdz simtreiz ātrāk nekā MapReduce, it īpaši salīdzinājumā ar daudzpakāpju darbiem, kuriem starp posmiem ir nepieciešams rakstīt stāvokli atpakaļ diskā. Būtībā MapReduce izveido divpakāpju izpildes grafiku, kas sastāv no datu kartēšanas un samazināšanas, savukārt Apache Spark DAG ir vairāki posmi, kurus var efektīvāk izplatīt. Pat Apache Spark darbi, kuros datus nevar pilnībā ievietot atmiņā, parasti ir aptuveni 10 reizes ātrāki nekā viņu MapReduce kolēģi.

Otra priekšrocība ir izstrādātājiem draudzīga Spark API. Lai cik svarīgs būtu Spark ātrums, varētu apgalvot, ka Spark API draudzīgums ir vēl svarīgāks.

Dzirksteles kodols

Salīdzinot ar MapReduce un citiem Apache Hadoop komponentiem, Apache Spark API ir ļoti draudzīgs izstrādātājiem, slēpjot lielu daļu izplatītā apstrādes motora sarežģītības aiz vienkāršu metodi izsaukumiem. Kanoniskais piemērs ir tas, kā gandrīz 50 MapReduce koda rindiņu, lai skaitītu vārdus dokumentā, var samazināt līdz tikai dažām Apache Spark rindām (šeit parādīts Scala):

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

val skaits = textFile.flatMap (līnija => line.split (““))

.karte (vārds => (vārds, 1))

.reduceByKey (_ + _)

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

Nodrošinot piesaistes populārām datu analīzes valodām, piemēram, Python un R, kā arī uzņēmumam draudzīgākas Java un Scala, Apache Spark ļauj visiem, sākot no lietojumprogrammu izstrādātājiem līdz datu zinātniekiem, pieejamā veidā izmantot tā mērogojamību un ātrumu.

Spark RDD

Apache Spark centrā ir elastīgās izplatītās datu kopas (RDD) koncepcija, programmēšanas abstrakcija, kas atspoguļo nemaināmu objektu kolekciju, ko var sadalīt pa skaitļošanas kopu. Darbības ar RDD var arī sadalīt pa kopu un veikt paralēli pakešu procesā, kas nodrošina ātru un mērogojamu paralēlu apstrādi.

RDD var izveidot no vienkāršiem teksta failiem, SQL datu bāzēm, NoSQL veikaliem (piemēram, Cassandra un MongoDB), Amazon S3 spaiņiem un daudz ko citu. Liela daļa Spark Core API ir veidota uz šīs RDD koncepcijas, nodrošinot tradicionālo karti un samazinot funkcionalitāti, bet nodrošinot arī iebūvētu atbalstu datu kopu savienošanai, filtrēšanai, paraugu ņemšanai un apkopošanai.

Spark darbojas sadalītā veidā, apvienojot a šoferis pamatprocess, kas sadala Spark lietojumprogrammu uzdevumos un sadala tos starp daudziem izpildītājs procesi, kas veic darbu. Šos izpildītājus var palielināt un samazināt, ja nepieciešams lietojumprogrammas vajadzībām.

Spark SQL

Sākotnēji pazīstams kā Shark, Spark SQL ir kļuvis arvien nozīmīgāks Apache Spark projektam. Visticamāk, ka interfeiss visbiežāk tiek izmantots mūsdienu izstrādātājiem, veidojot lietojumprogrammas. Spark SQL ir vērsts uz strukturētu datu apstrādi, izmantojot datu ietvara pieeju, kas aizgūta no R un Python (pandās). Bet, kā norāda nosaukums, Spark SQL nodrošina arī SQL2003 saderīgu saskarni datu vaicāšanai, nodrošinot Apache Spark spēku gan analītiķiem, gan izstrādātājiem.

Paralēli standarta SQL atbalstam Spark SQL nodrošina standarta saskarni lasīšanai un rakstīšanai citos datu krātuvēs, tostarp JSON, HDFS, Apache Hive, JDBC, Apache ORC un Apache Parkets, kas visi tiek atbalstīti ārpus kastes. Citus populārus veikalus - Apache Cassandra, MongoDB, Apache HBase un daudzus citus - var izmantot, ievelkot atsevišķus savienotājus no Spark Packages ekosistēmas.

Dažu kolonnu izvēle no datu ietvara ir tikpat vienkārša kā šī rinda:

mapsDF.select (“nosaukums”, “pops”)

Izmantojot SQL saskarni, mēs reģistrējam datu ietvaru kā pagaidu tabulu, pēc kuras mēs varam izsniegt SQL vaicājumus pret to:

pilsētasDF.createOrReplaceTempView (“pilsētas”)

spark.sql (“Atlasīt vārdu, pop no pilsētām”)

Aizkulisēs Apache Spark izmanto vaicājumu optimizētāju Catalyst, kas pārbauda datus un vaicājumus, lai izveidotu efektīvu vaicājumu plānu datu lokalizācijai un skaitļošanai, kas veiks nepieciešamos aprēķinus visā klasterī. Apache Spark 2.x laikmetā datu ietvaru un datu kopu Spark SQL saskarne (būtībā tipēta datu ietvars, kuru apkopošanas laikā var pārbaudīt, vai tā ir pareiza, un izmantot papildu atmiņu un aprēķināt optimizāciju izpildes laikā) ir ieteicamā pieeja izstrādei . RDD saskarne joprojām ir pieejama, taču ieteicama tikai tad, ja Spark SQL paradigmā nevar apmierināt jūsu vajadzības.

Spark 2.4 ieviesa iebūvētu augstākas pakāpes funkciju kopumu, lai tieši manipulētu ar masīviem un citiem augstākas kārtas datu veidiem.

Spark MLlib

Apache Spark arī apvieno bibliotēkas mašīnmācīšanās un diagrammu analīzes metožu pielietošanai mēroga datiem. Spark MLlib ietver sistēmu mašīnmācīšanās cauruļvadu izveidei, kas ļauj ērti ieviest iezīmju iegūšanu, atlasi un pārveidojumus jebkurā strukturētā datu kopā. MLlib nāk ar izplatītu klasterizācijas un klasifikācijas algoritmu ieviešanu, piemēram, k-nozīmē klasteru izveidi un nejaušus mežus, kurus var viegli apmainīt un pielāgot cauruļvados. Datus zinātnieki Apache Spark, izmantojot R vai Python, var apmācīt modeļus, saglabāt tos, izmantojot MLlib, un pēc tam tos importēt Java vai Scala bāzes cauruļvados ražošanas vajadzībām.

Ņemiet vērā, ka, lai gan Spark MLlib attiecas uz mašīnmācīšanos, ieskaitot klasifikāciju, regresiju, kopu veidošanu un filtrēšanu, tajā nav iekļautas iespējas dziļu neironu tīklu modelēšanai un apmācībai (sīkāku informāciju skatiet Spark MLlib pārskatā). Tomēr darbos ir padziļinātas mācīšanās cauruļvadi.

Spark GraphX

Spark GraphX ​​ir pieejams ar izplatītu algoritmu izvēli grafu struktūru apstrādei, ieskaitot Google PageRank ieviešanu. Šie algoritmi datu modelēšanai izmanto Spark Core RDD pieeju; pakete GraphFrames ļauj veikt grafika darbības ar datu ietvariem, tostarp izmantot Catalyst optimizētāja priekšrocības grafu vaicājumiem.

Dzirksteles straumēšana

Spark Streaming bija agrīns Apache Spark papildinājums, kas palīdzēja tam iegūt vilces spējas vidēs, kurās nepieciešama reāllaika vai gandrīz reāllaika apstrāde. Iepriekš partijas un straumes apstrāde Apache Hadoop pasaulē bija atsevišķas lietas. Jūs rakstīsit MapReduce kodu savām partijas apstrādes vajadzībām un reāllaika straumēšanas prasībām izmantosiet kaut ko līdzīgu Apache Storm. Tas acīmredzami noved pie atšķirīgām koda bāzēm, kas jāsaglabā sinhronizācijā lietojumprogrammas domēnam, neraugoties uz to, ka tās pamatā ir pilnīgi atšķirīgas struktūras, nepieciešami dažādi resursi un kuru darbināšanai ir nepieciešamas dažādas operatīvās problēmas.

Spark Streaming paplašināja Apache Spark sērijveida apstrādes koncepciju straumēšanā, sadalot straumi nepārtrauktā mikropakaru sērijā, pēc tam to varēja manipulēt, izmantojot Apache Spark API. Tādā veidā pakešu un straumēšanas operāciju kods var koplietot (galvenokārt) vienu un to pašu kodu, darbojoties vienā un tajā pašā sistēmā, tādējādi samazinot gan izstrādātāja, gan operatora pieskaitāmās izmaksas. Uzvar visi.

Spark Streaming pieejas kritika ir tāda, ka mikropakete scenārijos, kur nepieciešama zema latentuma atbilde uz ienākošajiem datiem, var nebūt spējīga saskaņot citu ar straumēšanu spējīgu sistēmu, piemēram, Apache Storm, Apache Flink un Apache Apex, veiktspēju kas visi izmanto tīru straumēšanas metodi, nevis mikropaketes.

Strukturēta straumēšana

Strukturētā straumēšana (pievienota Spark 2.x) ir Spark Streaming, kas Spark SQL bija Spark Core API: augstāka līmeņa API un vienkāršāka abstrakcija lietojumprogrammu rakstīšanai. Struktūras straumēšanas gadījumā augstākā līmeņa API būtībā ļauj izstrādātājiem izveidot bezgalīgas straumēšanas datu ietvarus un datu kopas. Tas arī atrisina dažus ļoti reālus sāpju punktus, ar kuriem lietotāji ir saskārušies agrākajā sistēmā, jo īpaši attiecībā uz notikumu laika apkopošanu un novēlotu ziņojumu piegādi. Visi vaicājumi strukturētajās straumēs iziet cauri Catalyst vaicājumu optimizatoram, un tos var pat izpildīt interaktīvā veidā, ļaujot lietotājiem veikt SQL vaicājumus pret tiešraides straumēšanas datiem.

Strukturētā straumēšana sākotnēji paļāvās uz Spark Streaming mikrobaketēšanas shēmu straumēšanas datu apstrādei. Bet Spark 2.3 versijā Apache Spark komanda strukturētai straumēšanai pievienoja zema latentuma nepārtrauktas apstrādes režīmu, ļaujot tai apstrādāt atbildes ar latentumu līdz 1ms, kas ir ļoti iespaidīgi. Sākot ar Spark 2.4, nepārtraukta apstrāde joprojām tiek uzskatīta par eksperimentālu. Kaut arī strukturētā straumēšana ir veidota virs Spark SQL dzinēja, nepārtrauktā straumēšana atbalsta tikai ierobežotu vaicājumu kopu.

Strukturētā straumēšana ir lietojumprogrammu straumēšanas nākotne, izmantojot platformu, tādēļ, ja veidojat jaunu straumēšanas lietojumprogrammu, jums jāizmanto strukturētā straumēšana. Mantotās Spark Streaming API joprojām tiks atbalstītas, taču projekts iesaka tos pārnest uz Strukturēto straumēšanu, jo jaunā metode straumēšanas koda rakstīšanu un uzturēšanu padara daudz izturīgāku.

Dziļi apgūstami cauruļvadi

Apache Spark atbalsta dziļu mācīšanos, izmantojot Deep Learning Pipelines. Izmantojot esošo MLlib cauruļvadu struktūru, jūs varat izsaukt zemāka līmeņa dziļas mācību bibliotēkas un izveidot klasifikatorus tikai dažās koda rindās, kā arī ienākošajiem datiem piemērot pielāgotus TensorFlow grafikus vai Keras modeļus. Šos grafikus un modeļus var pat reģistrēt kā pielāgotus Spark SQL UDF (lietotāja definētas funkcijas), lai dziļo mācību modeļus varētu piemērot datiem kā daļu no SQL priekšrakstiem.

Apache Spark apmācības

Vai esat gatavs ienirt un apgūt Apache Spark? Mēs ļoti iesakām Evana Heitmana A neandertālieša ceļvedi Apache Spark Python, kas salīdzinoši vienkāršos vārdos izklāsta Apache Spark darbības pamatus, bet arī iepazīstina jūs ar vienkāršas Python lietojumprogrammas rakstīšanu, kurā tiek izmantota sistēma . Raksts ir rakstīts no datu zinātnieka viedokļa, kas ir jēga, jo datu zinātne ir pasaule, kurā lielie dati un mašīnmācība ir arvien kritiskāka.

Ja meklējat dažus Apache Spark piemērus, lai sniegtu priekšstatu par to, ko platforma var un kā tā dara, skatiet vietni Spark By {Piemēri}. Šeit ir daudz koda parauga vairākiem pamatuzdevumiem, kas veido Spark programmēšanas pamatelementus, lai jūs varētu redzēt komponentus, kas veido lielākos uzdevumus, kuriem Apache Spark ir paredzēts.

Jāiet dziļāk? DZone to, ko tā pieticīgi sauc, sauc par Pilnīgu Apache Spark kolekciju, kas sastāv no daudzām noderīgām apmācībām par daudzām Apache Spark tēmām. Laimīgu mācīšanos!