Apache Spark optimalizálási technikák és teljesítményhangolás

írta: Chandan Gaur|Big Data Engineering|05,Oct,2020

mi az Apache Spark?

Az Apache 2012-ben leírta a Resilient Distributed Dataset (RDD az Apache Spark-ban) alapítványt csak olvasható elosztott adatkészletekkel az elosztott klasztereken, és Apache Spark néven nevezte el. Később bevezetik a Dataset API-t, majd a Dataframe API-kat az adatok kötegelt és strukturált streamingjéhez. Ez a cikk felsorolja a legjobb Apache Spark optimalizálási technikákat.

Az Apache Spark egy gyors klaszter számítástechnikai platform, amelyet több számítás és adatfolyam-feldolgozás elvégzésére fejlesztettek ki. A Spark sokféle munkaterhelést képes kezelni a hagyományos rendszerekhez képest, amelyek futtatásához és támogatásához több rendszer szükséges. Az adatelemzési csővezetékeket a Spark megkönnyíti a gyártáshoz szükséges különböző feldolgozási típusok kombinációjával. Az Apache Spark egy külső klaszterkezelővel, például a YARN-nal vagy annak önálló menedzserével működik.

az Apache Spark jellemzői

Az Apache Spark néhány jellemzője:-

  • egységes Platform nagy adatalkalmazások írására.
  • könnyű fejlesztés.
  • nagy hozzáférhetőségre tervezték.
  • a Spark önállóan működhet. Így rugalmasságot biztosít.
  • Költséghatékony.

a XenonStack elemzési szolgáltatásokat és megoldásokat kínál az adatok valós idejű és adatfolyam-felvételéhez, feldolgozásához és elemzéséhez gyorsan és hatékonyan a tárgyak internetéhez, monitorozáshoz, megelőző és Prediktív karbantartáshoz.

a cikkből, Streaming és valós idejű elemzési szolgáltatások

hogyan működik az Apache Spark optimalizálás?

Annak érdekében, hogy megértsük, hogyan működik az Apache Spark optimalizálás, először meg kell értenünk az architektúráját, és a következő szakaszban ugyanezt fogjuk kidolgozni.

az Apache Spark architektúrája

a Spark futásidejű architektúrája három részből áll-

Spark Driver (Master Process)

A Spark Driver a programokat feladatokká alakítja, és a végrehajtók számára ütemezi a feladatokat. A Feladatütemező az Illesztőprogram része, amely segít a feladatok elosztásában a végrehajtók számára.

Spark Cluster Manager

a cluster manager a mag a Spark, amely lehetővé teszi, hogy indítson végrehajtók és néha vezetők is elindítható. A Spark Scheduler A Spark alkalmazás műveleteit és feladatait FIFO módon ütemezi magában a fürtkezelőben. Olvassa el az Apache Airflow-t is.

végrehajtók (Slave folyamatok)

a végrehajtók azok az egyes entitások, amelyeken a Job egyedi feladata fut. A végrehajtók mindig a spark alkalmazás életciklusáig futnak, miután elindították őket. A sikertelen végrehajtók nem állítják le a spark feladat végrehajtását.

RDD (rugalmas elosztott adatkészletek)

az RDD a fürt elosztott csomópontjain található változatlan adatkészletek elosztott gyűjteménye. Az RDD egy vagy több partícióra van felosztva. Az RDD a Spark magja, mint a klaszter különböző csomópontjai közötti eloszlásuk, amely kihasználja az adatok helyét. Az alkalmazáson belüli párhuzamosság elérése érdekében a partíciók az egységek. Az újraparticionálás vagy a koalesce transzformációk segíthetnek a partíciók számának fenntartásában. Az adathozzáférés optimalizálva van az RDD keverésével. Mivel a Spark közel van az adatokhoz, adatokat küld a különböző csomópontokon keresztül, és szükség szerint létrehozza a szükséges partíciókat.

DAG (irányított aciklikus gráf)

A Spark általában operátorgráfot generál, amikor beírjuk a kódot a Spark console-ba. Amikor egy művelet indul a Spark RDD, Spark azt állítja, hogy a grafikon a DAGScheduler. Ezután felosztja ezeket az operátor grafikonokat a feladat szakaszaira a DAGScheduler belsejében. Minden lépés tartalmazhat a bejövő adatok több partícióján alapuló feladatokat. A DAGScheduler ezeket az egyes operátorgráfokat együtt vezeti. Például a Map operátor grafikonok ütemezése egylépcsős, és ezek a szakaszok át a. Feladatütemező a klaszterkezelőben a végrehajtásukhoz. Ez a munka vagy a végrehajtók feladata, hogy végrehajtsák ezeket a feladatokat a rabszolgán.

elosztott feldolgozás partíciók hatékony használatával

a végrehajtók számának növelése a fürtökön szintén növeli a párhuzamosságot a Spark Job feldolgozásában. De ehhez megfelelő információval kell rendelkeznie arról, hogy ezeket az adatokat hogyan osztják szét a végrehajtók között particionálás útján. Az RDD ebben az esetben hasznos, ha elhanyagolható az adatforgalom ezen végrehajtók között. Lehet testre a particionálás pár RDD (RDD kulcs-érték pár). A Spark biztosítja, hogy a kulcsok mindig együtt jelennek meg ugyanabban a csomópontban, mert ebben az esetben nincs kifejezett vezérlés.

az Apache Spark security segíti a hitelesítést egy megosztott titkon keresztül. A Spark hitelesítés az a konfigurációs paraméter, amelyen keresztül a hitelesítés konfigurálható. Ez a paraméter ellenőrzi, hogy a spark kommunikáció protokolljai hitelesítést végeznek-e megosztott titok használatával vagy sem.

a cikkből az Apache Spark Security

a Spark Alkalmazások írásakor elkerülendő hibák

reduceByKey vagy groupByKey

mind a groupByKey, mind a reduceByKey ugyanazt a választ adják, de az eredmények létrehozásának koncepciója eltérő. a reduceByKey a legalkalmasabb a nagy adatkészlethez, mert a Spark-ban egyesíti a kimenetet az egyes partíciók megosztott kulcsával az adatok keverése előtt. Míg a másik oldalon a groupByKey megkeveri az összes kulcs-érték párt. GroupByKey okoz felesleges shuffles és adatátvitel a hálózaton keresztül.

tartsa meg a véletlenszerű blokkok kívánt méretét

alapértelmezés szerint a Spark shuffle blokk nem haladhatja meg a 2 GB-ot. A jobb felhasználás a partíciók növelése és a kapacitás csökkentése partíciónként ~128 MB-ra, ami csökkenti a shuffle blokk méretét. Használhatjuk az újraparticionálást vagy a koalesce-t rendszeres alkalmazásokban. A nagy partíciók lassítják a folyamatot a 2 GB-os limit miatt, és kevés partíció nem teszi lehetővé a feladat méretezését és a párhuzamosság elérését.

fájlformátumok és határolók

a megfelelő fájlformátumok kiválasztása az egyes adatokkal kapcsolatos specifikációkhoz fejfájást okoz. Bölcsen kell megválasztani a lenyelési típusok, a köztes típus és a végső kimeneti típus adatformátumát. Az egyes típusok adatfájlformátumait többféle módon is osztályozhatjuk, például az AVRO fájlformátumot a médiaadatok tárolására használhatjuk, mivel az Avro a legjobban bináris adatokra optimalizált, mint a parketta. A parketta metaadatok tárolására használható, mivel erősen tömörített.

kis adatfájlok

a műsorszórás egy olyan technika, amely kis adatfájlokat vagy adatkészleteket tölt be a memóriablokkokba, hogy azok nagyobb tömegű adatkészletekkel összekapcsolhatók legyenek, kevesebb adatcserével. Például kis adatfájlokat tárolhatunk n számú blokkban, és a nagy adatfájlok a jövőben összekapcsolhatók ezekkel az adatblokkokkal, mivel a nagy adatfájlok párhuzamosan eloszthatók ezek között a blokkok között.

Nincs nyomon követése feladat szakaszában

DAG egy adatstruktúra használt Spark, amely leírja a különböző szakaszaiban feladatok gráf formátumban. A legtöbb fejlesztő írja és hajtja végre a kódot, de a feladatok nyomon követése elengedhetetlen. Ezt a nyomon követést legjobban a DAG kezelésével és a szakaszok csökkentésével lehet elérni. A 20 lépésben végzett munka meghosszabbodik, mint egy 3-4 szakaszban végzett munka.

ByKey, repartition vagy bármely más műveletek, amelyek kiváltó shuffles

A legtöbb alkalommal meg kell kerülni shuffles, amennyire csak tudjuk, mint az adatok shuffles az egész sok, és néha nagyon bonyolult ahhoz, hogy skálázhatóság ki ezeket a shuffles. A GroupByKey értékes eszköz lehet, de először le kell írni annak szükségességét.

megerősítő tanulás

a megerősítő tanulás nemcsak a jobb gépi tanulási környezet megszerzésének koncepciója, hanem a döntések jobb feldolgozása is. A Spark-ban mély megerősítő tanulást kell alkalmazni, ha az átmeneti modell és a jutalmazási modell helyesen épül fel az adatkészletekre, és az ügynökök is képesek eléggé megbecsülni az eredményeket.

Apache Spark Optimization Factors and Techniques

Az Apache Spark optimization egyik legjobb tulajdonsága, hogy segít a memóriában tárolt adatok kiszámításában. Ezeknek a spark-optimalizálási számításoknak a szűk keresztmetszete lehet CPU, memória vagy a fürt bármely erőforrása. Ilyen esetekben szükség lehet az adatok sorosítására, a memória csökkentésére. Ezek a tényezők a szikra optimalizálásához, ha megfelelően használják–

  • szüntesse meg a régóta futó feladatfolyamatot
  • javítás végrehajtó motor
  • javítja a teljesítményidőt az erőforrások kezelésével

13 Az Apache Spark optimalizálás egyszerű technikái

Az akkumulátorok a végrehajtók globális változói, amelyeket csak asszociatív és kommutatív művelettel lehet hozzáadni. Ezzel párhuzamosan hatékony lehet. Az akkumulátorok felhasználhatók számlálók végrehajtására (ugyanaz, mint a Map Reduce-ban) vagy más feladat, például az API-hívások nyomon követése.

alapértelmezés szerint a Spark támogatja a numerikus akkumulátorokat, de a programozóknak megvan az az előnye, hogy új típusokat támogatnak. A Spark biztosítja, hogy az egyes feladatok frissítése csak egyszer kerüljön alkalmazásra az akkumulátor változóira. Az átalakítások során a felhasználóknak tisztában kell lenniük az egyes feladatok frissítésével, mivel ezek többször is alkalmazhatók, ha a munka szakaszait újra végrehajtják.

Hive Bucketing Performance

Bucketing eredmények rögzített számú fájllal, mivel megadjuk a vödrök számát egy vödörrel. A Hive átvette a mezőt, kiszámította a hash-ot, és hozzárendelt egy rekordot az adott vödörhez. A Bucketing stabilabb, ha a mező magas kardinalitással, nagy adatfeldolgozással rendelkezik, és a rekordok egyenletesen oszlanak el az összes vödör között, míg a particionálás akkor működik, ha a particionáló mező kardinalitása alacsony.

A Bucketing csökkenti a fájlok rendezésének költségeit. Például, ha két táblához csatlakozunk, amelyek azonos számú vödröt tartalmaznak, a spark közvetlenül csatlakozik az adatokhoz, mint a már rendezett vödrök kulcsai. A vödör fájlok száma több partícióként több vödörbe számítható.

predikátum Pushdown optimalizálás

a predikátum pushdown egy olyan technika, amely csak a szükséges adatokat dolgozza fel. Predikátumok lehet alkalmazni, hogy SparkSQL meghatározásával szűrők, ahol körülmények között. Segítségével magyarázza parancsot lekérdezni tudjuk ellenőrizni a lekérdezés feldolgozási szakaszban. Ha a lekérdezési terv Pushedfiltert tartalmaz, akkor a lekérdezés úgy van optimalizálva, hogy csak a szükséges adatokat válassza ki, mivel minden predikátum True vagy False értéket ad vissza.

Ha a lekérdezési tervben nincs PushedFilter, akkor jobb a where feltétel leadása. Predikátum Pushdowns korlátozza a fájlok és partíciók száma, hogy a SparkSQL beolvassa lekérdezés közben, így csökkentve lemez I / O indul a memóriában Analytics. Lekérdezése adatok vödrök predikátum pushdowns eredmény gyorsabb kevesebb shuffle.

nulla Adatsorosítás/Deszerializáció az Apache Arrow használatával

Az Apache Arrow az analitikus lekérdező motorok memória futásidejű formátumaként használható. Arrow biztosítja az adatok sorosítása/deserialization zero shuffles keresztül megosztott memória. Arrow flight elküldi a nagy adatkészleteket a hálózaton keresztül. Arrow megvan a arrow fájlformátum, amely lehetővé teszi a nulla másolatú véletlen hozzáférést a lemezeken lévő adatokhoz. Az Arrow szabványos adatelérési réteggel rendelkezik az összes spark alkalmazáshoz.

csökkenti a serde műveletek költségeit az adatok keveréséhez, mivel közös helye van, ahol az összes adat található, nyíl – specifikus formátumban.

szemétgyűjtés hangolása a G1GC Collection használatával

a szemétgyűjtők hangolásakor először a G1 GC használatát javasoljuk a Spark alkalmazások futtatásához. A G1 szemétgyűjtő teljes egészében kezeli a növekvő halmokat, amelyeket általában a Spark-szal látnak. A G1 esetén kevesebb opcióra lesz szükség mind a nagyobb áteresztőképesség, mind az alacsonyabb késleltetés biztosításához. A különböző alkalmazások kiszámíthatatlan jellemzőinek és viselkedésének szabályozásához a GC tuningot a generált naplók szerint kell elsajátítani.

Ezt megelőzően más optimalizálási technikákat, például Streaming és valós idejű elemzési megoldásokat kell alkalmazni a program logikájában és kódjában. A G1GC legtöbbször segít optimalizálni a Spark alkalmazásokban gyakran előforduló folyamatok közötti szünetidőt, így megbízhatóbb rendszerrel csökkenti a munka végrehajtási idejét.

memóriakezelés és hangolás

mint tudjuk, az olyan számításokhoz, mint a keverés, a válogatás stb., A végrehajtási memóriát használják, míg a gyorsítótárazás céljából a belső adatokat is terjesztő tárolómemóriát használják. Lehetnek olyan esetek, amikor a feladatok nem használnak gyorsítótárat;ezért a végrehajtás során hiba lép fel a helyből. A gyorsítótárazott feladatok mindig kevesebb tárhelyet alkalmaznak, ahol az adatokat semmilyen végrehajtási követelmény nem engedi kilakoltatni. Ezen felül valós idejű Streaming alkalmazás Apache Spark lehet tenni.

beállíthatjuk a Sparkot.memória.frakció annak meghatározására, hogy mennyi JVM halomterületet használnak a Spark végrehajtási memóriához. Általában 60% Az alapértelmezett. Executor memória kell tartani a lehető legkisebb, mert ez vezethet késedelem JVM szemétgyűjtés. Ez a tény a kis végrehajtókra is alkalmazható, mivel több feladat is futtatható egyetlen JVM példányon.

Data Locality

Az Apache Sparkban a feldolgozási feladatokat úgy optimalizálják, hogy a végrehajtási kódot a feldolgozott adatokhoz közel helyezik el, az úgynevezett data locality-t. Néha a feldolgozási feladatnak várnia kell az adatok megszerzése előtt, mert az adatok nem állnak rendelkezésre. Azonban, amikor a szikra ideje.Helység.a várakozás lejár, a Spark kevésbé helyi szinten próbálkozik, azaz Helyi a csomóponthoz, hogy bármelyikre álljon.

a lemezek közötti adatátvitel nagyon költséges, ezért a legtöbb műveletet az adatok tartózkodási helyén kell végrehajtani. Segít betölteni csak kicsi, de szükséges az adatmennyiség mellett teszt-vezérelt fejlesztés Apache Spark.

a Kollokált illesztések használata

A Kollokált illesztések döntéseket hoznak az újraelosztásról és a műsorszórásról. Meghatározhatjuk a kis adatkészleteket, amelyeket több memóriablokkba kell helyezni a műsorszórás jobb felhasználása érdekében. Két adatkészlet illesztése közben a spark először rendezze mindkét adatkészlet adatait kulcs szerint, majd egyesítse őket.

de alkalmazhatunk rendezési partíciós kulcsot is, mielőtt csatlakoznánk hozzájuk, vagy létrehoznánk ezeket az adatkereteket az Apache Arrow architektúrában. Ez optimalizálja a lekérdezés futási idejét, mivel nem lenne felesleges függvényhívás a rendezéshez.

gyorsítótár a Sparkban

Az Apache Spark gyorsítótárazása GPU-val a legjobb módszer az Apache Spark optimalizálásához, amikor újra és újra szükségünk van néhány adatra. De mindig nem elfogadható az adatok gyorsítótárazása.

cache () RDD-t és DataFrames-t kell használnunk az alábbi esetek bármelyikében–

  • ha van egy iteratív hurok, például a gépi tanulási algoritmusokban.
  • amikor az RDD-t egy feladat vagy feladat többször is eléri.
  • amikor az RDD partíciók újbóli létrehozásának költsége magasabb.

Cache () és persist (StorageLevel.MEMORY_ONLY) használható egymás helyett. Minden RDD partíciót, amelyet kilakoltatnak a memóriából, újra fel kell építeni a forrásból, amely még mindig nagyon drága. Az egyik legjobb megoldás a persist (Tárolási szint) használata.MEMORY_AND_DISK_ONLY), amely az RDD partícióit a dolgozó helyi lemezére öntené. Ebben az esetben csak a munkavállaló helyi meghajtójáról kell adatokat szerezni, ami viszonylag gyors.

végrehajtó mérete

ha nagy memóriával rendelkező végrehajtókat futtatunk, gyakran túlzott késedelmet okoz a szemétgyűjtésben. A végrehajtónkénti magok számát végrehajtónkénti öt feladat alatt kell tartanunk. A túl kicsi végrehajtók nem jöttek ki, hogy hasznosak legyenek abban, hogy több munkát futtassanak egyetlen JVM-en.

például a broadcast változókat pontosan egyszer kell megismételni minden végrehajtó számára, ami több adatmásolatot eredményez.

Spark ablak funkció

az ablak funkció meghatároz egy keretet, amelyen keresztül kiszámolhatjuk a táblázat bemeneti sorait. Az egyes sorok szintjén. Minden sornak világos kerete lehet. Az ablakozás lehetővé teszi számunkra, hogy meghatározzuk az adatok ablakát az adatkeretben. Több sort is összehasonlíthatunk ugyanabban az adatkeretben.

beállíthatjuk az ablak idejét egy adott intervallumra, amely megoldja az adatfüggőség kérdését a korábbi adatokkal. Az Apache Beam-ben történő keverés kevésbé vonatkozik a korábban feldolgozott adatokra, mivel ezeket az adatokat megőrizzük az ablakintervallumhoz.

vízjel technika

A vízjel egy hasznos technika az Apache Spark optimalizálásában, amely korlátozza a rendszert a tervezés során, és segít megakadályozni, hogy felrobbanjon a futás közben. A vízjel két érvet vesz fel–

  • oszlop eseményidő és
  • küszöbidő, amely meghatározza, hogy mennyi ideig kell feldolgoznunk a késői adatokat

Az Apache Arrow architektúrában a lekérdezés automatikusan frissül, ha az adatok az előírt küszöbértéken belül vannak; ellenkező esetben a késleltetett adatok feldolgozása nem indul el. Emlékeznünk kell arra, hogy a teljes módot egymás mellett használhatjuk a vízjelekkel, mert a teljes mód először az összes adatot megőrzi a kapott táblához.

Adatsorosítás

Az Apache Spark optimalizálása olyan adatokon működik, amelyeket bizonyos felhasználási esetekben, például elemzéshez vagy csak az adatok mozgatásához kell feldolgoznunk. Ez az adatmozgás vagy elemzés jól elvégezhető, ha az adatok valamilyen jobban sorosított formátumban vannak. Az Apache Spark támogatja az adatok sorosítását a forrásnál vagy a rendeltetési helyen szükséges adatformátumok hatékony kezeléséhez. Alapértelmezés szerint az Apache Spark Java Serializációt használ, de támogatja a Kryo Serializációt is.

alapértelmezés szerint a Spark a Java ObjectOutputStream-jét használja az adatok sorosításához. A megvalósítás a java-n keresztül történhet.io.Sorosítható osztály. Az objektumokat bájtfolyamba kódolja. Könnyű kitartást és rugalmasságot biztosít. De lassúvá válik, mivel hatalmas sorosított formátumokhoz vezet minden egyes osztályhoz, amelyben használják. Spark támogatja Kryo Serialization library (v4) a Serialization objektumok közel 10x gyorsabb, mint a Java Serialization, mert kompaktabb, mint a Java.

Apache Spark Optimalizálás: Egy átfogó megközelítés

Apache Spark, egy nyílt forráskódú elosztott számítástechnikai motor, jelenleg a legnépszerűbb keretrendszer a memóriában kötegelt feldolgozáshoz, amely szintén támogatja a valós idejű streaminget. Fejlett lekérdezés-optimalizáló és végrehajtó motorjával az Apache Spark optimalizációs technikák nagyon hatékonyan képesek feldolgozni és elemezni a nagy adatkészleteket. Az Apache Spark Join optimalizálási technikák gondos hangolás nélküli futtatása azonban ronthatja a teljesítményt. Ha szeretné kihasználni az Apache Spark alkalmazás teljesítményét, akkor nézze meg a felügyelt Apache Spark szolgáltatásainkat.

kategóriák :

Big Data Fejlesztés, Big Data Megoldások, Streaming Adatelemzés,

Megosztás :

You might also like

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.