Apache Spark - Apache Spark - Wikipedia
Původní autoři | Matei Zaharia |
---|---|
Vývojáři | Apache Spark |
První vydání | 26. května 2014 |
Stabilní uvolnění | 3.0.1 / 2. října 2020 |
Úložiště | Spark úložiště |
Napsáno | Scala[1] |
Operační systém | Microsoft Windows, Operační Systém Mac, Linux |
K dispozici v | Scala, Jáva, SQL, Krajta, R, C#, F# |
Typ | Analytika dat, strojové učení algoritmy |
Licence | Licence Apache 2.0 |
webová stránka | jiskra |
Apache Spark je open-source distribuováno univerzální clusterové výpočty rámec. Spark poskytuje rozhraní pro implicitní programování celých klastrů paralelnost dat a odolnost proti chybám. Původně vyvinut na University of California, Berkeley je AMPLab, Jiskra kódová základna byl později darován Softwarová nadace Apache, který ji od té doby udržuje.
Přehled
Apache Spark má svůj architektonický základ v odolné distribuované datové sadě (RDD), jen pro čtení multiset datových položek distribuovaných v klastru strojů, který je udržován v tolerantní k chybám způsob.[2] Dataframe API bylo vydáno jako abstrakce na vrcholu RDD, následované API Dataset. Ve Sparku 1.x byl RDD primární aplikační programovací rozhraní (API), ale od verze Spark 2.x se doporučuje použití API Dataset[3] i když RDD API není zastaralé.[4][5] Technologie RDD je stále základem rozhraní API datové sady.[6][7]
Spark a jeho RDD byly vyvinuty v roce 2012 v reakci na omezení v EU MapReduce clusterové výpočty paradigma, který vynutí konkrétní lineární datový tok struktura distribuovaných programů: programy MapReduce načítají vstupní data z disku, mapa funkce napříč daty, snížit výsledky mapy a výsledky redukce uložte na disk. Sparkovy RDD fungují jako a pracovní sada pro distribuované programy, které nabízejí (záměrně) omezenou formu distribuované sdílená paměť.[8]
Spark usnadňuje implementaci obou iterační algoritmy, kteří navštěvují svůj soubor dat vícekrát ve smyčce, a interaktivní / průzkumná analýza dat, tj. opakovaná databáze styl dotazování dat. The latence těchto aplikací může být sníženo o několik řádů ve srovnání s Apache Hadoop MapReduce implementace.[2][9]Mezi třídou iterativních algoritmů patří tréninkové algoritmy pro strojové učení systémy, které tvořily počáteční impuls pro vývoj Apache Spark.[10]
Apache Spark vyžaduje správce klastrů a a distribuovaný úložný systém. Pro správu klastrů Spark podporuje samostatný (nativní klastr Spark, kde můžete spustit klastr buď ručně, nebo použít spouštěcí skripty poskytované instalačním balíčkem. Tyto démony je také možné spustit pro testování na jednom počítači), Hadoop YARN, Apache Mesos nebo Kubernetes. [11] Pro distribuované úložiště může Spark komunikovat s širokou škálou, včetně Alluxio, Systém distribuovaných souborů Hadoop (HDFS),[12] Systém souborů MapR (MapR-FS),[13] Cassandra,[14] OpenStack Swift, Amazon S3, Kudu, Lesklý souborový systém,[15] nebo lze implementovat vlastní řešení. Spark také podporuje pseudodistribuovaný místní režim, obvykle používaný pouze pro účely vývoje nebo testování, kde není vyžadováno distribuované úložiště a místo něj lze použít lokální souborový systém; v takovém scénáři je Spark spuštěn na jednom počítači s jedním vykonavatelem za Jádro CPU.
Spark Core
Spark Core je základem celého projektu. Poskytuje distribuovaný úkol dispečink, plánování a základní I / O funkce vystavené prostřednictvím aplikačního programovacího rozhraní (pro Jáva, Krajta, Scala, .SÍŤ[16] a R ) se středem na RDD abstrakce (Java API je k dispozici pro jiné jazyky JVM, ale je také použitelné pro některé jiné jazyky než JVM, které se mohou k JVM připojit, například Julie[17]). Toto rozhraní zrcadlí a funkční /vyšší řád model programování: program „řidič“ vyvolá paralelní operace, jako je mapa, filtr nebo snížit na RDD předáním funkce Sparku, který pak naplánuje spuštění funkce paralelně v klastru.[2] Tyto operace a další, jako např připojí se, vezměte RDD jako vstup a vytvořte nové RDD. RDD jsou neměnný a jejich operace jsou líný; odolnosti vůči chybám je dosaženo sledováním „linie“ každého RDD (sled operací, které jej vedly), aby bylo možné jej v případě ztráty dat rekonstruovat. RDD mohou obsahovat jakýkoli typ objektů Python, .NET, Java nebo Scala.
Kromě funkčního stylu programování zaměřeného na RDD poskytuje Spark dvě omezené formy sdílených proměnných: vysílané proměnné referenční data pouze pro čtení, která musí být k dispozici na všech uzlech, zatímco akumulátory lze použít k programování redukcí v rozkazovací způsob styl.[2]
Typickým příkladem funkčního programování zaměřeného na RDD je následující program Scala, který počítá frekvence všech slov vyskytujících se v sadě textových souborů a tiskne ty nejběžnější. Každý mapa, flatMap (varianta mapa) a redukovatByKey bere anonymní funkce který provádí jednoduchou operaci s jednou datovou položkou (nebo dvojicí položek) a použije svůj argument k transformaci RDD na nový RDD.
val konf = Nový SparkConf().setAppName("wiki_test") // vytvořit objekt konfigurace jiskryval sc = Nový SparkContext(konf) // Vytvořte kontext jiskryval data = sc.textový soubor(„/ path / to / somedir“) // Načíst soubory z „somedir“ do RDD párů (název souboru, obsah).val žetony = data.flatMap(_.rozdělit(" ")) // Rozdělte každý soubor do seznamu tokenů (slov).val wordFreq = žetony.mapa((_, 1)).redukovatByKey(_ + _) // Ke každému tokenu přidejte počet jedna, poté sčítejte počty podle typu slova.wordFreq.seřazeno podle(s => -s._2).mapa(X => (X._2, X._1)).horní(10) // Získejte 10 nejlepších slov. Vyměňte slovo a počet a seřaďte je podle počtu.
Spark SQL
Jiskra SQL je komponenta nad Spark Core, která zavedla datovou abstrakci nazvanou DataFrames,[A] který poskytuje podporu pro strukturované a polostrukturovaná data. Spark SQL poskytuje a jazyk specifický pro doménu (DSL) pro manipulaci s DataFrames Scala, Jáva, Krajta nebo .SÍŤ.[16] Poskytuje také podporu jazyka SQL s rozhraní příkazového řádku a ODBC /JDBC serveru. Ačkoli DataFrames postrádají kontrolu typu kompilace poskytovanou RDD, od Sparku 2.0 je silně typovaná DataSet plně podporována také Sparkem SQL.
import org.apache.spark.sql.SparkSessionval url = "jdbc: mysql: // yourIP: yourPort / test? user = yourUsername; password = yourPassword" // URL pro váš databázový server.val jiskra = SparkSession.stavitel().getOrCreate() // Vytvořit objekt relace Sparkval df = jiskra .číst .formát(„jdbc“) .volba(„url“, url) .volba("dbtable", "lidé") .zatížení()df.printSchema() // Vyhledá schéma tohoto DataFrame.val counttsByAge = df.skupina vytvořená("stáří").počet() // Počítá lidi podle věku// nebo alternativně přes SQL://df.createOrReplaceTempView("people ")// val counttsByAge = spark.sql ("SELECT age, count (*) FROM people GROUP BY age")
Streamování jisker
Spark Streaming využívá k provedení schopnost rychlého plánování Spark Core streamovací analytika. Inests data in mini-batches and performs RDD transformations on those mini-batches of data. Tento design umožňuje použití stejné sady aplikačního kódu napsaného pro dávkovou analýzu při streamování analytiky, což usnadňuje snadnou implementaci lambda architektura.[19][20] Tato výhoda však přichází s trestem latence rovným délce mini dávky. Mezi další streamovací datové stroje, které zpracovávají události po událostech spíše než v mini-dávkách, patří Bouřka a streamovací složka Flink.[21] Spark Streaming má vestavěnou podporu pro konzumaci Kafka, Žlab, Cvrlikání, ZeroMQ, Kinesis, a TCP / IP zásuvky.[22]
Ve Spark 2.x je k podpoře streamování poskytována také samostatná technologie založená na datových sadách, nazývaná strukturované streamování, která má rozhraní vyšší úrovně.[23]
Spark lze nasadit tradičním způsobem místní datové centrum stejně jako v mrak.
Knihovna strojového učení MLlib
Spark MLlib je a distribuováno rámec strojového učení nad Spark Core, který je z velké části díky architektuře Spark založené na distribuované paměti až devětkrát rychlejší než disková implementace používaná Apache Mahout (podle měřítek provedených vývojáři MLlib proti střídání nejmenších čtverců (ALS) a předtím, než Mahout sám získal rozhraní Spark), a váhy lepší než Vowpal Wabbit.[24] Bylo implementováno mnoho běžných strojových učení a statistických algoritmů a jsou dodávány s MLlib, což zjednodušuje strojové učení ve velkém měřítku potrubí, počítaje v to:
- souhrnná statistika, korelace, stratifikovaný odběr vzorků, testování hypotéz, generování náhodných dat[25]
- klasifikace a regrese: podporovat vektorové stroje, logistická regrese, lineární regrese, naivní Bayesova klasifikace, Rozhodovací strom, Náhodný les, Gradient-Boosted Tree
- společné filtrování techniky včetně střídání nejmenších čtverců (ALS)
- metody klastrové analýzy počítaje v to k-prostředky, a latentní Dirichletova alokace (LDA)
- techniky redukce rozměrů jako rozklad singulární hodnoty (SVD) a analýza hlavních komponent (PCA)
- extrakce funkcí a proměna funkce
- optimalizace algoritmy jako např stochastický gradient, BFGS s omezenou pamětí (L-BFGS)
GraphX
GraphX je distribuovaný zpracování grafů rámec nad Apache Spark. Protože je založen na RDD, které jsou neměnné, grafy jsou neměnné, a proto GraphX není vhodný pro grafy, které je třeba aktualizovat, natož transakčním způsobem jako grafová databáze.[26] GraphX poskytuje dvě samostatná rozhraní API pro implementaci masivně paralelních algoritmů (například PageRank ): a Pregel abstrakce a obecnější rozhraní API ve stylu MapReduce.[27] Na rozdíl od svého předchůdce Bagel, který byl ve verzi Spark 1.6 formálně zastaralý, má GraphX plnou podporu grafů vlastností (grafů, kde lze vlastnosti připojit k hranám a vrcholům).[28]
GraphX lze zobrazit jako verzi Spark v paměti Apache Giraph, který využíval diskovou bázi MapReduce založenou na Hadoopu.[29]
Stejně jako Apache Spark, GraphX původně začínal jako výzkumný projekt v UC Berkeley AMPLab a Databricks a později byl darován Apache Software Foundation a projektu Spark.[30]
Jazyková podpora
Apache Spark má integrovanou podporu pro Scala, Java, R a Python s podporou třetích stran pro jazyky .net,[31] Julie,[32] a více.
Dějiny
Spark byl původně založen Matei Zaharia na AMPLab UC Berkeley v roce 2009 a otevřené zdroje v roce 2010 pod a Licence BSD.[33]
V roce 2013 byl projekt věnován Apache Software Foundation a jeho licence byla převedena na Apache 2.0. V únoru 2014 se Spark stal Projekt nejvyšší úrovně Apache.[34]
V listopadu 2014 společnost zakladatele Sparku M. Zaharia Databricky vytvořil nový světový rekord ve velkém měřítku třídění pomocí Spark.[35][33]
Spark měl v roce 2015 více než 1000 přispěvatelů,[36] což je jeden z nejaktivnějších projektů v Apache Software Foundation[37] a jeden z nejaktivnějších otevřených zdrojů velká data projekty.
Verze | Původní datum vydání | Nejnovější verze | Datum vydání |
---|---|---|---|
0.5 | 2012-06-12 | 0.5.1 | 2012-10-07 |
0.6 | 2012-10-14 | 0.6.2 | 2013-02-07 |
0.7 | 2013-02-27 | 0.7.3 | 2013-07-16 |
0.8 | 2013-09-25 | 0.8.1 | 2013-12-19 |
0.9 | 2014-02-02 | 0.9.2 | 2014-07-23 |
1.0 | 2014-05-26 | 1.0.2 | 2014-08-05 |
1.1 | 2014-09-11 | 1.1.1 | 2014-11-26 |
1.2 | 2014-12-18 | 1.2.2 | 2015-04-17 |
1.3 | 2015-03-13 | 1.3.1 | 2015-04-17 |
1.4 | 2015-06-11 | 1.4.1 | 2015-07-15 |
1.5 | 2015-09-09 | 1.5.2 | 2015-11-09 |
1.6 | 2016-01-04 | 1.6.3 | 2016-11-07 |
2.0 | 2016-07-26 | 2.0.2 | 2016-11-14 |
2.1 | 2016-12-28 | 2.1.3 | 2018-06-26 |
2.2 | 2017-07-11 | 2.2.3 | 2019-01-11 |
2.3 | 2018-02-28 | 2.3.4 | 2019-09-09 |
2,4 LTS | 2018-11-02 | 2.4.7 | 2020-10-12[38] |
3.0 | 2020-06-18 | 3.0.1 | 2020-10-02[39] |
Legenda: Stará verze Starší verze, stále udržovaná Nejnovější verze Nejnovější verze náhledu |
Viz také
Poznámky
Reference
- ^ „Spark Release 2.0.0“.
MLlib v R: SparkR nyní nabízí MLlib API [..] Python: PySpark nyní nabízí mnohem více MLlib algoritmů "
- ^ A b C d Zaharia, Matei; Chowdhury, Mosharaf; Franklin, Michael J .; Shenker, Scott; Stoica, Ione. Spark: Cluster Computing s pracovními sadami (PDF). Workshop USENIX o horkých tématech v cloudových výpočtech (HotCloud).
- ^ „Spark 2.2.0 Quick Start“. apache.org. 2017-07-11. Citováno 2017-10-19.
důrazně doporučujeme přepnout na použití datové sady, která má lepší výkon než RDD
- ^ "Seznam ukončování podpory Spark 2.2.0". apache.org. 2017-07-11. Citováno 2017-10-10.
- ^ Damji, Jules (2016-07-14). „A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets: When to use them and why“. databricks.com. Citováno 2017-10-19.
- ^ Chambers, Bill (10.08.2017). "12". Spark: Definitivní průvodce. O'Reilly Media.
prakticky veškerý spuštěný kód Spark, kde se datové rámce nebo datové sady kompilují až na RDD
- ^ "Co je Apache Spark? Spark Tutorial Guide pro začátečníky". janbasktraining.com. 2018-04-13. Citováno 2018-04-13.
- ^ Zaharia, Matei; Chowdhury, Mosharaf; Das, Tathagata; Dave, Ankur; Ma, Justin; McCauley, Murphy; J., Michael; Shenker, Scott; Stoica, Ion (2010). Pružné distribuované datové sady: Abstrakce odolná vůči chybám pro clusterový výpočet v paměti (PDF). USENIX Symp. Návrh a implementace síťových systémů.
- ^ Xin, Reynold; Rosen, Josh; Zaharia, Matei; Franklin, Michael; Shenker, Scott; Stoica, Ion (červen 2013). „Shark: SQL and Rich Analytics at Scale“ (PDF). arXiv:1211.6176. Bibcode:2012arXiv1211.6176X. Citovat deník vyžaduje
| deník =
(Pomoc) - ^ Harris, Derrick (28. června 2014). "4 důvody, proč by Spark mohl strhnout Hadoop na hyperpohon". Gigaom.
- ^ „Přehled režimu klastru - dokumentace Spark 2.4.0 - typy správce klastru“. apache.org. Apache Foundation. 09.07.2019. Citováno 2019-07-09.
- ^ Obrázek zobrazující Spark ve vztahu k dalším open-source softwarovým projektům včetně Hadoop
- ^ Matice podpory ekosystému MapR
- ^ Doan, DuyHai (10.09.2014). „Re: cassandra + spark / pyspark“. Uživatel Cassandra (Poštovní seznam). Citováno 2014-11-21.
- ^ Wang, Yandong; Goldstone, Robin; Yu, Weikuan; Wang, Teng (květen 2014). "Charakterizace a optimalizace rezidentní paměti MapReduce na systémech HPC". 2014 IEEE 28. mezinárodní paralelní a distribuované sympozium zpracování. IEEE. str. 799–808. doi:10.1109 / IPDPS.2014.87. ISBN 978-1-4799-3800-1. S2CID 11157612.
- ^ A b dotnet / spark, .NET Platform, 2020-09-14, vyvoláno 2020-09-14
- ^ „GitHub - DFDX / Spark.jl: Julia binding for Apache Spark“. 2019-05-24.
- ^ "Spark Release 1.3.0 | Apache Spark".
- ^ „Uplatnění architektury Lambda u Spark, Kafky a Cassandry | Pluralsight“. www.pluralsight.com. Citováno 2016-11-20.
- ^ Shapira, Gwen (29. srpna 2014). „Budování architektury lambda se streamováním jisker“. cloudera.com. Cloudera. Archivovány od originál dne 14. června 2016. Citováno 17. června 2016.
znovu použijte stejné agregáty, které jsme napsali pro naši dávkovou aplikaci, v datovém proudu v reálném čase
- ^ Chintapalli, Sanket; Dagit, Derek; Evans, Bobby; Farivar, Reza; Graves, Thomas; Holderbaugh, Mark; Liu, Zhuo; Nusbaum, Kyle; Patil, Kishorkumar; Peng, Boyang Jerry; Poulosky, Paul (květen 2016). „Benchmarking Streaming Computation Engines: Storm, Flink a Spark Streaming“. 2016 IEEE International Parallel and Distributed Processing Symposium Workshops (IPDPSW). IEEE. 1789–1792. doi:10.1109 / IPDPSW.2016.138. ISBN 978-1-5090-3682-0. S2CID 2180634.
- ^ Kharbanda, Arush (17. března 2015). „Získání dat do streamování Spark“. sigmoid.com. Sigmoid (Sunnyvale, kalifornská IT produktová společnost). Archivovány od originál dne 15. srpna 2016. Citováno 7. července 2016.
- ^ Zaharia, Matei (2016-07-28). „Structured Streaming In Apache Spark: a new high-level API for streaming“. databricks.com. Citováno 2017-10-19.
- ^ Sparks, Evan; Talwalkar, Ameet (06.08.2013). „Spark Meetup: MLbase, Distributed Machine Learning with Spark“. slideshare.net. Setkání uživatelů Spark, San Francisco, Kalifornie. Citováno 10. února 2014.
- ^ "MLlib | Apache Spark". spark.apache.org. Citováno 2016-01-18.
- ^ Malak, Michael (14. června 2016). „Nalezení izomorfismů grafů v GraphX a GraphFrames: Zpracování grafů vs. databáze grafů“. slideshare.net. sparksummit.org. Citováno 11. července 2016.
- ^ Malak, Michael (1. července 2016). Spark GraphX v akci. Manning. p. 89. ISBN 9781617292521.
Pregel a jeho malý sourozenecký agregátMessages () jsou základními kameny zpracování grafů v GraphX. ... algoritmy, které vyžadují větší flexibilitu pro podmínku ukončení, musí být implementovány pomocí agregateMessages ()
- ^ Malak, Michael (14. června 2016). „Nalezení izomorfismů grafů v GraphX a GraphFrames: Zpracování grafů vs. databáze grafů“. slideshare.net. sparksummit.org. Citováno 11. července 2016.
- ^ Malak, Michael (1. července 2016). Spark GraphX v akci. Manning. p. 9. ISBN 9781617292521.
Giraph je omezen na pomalou Hadoop Map / Reduce
- ^ Gonzalez, Joseph; Xin, Reynold; Dave, Ankur; Crankshaw, Daniel; Franklin, Michael; Stoica, Ion (říjen 2014). „GraphX: Zpracování grafů v rámci distribuovaného toku dat“ (PDF). Citovat deník vyžaduje
| deník =
(Pomoc) - ^ [1]
- ^ [2]
- ^ A b Clark, Lindsay. „Apache Spark zrychluje rozhodování o velkých datech“. ComputerWeekly.com. Citováno 2018-05-16.
- ^ „The Apache Software Foundation ohlašuje Apache & # 8482 Spark & # 8482 jako projekt nejvyšší úrovně“. apache.org. Softwarová nadace Apache. 27. února 2014. Citováno 4. března 2014.
- ^ Spark oficiálně nastavuje nový rekord ve velkém třídění
- ^ Otevřete vývojovou aktivitu HUB Spark
- ^ „The Apache Software Foundation ohlašuje Apache & # 8482 Spark & # 8482 jako projekt nejvyšší úrovně“. apache.org. Softwarová nadace Apache. 27. února 2014. Citováno 4. března 2014.
- ^ "Spark News". apache.org.
- ^ "Spark News". apache.org.