Articles

Úvod do Apache Spark s Příklady a Případy Použití

poprvé jsem slyšel o Zapalovací koncem roku 2013, kdy jsem se začal zajímat v Scala, jazyk, ve kterém Jiskra je napsáno. O nějaký čas později, udělal jsem zábavný projekt vědy o datech, který se snažil předpovědět přežití na Titaniku. Ukázalo se, že je to skvělý způsob, jak se dále seznámit s koncepty a programováním Spark. Vřele doporučuji pro všechny začínající vývojáře Spark, kteří hledají místo, kde začít.

dnes je Spark přijímán hlavními hráči jako Amazon, eBay a Yahoo! Mnoho organizací provozuje Spark na klastrech s tisíci uzly. Podle Spark FAQ má největší známý cluster více než 8000 uzlů. Vskutku, Spark je technologie, která stojí za to vzít na vědomí a dozvědět se o ní.

tento článek poskytuje úvod do Spark včetně případů použití a příkladů. Obsahuje informace z webových stránek Apache Spark a také knihu Learning Spark-bleskově rychlá analýza velkých dat.

co je Apache Spark? Úvod

Spark je projekt Apache inzerovaný jako „lightning fast cluster computing“. Má prosperující komunitu s otevřeným zdrojovým kódem a je v současné době nejaktivnějším projektem Apache.

Spark poskytuje rychlejší a obecnější platformu pro zpracování dat. Spark umožňuje spouštět programy až 100x rychleji v paměti, nebo 10x rychleji na disku, než Hadoop. V loňském roce Spark převzal Hadoop dokončením soutěže 100 TB Daytona GraySort 3x rychleji na desetinu počtu strojů a stal se také nejrychlejším open source motorem pro třídění petabajtu.

Spark také umožňuje psát kód rychleji, protože máte k dispozici více než 80 operátorů na vysoké úrovni. Abychom to dokázali, podívejme se na “ Hello World!“of BigData: příklad počtu slov. Napsaný v Javě pro MapReduce to má kolem 50 řádků kódu, vzhledem k tomu, že v Spark (a Scala), můžete to udělat tak jednoduše jako toto:

sparkContext.textFile("hdfs://...") .flatMap(line => line.split(" ")) .map(word => (word, 1)).reduceByKey(_ + _) .saveAsTextFile("hdfs://...")

Dalším důležitým aspektem při učení, jak používat Apache Spark je interaktivní shell (REPL), který poskytuje out-of-box. Pomocí REPL lze otestovat výsledek každého řádku kódu, aniž byste museli nejprve kódovat a provádět celou úlohu. Cesta k pracovnímu kódu je tedy mnohem kratší a je umožněna ad-hoc analýza dat.

Další klíčové vlastnosti Spark patří:

  • v Současné době poskytuje Api v Scala, Java, Python, s podporou pro další jazyky (jako R), na cestě
  • Integruje dobře s Hadoop ekosystému a zdrojů dat (HDFS, Amazon S3, Hive, HBase, Cassandra, atd.)
  • Může běžet na uskupení spravuje Hadoop YARN nebo Apache Mesos, a může také spustit samostatně

Spark core je doplněna o sadu výkonných, vyšší úrovni knihoven, které mohou být bez problémů použity ve stejné aplikaci. Tyto knihovny v současné době zahrnují SparkSQL, Spark Streaming, MLlib (pro strojové učení) a GraphX, z nichž každá je podrobněji popsána v tomto článku. Další Spark knihovny a rozšíření jsou v současné době ve vývoji, jakož.

jiskra knihoven a rozšíření

Spark Core

Spark Core je základní motor pro rozsáhlé paralelní a distribuované zpracování dat. Je zodpovědný za:

  • správa paměti a zotavení po chybě
  • plánování, rozdělování a monitorování pracovních míst v clusteru
  • komunikovat s úložnými systémy

Spark zavádí pojem rozprašovačem (Odolné Distribuované datové sady), neměnný odolný proti chybám, distribuované kolekce objektů, které mohou být provozovány souběžně. RDD může obsahovat jakýkoli typ objektu a je vytvořen načtením externí datové sady nebo distribucí kolekce z programu ovladače.

RDDs podporuje dva typy operací:

  • transformace jsou operace (jako je mapa, filtr, spojení, spojení atd.), které jsou prováděny na RDD a které poskytují nový RDD obsahující výsledek.
  • akce jsou operace (například snížit, počítat, první, a tak dále), které vrátí hodnotu po spuštění výpočtu na RDD.

transformace v Spark jsou „líné“, což znamená, že nepočítají své výsledky hned. Místo toho si jen „pamatují“ operaci, která má být provedena, a datový soubor (např. soubor), ke kterému má být operace provedena. Transformace jsou skutečně vypočteny pouze tehdy, když je vyvolána akce a výsledek je vrácen do programu ovladače. Tato konstrukce umožňuje Spark běžet efektivněji. Například, pokud byl velký soubor transformován různými způsoby a předán první akci, Spark by zpracoval a vrátil výsledek pouze pro první řádek, spíše než dělat práci pro celý soubor.

ve výchozím nastavení může být každý transformovaný RDD přepočítán při každém spuštění akce. Můžete však také přetrvávat RDD v paměti pomocí metody persist nebo cache, v takovém případě Spark udrží prvky kolem clusteru pro mnohem rychlejší přístup při příštím dotazu.

SparkSQL

SparkSQL je komponenta Spark, která podporuje dotazování dat buď přes SQL nebo přes jazyk dotazu Hive. Vznikl jako Apache úl port běžet na vrcholu Spark (místo MapReduce) a je nyní integrován s Spark zásobníku. Kromě poskytování podpory pro různé zdroje dat umožňuje tkát dotazy SQL s transformacemi kódu, což má za následek velmi výkonný nástroj. Níže je uveden příklad dotazu kompatibilního s úlem:

// sc is an existing SparkContext.val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")sqlContext.sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src")// Queries are expressed in HiveQLsqlContext.sql("FROM src SELECT key, value").collect().foreach(println)

Spark Streaming

Spark Streaming podporuje zpracování dat v reálném čase, jako jsou soubory protokolu produkčního webového serveru (např. Pod kapotou, Spark Streaming přijímá vstupní datové toky a rozděluje data do dávek. Dále se zpracovávají jiskrovým motorem a generují konečný proud výsledků v dávkách, jak je znázorněno níže.

spark streaming

Spark Streaming API odpovídá, že Spark Core, takže je snadné pro programátory do práce ve světech obou šarže a data streaming.

MLlib

MLlib je knihovna strojového učení, která poskytuje různé algoritmy určené k škálování na clusteru pro klasifikaci, regresi, shlukování, kolaborativní filtrování atd. Některé z těchto algoritmů také pracují se streamovanými daty, jako je lineární regrese pomocí běžných nejmenších čtverců nebo shlukování k-prostředků(a další na cestě). Apache Mahout (knihovna strojového učení pro Hadoop) se již odvrátila od MapReduce a spojila své síly na Spark MLlib.

GraphX

graphx

GraphX je knihovna pro manipulaci s grafy a provedení graf-paralelní operace. Poskytuje jednotný nástroj pro ETL, průzkumnou analýzu a iterační výpočty grafů. Kromě vestavěných operací pro manipulaci s grafy poskytuje knihovnu běžných grafových algoritmů, jako je PageRank.

jak používat Apache Spark: případ použití detekce událostí

Nyní, když jsme odpověděli na otázku “ Co je Apache Spark?“, pojďme přemýšlet o tom, jaké problémy nebo výzvy by mohly být použity pro nejefektivněji.

nedávno jsem narazil na článek o experimentu k detekci zemětřesení analýzou proudu Twitteru. Zajímavé je, že se ukázalo, že tato technika vás pravděpodobně informuje o zemětřesení v Japonsku rychleji než japonská meteorologická agentura. I když ve svém článku použili jinou technologii, myslím, že je to skvělý příklad, jak vidět, jak bychom mohli Spark použít se zjednodušenými úryvky kódu a bez kódu lepidla.

nejprve bychom museli filtrovat tweety, které se zdají relevantní jako „zemětřesení“ nebo „třes“. Můžeme snadno použít Spark Streaming pro tento účel takto:

TwitterUtils.createStream(...) .filter(_.getText.contains("earthquake") || _.getText.contains("shaking"))

Pak, budeme muset spustit některé sémantické analýzy na tweety zjistit, jestli se jim zdají být odkazování na aktuální zemětřesení. Tweety jako “ zemětřesení!“nebo „Teď se třese“, například, by bylo zvážit pozitivní zápasy, vzhledem k tomu, že tweety jako „Účast Zemětřesení Konferenci“ nebo „zemětřesení včera bylo hrozné“ nebude. Autoři článku pro tento účel použili podpůrný vektorový stroj (SVM). Uděláme to samé zde, ale můžeme také vyzkoušet streamovací verzi. Výsledný kód příklad z MLlib by vypadat takto:

// We would prepare some earthquake tweet data and load it in LIBSVM format.val data = MLUtils.loadLibSVMFile(sc, "sample_earthquate_tweets.txt")// Split data into training (60%) and test (40%).val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)val training = splits(0).cache()val test = splits(1)// Run training algorithm to build the modelval numIterations = 100val model = SVMWithSGD.train(training, numIterations)// Clear the default threshold.model.clearThreshold()// Compute raw scores on the test set. val scoreAndLabels = test.map { point => val score = model.predict(point.features) (score, point.label)}// Get evaluation metrics.val metrics = new BinaryClassificationMetrics(scoreAndLabels)val auROC = metrics.areaUnderROC()println("Area under ROC = " + auROC)

Pokud jsme spokojeni s předpovědí rychlost modelu, mohli bychom se přesunout na další fázi, a reagovat, když objevíme zemětřesení. Hustota) pozitivních tweetů v definovaném časovém okně (jak je popsáno v článku). Všimněte si, že pro tweety s povolenými službami určování polohy Twitter bychom také extrahovali umístění zemětřesení. Ozbrojené s touto znalostí, můžeme použít SparkSQL a dotaz existující Podregistr tabulky (ukládání uživatelů zájem o zemětřesení oznámení) získat jejich e-mailové adresy a pošlete jim osobní upozornění e-mailem, a to následovně:

// sc is an existing SparkContext.val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)// sendEmail is a custom functionsqlContext.sql("FROM earthquake_warning_users SELECT firstName, lastName, city, email") .collect().foreach(sendEmail)

Další Apache Spark Případy Použití

Potenciální případy užití pro Spark daleko přesahují detekci zemětřesení, samozřejmě.

zde je rychlý (ale rozhodně zdaleka vyčerpávající!) odběr vzorků pro ostatní případy použití, které vyžadují jednání s rychlost, rozmanitost a objem Velkých Dat, pro které Jiskra je tak dobře hodí:

V herním průmyslu, zpracování a objevovat vzory z možných firehose real-time in-game události a být schopen na ně reagovat okamžitě je schopnost, která by mohla přinést lukrativní byznys, pro takové účely, jako hráč, uchovávání, cílená reklama, auto-nastavení úrovně složitosti, a tak dále.

v odvětví elektronického obchodování by informace o transakcích v reálném čase mohly být předány algoritmu shlukování streamingu, jako jsou k-means nebo kolaborativní filtrování, jako je ALS. Výsledky by pak mohly být dokonce kombinovány s jinými nestrukturovanými zdroji dat, jako jsou komentáře zákazníků nebo Recenze produktů, a použity k neustálému zlepšování a přizpůsobování doporučení v průběhu času novým trendům.

ve finančním nebo bezpečnostním průmyslu může být zásobník Spark aplikován na systém detekce podvodů nebo narušení nebo ověřování založené na riziku. Může dosáhnout špičkových výsledků tím, že sklizeň obrovské množství archivovaných logů, kombinovat to s externími zdroji dat, jako jsou informace o narušení bezpečnosti údajů a napadených účtů (viz například https://haveibeenpwned.com/) a informace z internetu/žádost jako IP geolokace nebo času.

Závěr

Abych to shrnul, Zapalovací pomáhá zjednodušit náročné a výpočetně náročné zpracování vysokých objemů v reálném čase nebo archivovaných dat, strukturovaných i nestrukturovaných, bezproblémově integruje relevantní komplexní schopnosti, jako je například strojové učení a grafové algoritmy. Spark přináší zpracování velkých dat masám. Koukni na to!