8 Teljesítményoptimalizálási technikák a Spark

használatával tegyük fel, hogy van olyan helyzet, amikor az egyik adatkészlet nagyon kicsi, a másik adatkészlet pedig meglehetősen nagy, és a kettő közötti összekapcsolási műveletet szeretné végrehajtani. Ebben az esetben a broadcast csatlakozásra kell mennünk, hogy a kis adatkészlet beleférjen a broadcast változóba. A broadcast változó használatának szintaxisa df1.csatlakozik(adás (df2)). Itt van egy második adatkeret, amely nagyon kicsi, és ezt az adatkeretet broadcast változóként tartjuk meg.

Kód:

val broadcastVar = sc.broadcast (tömb(1, 2, 3))

broadcastVar.érték

res0: Array = Array(1, 2, 3)

val accum = sc.longAccumulator(“saját akkumulátor”)

sc.parallelize (Array(1, 2, 3, 4)).foreach (x = > accum.hozzáad (x))

accum.value

res2: Long = 10

Cache és Persist

  • A Spark saját gyorsítótárazási mechanizmusokat biztosít, mint például a persist() és a cache().
  • cache() és persist() tárolja az adatkészletet a memóriában.
  • ha van egy kis adatkészlet, amelyet többször kell használni a programban, gyorsítótárazzuk azt az adatkészletet.
  • Cache() – mindig a memóriában
  • Persist() – memória és lemezek

a Spark saját gyorsítótárazási mechanizmust biztosít, mint például a Persist és a Caching. A Persist és a gyorsítótár mechanizmusok az adatkészletet a memóriába tárolják, amikor szükség van rá, ahol van egy kis adatkészlet, és ezt az adatkészletet többször használják a programban. Ha RDD-t alkalmazunk.Cache() mindig tárolja az adatokat a memóriában, és ha alkalmazzuk RDD.Persist () ezután az adatok egy része tárolható a memóriában, néhány tárolható a lemezen.

5. ByKey művelet

  • A keverések nehéz műveletek, amelyek sok memóriát fogyasztanak.
  • A Spark kódolása közben a Felhasználónak mindig meg kell próbálnia elkerülni a véletlenszerű működést.
  • A nagy keverés OutOfMemory hibát okozhat; az ilyen hiba elkerülése érdekében a felhasználó növelheti a párhuzamosság szintjét.
  • használja a reduceByKey-t a groupByKey helyett.
  • helyesen particionálja az adatokat.

mint tudjuk, a Spark átalakítása során sok ByKey műveletünk van. ByKey műveletek generál sok shuffle. A keverés nehéz művelet, mert sok memóriát fogyasztanak. A Spark kódolása közben a Felhasználónak mindig meg kell próbálnia elkerülni a véletlenszerű műveletet, mert a véletlenszerű művelet rontja a teljesítményt. Ha nagy a keverés, akkor a felhasználó a hibát a memóriából kaphatja meg. Ebben az esetben a hiba elkerülése érdekében a felhasználónak növelnie kell a párhuzamosság szintjét. A groupBy helyett a Felhasználónak a reduceByKey-t kell választania, mert a groupByKey sok keverést hoz létre, ami akadályozza a teljesítményt, míg a reduceByKey nem keveri annyira az adatokat. Ezért a reduceByKey gyorsabb, mint a groupByKey. Bármely ByKey művelet használatakor a felhasználónak helyesen kell particionálnia az adatokat.

6. Fájlformátum kiválasztása

  • A Spark számos formátumot támogat, például CSV, JSON, XML, parketta, ORC, AVRO stb.
  • A Spark feladatok optimalizálhatók a parketta fájl kiválasztásával, amely gyors tömörítéssel biztosítja a nagy teljesítményt és a legjobb elemzést.
  • parketta fájl natív Spark amely hordozza a metaadatok együtt a lábléc.

a Spark számos fájlformátummal rendelkezik, például CSV, JSON, XML, parketta, ORC, AVRO stb. A Spark feladat optimalizálható a parketta fájl kiválasztásával, lendületes tömörítéssel. Parketta fájl natív Spark, amely magában hordozza a metaadatok együtt a lábléc, mint tudjuk parketta fájl natív spark amely a bináris formátumban, valamint az adatokat is hordoz a lábléc ez is hordozza a metaadatok és a lábléc, így amikor bármilyen parketta fájlt, látni fogja .metaadatfájl ugyanabban a könyvtárban az adatfájllal együtt.

Kód:

val peopleDF = spark.olvasd.json (“példák / src / main/resources / people.json”)

peopleDF.írj.parketta (“emberek.parketta”)

val parquetFileDF = szikra.olvasd.parketta (“emberek.parketta”)

val usersDF = spark.olvasd.formátum (“avro”).terhelés (“példák / src / main/resources / users.avro”)

usersDF.válassza a(“név”, “favorite_color”) lehetőséget.írj.formátum (“avro”).Mentés (“namesAndFavColors.avro”)

szemétgyűjtés Tuning

  • A JVM szemétgyűjtés problémát jelenthet, ha nagy a nem használt objektumok gyűjteménye.
  • a GC tuning első lépése a statisztikák gyűjtése a – verbose kiválasztásával a spark feladatok benyújtása közben.
  • ideális helyzetben megpróbáljuk a GC általános költségeit < a heap memória 10% – ában tartani.

mint tudjuk, alatta a Spark feladat fut a JVM platform, így JVM szemétgyűjtés lehet problematikus, ha van egy nagy gyűjteménye egy fel nem használt objektum, így az első lépés a tuning szemétgyűjtés gyűjteni statika kiválasztásával a lehetőséget a Spark submit verbose. Általában ideális helyzetben a szemétgyűjtő memóriánkat a halom memória kevesebb mint 10% – ánál kell tartanunk.

8. A párhuzamosság szintje

  • a párhuzamosság nagyon fontos szerepet játszik a spark munkák hangolásakor.
  • minden partíció ~ feladathoz egyetlen mag szükséges a feldolgozáshoz.
  • kétféle módon lehet fenntartani a párhuzamosságot:
    • Újraparticionálás: egyenlő számú partíciót ad nagy keveréssel
    • összeolvadás: általában csökkenti a partíciók számát kevesebb keveréssel.

bármely elosztott környezetben a párhuzamosság nagyon fontos szerepet játszik a Spark munka hangolásakor. Amikor egy Spark jobot elküldenek, létrehozza az asztalt, amely szakaszokat tartalmaz, és a feladatok a partíciótól függenek, így minden partíció vagy feladat a rendszer egyetlen magját igényli a feldolgozáshoz. A párhuzamosság fenntartásának két módja van: a felosztás és az összeolvadás. Amikor az Újraparticionálási módszert alkalmazza, egyenlő számú partíciót ad, de sokat keveredik, ezért nem tanácsos az Újraparticionálás, ha az összes adatot meg akarja csapni. A Coalesce általában csökkenti a partíciók számát, és kevesebb adatcserét eredményez.

ezek a tényezők a szikra optimalizálásához, ha megfelelően használják, akkor –



+