Předpokládejme, že máte situaci, kde jeden datový soubor je velmi malý a další sada dat je poměrně velká, a chcete provést operaci spojení mezi těmito dvěma. V takovém případě bychom měli jít na broadcast join, aby se malá sada dat vešla do vaší proměnné vysílání. Syntaxe pro použití proměnné vysílání je df1.připojit(vysílání (df2)). Zde máme druhý datový rámec, který je velmi malý, a tento datový rámec udržujeme jako proměnnou vysílání.
kód:
val broadcastVar = sc.broadcast (pole(1, 2, 3))
broadcastVar.hodnota
res0: Array = Array(1, 2, 3)
val accum = sc.longAccumulator („Můj akumulátor“)
sc.parallelize (pole(1, 2, 3, 4)).foreach (x => accum.přidat (x))
accum.hodnota
res2: Long = 10
Cache a Persist
- Spark poskytuje své vlastní mechanismy ukládání do mezipaměti, jako jsou persist() a cache().
- cache () a persist() uloží datovou sadu do paměti.
- pokud máte malou datovou sadu, která musí být ve vašem programu použita vícekrát, ukládáme tuto datovou sadu do mezipaměti.
- Cache () – vždy v paměti
- Persist () – paměť a disky
Spark poskytuje svůj vlastní mechanismus ukládání do mezipaměti, jako je přetrvávat a ukládání do mezipaměti. Mechanismy přetrvávají a mezipaměti uloží datovou sadu do paměti, kdykoli existuje požadavek, kde máte malou datovou sadu a tato datová sada se ve vašem programu používá vícekrát. Pokud použijeme RDD.Cache () bude vždy ukládat data do paměti, a pokud použijeme RDD.Persist() pak některé části dat mohou být uloženy do paměti některé mohou být uloženy na disku.
5. Bykey operace
- Shuffles jsou těžké operace, které spotřebovávají hodně paměti.
- při kódování v Spark, uživatel by se měl vždy snažit, aby se zabránilo náhodnému provozu.
- vysoké míchání může vést k chybě OutOfMemory; aby se takové chybě zabránilo, může uživatel zvýšit úroveň paralelismu.
- použijte reduceByKey místo groupByKey.
- rozdělte data správně.
jak víme během naší transformace Spark, máme mnoho operací ByKey. Bykey operace generovat hodně zamíchat. Shuffles jsou těžké operace, protože spotřebovávají hodně paměti. Při kódování v Spark, uživatel by se měl vždy snažit, aby se zabránilo náhodnému provozu, protože operace shuffle sníží výkon. Pokud je vysoká míchání pak uživatel může dostat chybu z paměti. V tomto případě, aby se zabránilo této chybě, uživatel by měl zvýšit úroveň paralelismu. Místo seskupení, uživatel by měl jít na reduceByKey protože groupByKey vytváří hodně míchání, které brání výkon, zatímco reduceByKey není náhodné údaje stejně. Proto je reduceByKey rychlejší ve srovnání se groupByKey. Kdykoli je použita jakákoli operace ByKey, měl by uživatel správně rozdělit data.
6. Výběr formátu souboru
- Spark podporuje mnoho formátů, jako jsou CSV, JSON, XML, parkety, ORC, AVRO atd.
- Spark jobs lze optimalizovat výběrem parketového souboru s rychlou kompresí, která poskytuje vysoký výkon a nejlepší analýzu.
- parkety soubor je nativní Spark, který nese metadata spolu s jeho zápatí.
Spark přichází s mnoha formáty souborů, jako jsou CSV, JSON, XML, parkety, ORC, AVRO a další. Spark job lze optimalizovat výběrem parketového souboru s rychlou kompresí. Parkety soubor je nativní Zapalovací které nesou metadata spolu s jeho zápatí, jak víme, parkety soubor je nativní jiskra, což je v binárním formátu a spolu s daty také nést zápatí je také s sebou nese metadata a jeho zápatí, takže vždy, když vytvoříte nějaké parketová souboru, uvidíte .soubor metadat ve stejném adresáři spolu s datovým souborem.
kód:
val peopleDF = spark.přečíst.json („examples/src/main/resources / people.json“)
peopleDF.napsat.parkety („lidé.parkety“)
val parquetFileDF = spark.přečíst.parkety („lidé.parkety“)
val usersDF = spark.přečíst.formát („avro“).load („příklady / src / hlavní / zdroje / uživatelé.avro“)
usersDF.vyberte („jméno“, „favorite_color“).napsat.formát („avro“).uložit („namesAndFavColors.avro“)
Garbage Collection Tuning
- JVM garbage collection může být problém, pokud máte velkou sbírku nepoužívaných objektů.
- prvním krokem v ladění GC je shromažďování statistik výběrem-podrobného při odesílání jiskrových úloh.
- v ideální situaci se snažíme udržet režijní náklady GC < 10% paměti haldy.
Jak víme, pod naše Jiskra práci běží na JVM platformy, takže JVM sběr odpadků může být problematické, když máte velkou sbírku nevyužitý objekt tak, první krok při ladění sběru odpadků je sbírat statika vyberete možnost ve svém Jiskra předložit podrobné. Obecně platí, že v ideální situaci bychom měli mít naši paměť sběru odpadků méně než 10% paměti haldy.
8. Úroveň paralelismu
- paralelismus hraje velmi důležitou roli při ladění jiskrových úloh.
- každý oddíl ~ úkol vyžaduje jedno jádro pro zpracování.
- Existují dva způsoby, jak zachovat rovnoběžnost:
- Rozdělení: Dává stejný počet příček s vysokou míchání
- Splývají: Obecně snižuje počet oblastí s méně míchání.
v jakémkoli distribuovaném prostředí hraje paralelismus při ladění vaší Spark úlohy velmi důležitou roli. Kdykoli je odeslána úloha Spark, vytvoří stůl, který bude obsahovat fáze,a úkoly závisí na oddílu, takže každý oddíl nebo úkol vyžaduje pro zpracování jediné jádro systému. Existují dva způsoby, jak zachovat paralelismus-rozdělení a splynutí. Kdykoli použijete metodu rozdělení, dává vám stejný počet oddílů, ale hodně se zamíchá, takže není vhodné jít na rozdělení, když chcete bičovat všechna data. Coalesce obecně sníží počet oddílů a vytvoří méně míchání dat.
tyto faktory pro optimalizaci jisker, pokud jsou správně použity, mohou –