Articles

Bevezetés Az Apache Sparkba példákkal és használati esetek

először hallottam a Spark-ról 2013 végén, amikor érdeklődtem a Scala iránt, a nyelv, amelyen a Spark íródott. Nem sokkal később, csináltam egy szórakoztató adattudományi projektet, amely megpróbálta megjósolni a túlélést a Titanicon. Ez egy nagyszerű módja annak, hogy a Spark koncepciók és a programozás további bevezetésre kerüljön. Nagyon ajánlom minden törekvő Spark fejlesztőnek, aki helyet keres az induláshoz.

ma a Spark-ot olyan nagy játékosok fogadják el, mint az Amazon, az eBay vagy a Yahoo! Sok szervezet fut Spark klaszterek több ezer csomópontok. A Spark GYIK szerint a legnagyobb ismert klaszternek több mint 8000 csomópontja van. Valóban, a Spark egy olyan technológia, amelyet érdemes figyelembe venni és megismerni.

Ez a cikk bevezetést nyújt a Spark – hoz, beleértve a használati eseteket és példákat. Információkat tartalmaz az Apache Spark weboldaláról, valamint a könyv tanulási szikra – villámgyors nagy adatelemzés.

mi az Apache Spark? A bevezetés

Spark egy Apache projekt hirdetett “villámgyors cluster computing”. Virágzó nyílt forráskódú közösséggel rendelkezik, jelenleg a legaktívabb Apache projekt.

A Spark gyorsabb és általánosabb adatfeldolgozási platformot biztosít. A Spark lehetővé teszi, hogy akár 100-szor gyorsabban futtasson programokat a memóriában, vagy 10-szer gyorsabban a lemezen, mint a Hadoop. Tavaly a Spark átvette a Hadoop – ot azzal, hogy a 100 TB-os Daytona GraySort versenyt 3x-kal gyorsabban teljesítette a gépek száma tizedével, és ez lett a leggyorsabb nyílt forráskódú motor a petabyte válogatásához.

A Spark lehetővé teszi a kód gyorsabb írását is, mivel több mint 80 magas szintű operátor áll az Ön rendelkezésére. Ennek bemutatásához vessünk egy pillantást a ” Hello World!”of BigData: the Word Count example. Java nyelven írva a MapReduce számára körülbelül 50 sornyi kóddal rendelkezik, míg a Sparkban (és a Scala-ban) ezt egyszerűen megteheti:

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

egy másik fontos szempont az Apache Spark használatának megtanulásakor az interaktív héj (REPL), amelyet a dobozon kívül biztosít. A REPL használatával minden kódsor kimenetelét tesztelheti anélkül, hogy először kódolnia kellene a teljes munkát. A munkakódhoz vezető út tehát sokkal rövidebb, így ad hoc Adatelemzés is lehetséges.

A Spark további főbb jellemzői a következők:

  • jelenleg API-kat biztosít Scala-ban, Java-ban és Python-ban, más nyelvek (például R) támogatásával útközben
  • jól integrálódik a Hadoop ökoszisztémához és adatforrásokhoz (HDFS, Amazon S3, Hive, HBase, Cassandra stb.).)
  • futhat a Hadoop fonal vagy az Apache Mesos által kezelt klasztereken, valamint önálló

futtatható a Spark core kiegészül egy sor erőteljes, magasabb szintű könyvtárral, amelyek zökkenőmentesen használhatók ugyanabban az alkalmazásban. Ezek a könyvtárak jelenleg tartalmazza SparkSQL, Spark Streaming, MLlib (gépi tanulás), valamint GraphX, amelyek mindegyike további részletes ebben a cikkben. Jelenleg további Spark könyvtárak és bővítmények is fejlesztés alatt állnak.

spark könyvtárak és kiterjesztések

Spark Core

A Spark Core a nagyszabású párhuzamos és elosztott adatfeldolgozás alapmotora. Ez a felelős:

  • memória menedzsment hibája helyreállítási
  • ütemezés, terjesztése, valamint ellenőrzési feladatokat a klaszter
  • kölcsönhatásban tároló rendszerek

Szikra bevezeti a koncepció egy RDD (Rugalmas Elosztott Adatkészlet), egy megváltoztathatatlan hibatűrő elosztott objektumok gyűjteménye is működtethető párhuzamosan. Az RDD bármilyen típusú objektumot tartalmazhat, amelyet külső adatkészlet betöltésével vagy gyűjtemény elosztásával hoz létre az illesztőprogram programból.

az RDDs kétféle műveletet támogat:

  • az átalakítások olyan műveletek (például térkép, szűrő, csatlakozás, union stb.), amelyeket egy RDDD-n hajtanak végre, és amelyek az eredményt tartalmazó új RDDD-t eredményeznek.
  • a műveletek olyan műveletek (mint például a reduce, count, first, stb.), amelyek egy RDDD-n végzett számítás futtatása után adnak vissza értéket.

A Spark transzformációi “lusták”, ami azt jelenti, hogy nem számítják ki azonnal eredményeiket. Ehelyett csak “emlékeznek” az elvégzendő műveletre, valamint az adatkészletre (például fájlra), amelyre a műveletet végre kell hajtani. Az átalakításokat csak akkor számítják ki, ha egy műveletet hívnak, az eredményt pedig visszaadják az illesztőprogram programba. Ez a kialakítás lehetővé teszi a Spark hatékonyabb működését. Például, ha egy nagy fájl átalakult különböző módon, majd át az első művelet, Spark csak feldolgozni, majd vissza az eredményt az első sorban, ahelyett, hogy a munka a teljes fájlt.

alapértelmezés szerint minden átalakított RDD-t minden művelet futtatásakor újra lehet számítani. Előfordulhat azonban, hogy a memóriában egy RDD-t is fenntart vagy gyorsítótár módszerrel tárolhat, ebben az esetben a Spark az elemeket a fürtön tartja, hogy a következő lekérdezés során sokkal gyorsabban hozzáférjen.

SparkSQL

a SparkSQL egy szikra összetevő, amely támogatja az adatok lekérdezését SQL vagy a kaptár lekérdezési nyelvén keresztül. Ez eredetileg az Apache Hive port futtatni a tetején Spark (helyett MapReduce), és most integrálva van a Spark stack. Amellett, hogy támogatja a különböző adatforrások, lehetővé teszi, hogy szőni SQL lekérdezések kód transzformációk, ami egy nagyon hatékony eszköz. Az alábbiakban egy példa a kaptár kompatibilis lekérdezés:

// 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 támogatja a valós idejű feldolgozása streaming adatok, mint például a termelés web szerver naplófájlok (például Apache Flume és HDFS/S3), a szociális média, mint a Twitter, és a különböző üzenetküldő sorok, mint a Kafka. A motorháztető alatt a Spark Streaming fogadja a bemeneti adatfolyamokat, majd az adatokat tételekre osztja. Ezután a Szikramotor feldolgozza őket, és az eredmények végső áramát tételekben generálja, az alábbiak szerint.

spark streaming

a Spark Streaming API szorosan illeszkedik a Spark Core-hoz, így a programozók könnyen dolgozhatnak mind a kötegelt, mind a streaming adatok világában.

Mlib

az MLlib egy gépi tanulási könyvtár, amely különféle algoritmusokat kínál, amelyek osztályozásra, regresszióra, csoportosításra, kollaboratív szűrésre stb. Ezen algoritmusok némelyike streaming adatokkal is működik, például lineáris regresszióval, a legkisebb négyzetek vagy a k-eszközök klaszterezésével (stb.). Az Apache Mahout (egy gépi tanulási könyvtár Hadoop számára) már elfordult a MapReduce-tól, és egyesítette erőit a Spark MLlib-en.

GraphX

graphx

GraphX a Grafikonok manipulálására és a grafikon-párhuzamos műveletek végrehajtására szolgáló könyvtár. Egységes eszközt biztosít az ETL-hez, feltáró elemzéshez és iteratív gráfszámításhoz. Eltekintve a beépített műveletek gráf manipuláció, ez biztosítja a könyvtár közös gráf algoritmusok, mint a PageRank.

hogyan kell használni az Apache Spark: Event Detection Use Case

most, hogy megválaszoltuk a kérdést: “Mi az Apache Spark?”, gondoljunk arra, hogy milyen problémákat vagy kihívásokat lehetne használni a leghatékonyabban.

nemrég találkoztam egy cikkel egy földrengés észlelésére irányuló kísérletről egy Twitter-patak elemzésével. Érdekes módon kimutatták, hogy ez a technika valószínűleg gyorsabban tájékoztatja Önt egy japán földrengésről, mint a Japán Meteorológiai Ügynökség. Annak ellenére, hogy a cikkükben különböző technológiát alkalmaztak, azt hiszem, ez egy nagyszerű példa arra, hogy hogyan tudnánk a Spark-ot használni egyszerűsített kódrészletekkel, ragasztókód nélkül.

először szűrnünk kell azokat a tweeteket, amelyek relevánsnak tűnnek, mint például a “földrengés” vagy a “remegés”. Könnyen használhatjuk a Spark Streaming-et erre a célra az alábbiak szerint:

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

ezután néhány szemantikai elemzést kell futtatnunk a tweeteken annak megállapításához, hogy úgy tűnik-e, hogy egy aktuális földrengés előfordulására utalnak. Tweetek, mint a ” földrengés!”vagy” most remeg”, például, lenne úgy pozitív mérkőzések, mivel tweets mint” részt vesz egy földrengés konferencia “vagy” a földrengés tegnap ijesztő volt ” nem. A tanulmány szerzői erre a célra támogató vektor gépet (SVM) használtak. Ugyanezt fogjuk tenni itt, de kipróbálhatunk egy streaming verziót is. Az MLlib által kapott kódpélda a következőképpen néz ki:

// 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)

ha elégedettek vagyunk a modell előrejelzési sebességével, akkor továbbléphetünk a következő szakaszba, és reagálhatunk, amikor földrengést észlelünk. Az egyik észleléséhez szükségünk van egy bizonyos számú (azaz sűrűségű) pozitív tweetre egy meghatározott időablakban (a cikkben leírtak szerint). Vegye figyelembe, hogy a Twitter helymeghatározási szolgáltatásaival engedélyezett tweeteknél a földrengés helyét is kivonjuk. Ezzel a tudással felfegyverkezve, jól jönne SparkSQL lekérdezés, illetve a meglévő Struktúra táblázat (tárolására felhasználók érdeklődnek a fogadó földrengés értesítések), hogy letöltse az e-mail címeket, küldj nekik egy személyre szabott figyelmeztető e-mailt, a következőképpen:

// 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)

Egyéb Apache Szikra használati Esetek

a Potenciális használati esetek a Szikra messze túlmutat kimutatása földrengések persze.

itt van egy gyors (de biztosan közel sem kimerítő!) a mintavétel egyéb használati esetek igénylő foglalkozik a sebesség, fajta, mennyiségét, a Big Data, a Szikra, amely olyan jól illik:

a játék ipar, a feldolgozás, az felfedezni minták a potenciális locsolótömlő a real-time in-game események, illetve, hogy képes reagálni azonnal egy képesség, hogy ajánlhassuk egy jövedelmező üzleti célokra, mint például a játékos megtartása, a célzott reklám, automatikus beállítása a komplexitás szint, stb.

az e-kereskedelmi iparban a valós idejű tranzakciós információk átadhatók egy streaming klaszterező algoritmusnak, mint például a k-means vagy az együttműködő szűrés, mint például az ALS. Az eredményeket ezután még más strukturálatlan adatforrásokkal is kombinálhatjuk, mint például az ügyfelek megjegyzései vagy a termékértékelések, és az ajánlások folyamatos javítására és adaptálására használják az új trendekkel.

a pénzügyi vagy biztonsági iparban a Spark stack alkalmazható csalásra vagy behatolásérzékelő rendszerre vagy kockázatalapú hitelesítésre. Hogy lehet elérni, hogy a top-notch eredmények a szüret hatalmas mennyiségű archivált naplók, ötvözve azt a külső adatforrások, mint adatait is sérti, illetve veszélyezteti számlák (lásd például a https://haveibeenpwned.com/), valamint információk a kapcsolat/kérés, mint az IP-térinformatikai vagy idő.

következtetés

összefoglalva, a Spark segít egyszerűsíteni a nagy mennyiségű valós idejű vagy archivált adat feldolgozásának kihívást jelentő és számításigényes feladatát, mind strukturált, mind strukturálatlan, zökkenőmentesen integrálva a releváns komplex képességeket, például a gépi tanulást és a grafikon algoritmusokat. A Spark nagy adatfeldolgozást hoz a tömegekhez. Ezt nézd!