Apache Spark Technik Optimalizace a Ladění Výkonu

Chandan Gaur|Big Data Engineering|05,Oct,2020

Co je Apache Spark?

Apache, v roce 2012, popsal Odolné Distribuované datové sady (RDD v Apache Spark) nadace s read-only Distribuovaných datových souborů v distribuovaných clusterů, a označil to jako Apache Spark. Později zavedou Dataset API a poté Dataframe API pro dávkové a strukturované streamování dat. Tento článek uvádí nejlepší techniky optimalizace Spark Apache.

Apache Spark je rychlá clusterová výpočetní platforma vyvinutá pro provádění více výpočtů a zpracování streamů. Spark zvládne širokou škálu pracovních zátěží ve srovnání s tradičními systémy, které vyžadují spuštění a podporu více systémů. Potrubí pro analýzu dat je usnadněno Spark v kombinaci různých typů zpracování, které jsou nezbytné pro výrobu. Apache Spark je vytvořen pro práci s externím správcem clusteru, jako je příze nebo jeho samostatný Správce.

vlastnosti Apache Spark

některé funkce Apache Spark patří:-

  • jednotná platforma pro psaní velkých datových aplikací.
  • snadnost vývoje.
  • navrženo tak, aby bylo vysoce přístupné.
  • Spark může běžet nezávisle. Tak to dává flexibilitu.
  • Nákladově Efektivní.

XenonStack poskytuje analytické Služby a Řešení pro Real-time a Datový tok Příjmu, zpracování a analýzu datové proudy rychle a efektivně pro Internet Věcí, Monitoring, Preventivní a Prediktivní Údržbu.

z článku, Streaming a real-Time analytické služby

pochopení toho, jak Apache Spark optimalizace funguje?

abychom pochopili, jak Apache Spark optimization funguje, musíte nejprve pochopit jeho architekturu a v následující části to vypracujeme.

architektura Apache Spark

Run-time architektura Spark se skládá ze tří částí –

Jiskra Ovladač (Master Process)

Zapalovací Ovladač převádí programy do úkolů a harmonogramu úkolů pro Exekutory. Plánovač úloh je součástí ovladače a pomáhá distribuovat úkoly exekutorům.

Správce Spark clusteru

Správce clusteru je jádro v Spark, které umožňuje spouštět exekutory a někdy mohou být spuštěny i ovladače. Spark Scheduler naplánuje akce a úlohy v aplikaci Spark v FIFO způsobem na správce clusteru sám. Měli byste si také přečíst o Apache Airflow.

exekutoři (Slave procesy)

exekutoři jsou jednotlivé entity, na kterých běží jednotlivé úlohy úlohy. Exekutoři budou vždy běžet až do životního cyklu aplikace spark, jakmile budou spuštěny. Neúspěšní exekutoři exekuci nezastaví.

RDD (Resilient Distributed Datasets)

RDD je distribuovaná sbírka neměnných datových souborů na distribuovaných uzlech clusteru. RDD je rozdělen na jeden nebo více oddílů. RDD je jádrem spark jako jejich distribuce mezi různými uzly clusteru, který využívá datovou lokalitu. Pro dosažení paralelismu uvnitř aplikace jsou oddíly jednotkami. Rozdělení nebo sloučení transformací může pomoci udržet počet oddílů. Přístup k datům je optimalizován s využitím RDD míchání. Protože Spark je blízko k datům, odesílá data přes různé uzly a podle potřeby vytváří požadované oddíly.

DAG (Directed Acyclic Graph)

Spark má tendenci generovat graf operátora, když zadáme náš kód do konzoly Spark. Když je spuštěna akce pro Spark RDD, Spark předloží tento graf dagschedulerovi. To pak rozděluje tyto grafy operátor na fázích úkolu uvnitř DAGScheduler. Každý krok může obsahovat úlohy založené na několika oddílech příchozích dat. Dagscheduler potrubí tyto jednotlivé grafy operátor dohromady. Například, map operátor grafy plán pro jednostupňové a tyto fáze přenést na. Plánovač úloh ve Správci clusterů pro jejich provedení. To je úkol práce nebo vykonavatelů provádět tyto úkoly na slave.

distribuované zpracování pomocí oddílů efektivně

zvýšení počtu vykonavatelů na klastrech také zvyšuje paralelismus při zpracování Spark úlohy. K tomu však musíme mít dostatečné informace o tom, jak by tato data byla distribuována mezi tyto exekutory prostřednictvím rozdělení. RDD je užitečné pro tento případ se zanedbatelným provozem pro míchání dat mezi těmito exekutory. Jeden může přizpůsobit rozdělení pro pár RDD (RDD s páry klíč-hodnota). Spark zajišťuje, že sada klíčů se vždy objeví společně ve stejném uzlu, protože v tomto případě neexistuje žádná explicitní kontrola.

Apache Spark security pomáhá autentizaci prostřednictvím sdíleného tajemství. Ověřování Spark je konfigurační parametr, pomocí kterého lze konfigurovat ověřování. Je to parametr, který kontroluje, zda protokoly komunikace spark provádějí ověřování pomocí sdíleného tajemství nebo ne.

Z Článku, Apache Spark Zabezpečení

Chyb se vyvarovat při psaní Jiskra Aplikace

reduceByKey nebo groupByKey

Oba groupByKey a reduceByKey produkovat stejnou odpověď, ale koncept výsledky jsou různé. reduceByKey je nejvhodnější pro velké datové sady, protože v Spark kombinuje výstup se sdíleným klíčem pro každý oddíl před zamícháním dat. Zatímco na druhé straně, groupByKey zamíchá všechny dvojice klíč-hodnota. GroupByKey způsobuje zbytečné míchání a přenos dat po síti.

Udržujte požadovanou velikost bloků shuffle

ve výchozím nastavení nemůže blok Spark shuffle překročit 2 GB. Lepší využití je zvýšit oddíly a snížit jeho kapacitu na ~128 MB na oddíl, který sníží velikost shuffle bloku. Můžeme použít rozdělení nebo splynutí v běžných aplikacích. Velké oddíly zpomalují proces kvůli limitu 2 GB a několik oddílů neumožňuje škálovat úlohu a dosáhnout paralelismu.

formáty souborů a oddělovače

výběr správných formátů souborů pro každou specifikaci související s daty je bolest hlavy. Jeden musí moudře zvolit Formát dat pro typy požití, střední typ a konečný typ výstupu. Můžeme také klasifikovat formáty datových souborů pro každý typ několika způsoby, například můžeme použít formát souboru AVRO pro ukládání mediálních dat, protože Avro je nejlépe Optimalizováno pro binární data než parkety. Parkety lze použít pro ukládání informací metadat, protože jsou vysoce komprimované.

Malé Datové Soubory,

Vysílání je technika, aby zatížení malých datových souborů nebo datových souborů do Bloků paměti tak, že mohou být spojeny s více masivní soubory dat s menšími nároky míchání data. Například, můžeme ukládat Malé soubory, do n počet Bloků a Velké datové soubory mohou být spojeny, aby tyto datové Bloky v budoucnosti jako Velké datové soubory mohou být rozděleny mezi tyto bloky v paralelním módu.

no Monitoring Job Stages

DAG je datová struktura používaná ve Spark, která popisuje různé fáze úloh ve formátu grafu. Většina vývojářů píše a provádí kód, ale sledování pracovních úkolů je nezbytné. Tohoto monitorování lze nejlépe dosáhnout řízením DAG a snížením fází. Práce s 20 kroky je prodloužena ve srovnání s prací s 3-4 etapami.

ByKey, rozdělení nebo jakékoli jiné operace, které vyvolávají zamíchá

ve Většině případů potřebujeme, aby se zabránilo zamíchá, stejně jako můžeme jako datové zamíchá přes mnoho, a někdy to se stává velmi složité získat Škálovatelnost z těch zamíchá. GroupByKey může být cenným aktivem, ale jeho potřeba musí být popsána jako první.

výztužné učení

výztužné Učení není jen koncept pro získání lepšího prostředí strojového učení,ale také pro lepší zpracování rozhodnutí. Člověk musí použít hluboké zesílení učení v spark, pokud je model přechodu a model odměny postaven správně na datových sadách a také agenti jsou dostatečně schopni odhadnout výsledky.

Apache Spark optimalizace faktory a techniky

jednou z nejlepších vlastností Apache Spark optimalizace je to pomáhá pro výpočty v paměti dat. Úzkým hrdlem pro tyto výpočty optimalizace jisker mohou být CPU, paměť nebo jakýkoli zdroj v clusteru. V takových případech může vzniknout potřeba serializovat data, snížit paměť. Tyto faktory pro spark optimalizace, je-li správně používány, může–

  • Odstranit dlouhotrvající práci proces
  • Korekce výkonu motoru
  • Zlepšuje výkon čas tím, že řízení zdrojů

13 Jednoduché Techniky pro Apache Spark Optimalizace

Akumulátory jsou globální proměnné, exekutory, které mohou být přidány pouze přes asociativní a komutativní operace. Může tedy být efektivní paralelně. Akumulátory mohou být použity k implementaci čítačů (stejně jako v Map Reduce) nebo jiné úlohy, jako je sledování volání API.

Ve výchozím nastavení Spark podporuje numerické akumulátory, ale programátoři mají tu výhodu, že přidávají podporu pro nové typy. Spark zajišťuje, že aktualizace každého úkolu bude použita pouze jednou na proměnné akumulátoru. Během transformací, uživatelé by měli mít povědomí o aktualizaci každého úkolu, protože tyto mohou být použity více než jednou, pokud jsou fáze úlohy znovu provedeny.

Hive Bucketing Performance

Bucketing výsledky s pevným počtem souborů, jak určíme počet kbelíků s kbelíkem. Úl vzal pole, vypočítat hash a přiřadit záznam k tomuto konkrétnímu kbelíku. Bucketing je více stabilní, když pole má vysokou mohutnost, Velká Zpracování Dat a záznamy jsou rovnoměrně rozděleny mezi všechny kbelíky vzhledem k tomu, že rozdělení funguje, když mohutnost rozdělení pole je nízká.

Bucketing snižuje režii třídění souborů. Pokud například spojujeme dvě tabulky, které mají stejný počet kbelíků, spark připojí data přímo jako klíče již tříděné kbelíky. Počet kbelíkových souborů lze vypočítat jako několik oddílů do několika kbelíků.

Predikát Zásobníkových Optimalizace

Predikát zásobníkových je technika ke zpracování pouze požadovaná data. Predikáty lze aplikovat na SparkSQL definováním filtrů v podmínkách where. Pomocí příkazu explain k dotazu můžeme zkontrolovat fáze zpracování dotazu. Pokud plán dotazu obsahuje PushedFilter, je dotaz optimalizován tak, aby vybral pouze požadovaná data, protože každý predikát vrací True nebo False.

pokud není v plánu dotazu nalezen žádný PushedFilter, je lepší odevzdat podmínku where. Predikát Pushdowns omezuje počet souborů a oddílů, které sparksql čte při dotazování, čímž se snižuje disk I / O začíná v paměti Analytics. Dotazování na data v kbelících s predikátovými pushdowns produkují výsledky rychleji s menším shuffle.

Zero Data Serialization / Deserialization using Apache Arrow

Apache Arrow se používá jako formát běhu v paměti pro analytické dotazovací motory. Arrow poskytuje data serializace / deserializace nula zamíchá přes sdílenou paměť. Arrow flight posílá velké datové soubory po síti. Arrow má formát souboru arrow, který umožňuje náhodný přístup k datům na discích s nulovou kopií. Arrow má standardní vrstvu pro přístup k datům pro všechny aplikace spark.

snižuje režii pro operace SerDe pro míchání dat, protože má společné místo, kde jsou všechna data umístěna, a ve formátu specifickém pro šipky.

Garbage Collection Tuning pomocí G1gc Collection

při ladění garbage collectors nejprve doporučujeme použít G1 GC ke spuštění aplikací Spark. Sběrač odpadků G1 zcela zpracovává rostoucí hromady, které jsou běžně vidět se Spark. S G1 bude zapotřebí méně možností, aby byla zajištěna jak vyšší propustnost, tak nižší latence. Pro řízení nepředvídatelných charakteristik a chování různých aplikací je třeba zvládnout ladění GC podle generovaných protokolů.

před tím musí být v logice a kódu programu použity další optimalizační techniky, jako je streamování a analytická řešení v reálném čase. G1gc většinou pomáhá optimalizovat dobu pauzy mezi procesy, které jsou v aplikacích Spark poměrně často, a tím snižuje dobu provádění úlohy pomocí spolehlivějšího systému.

Správa Paměti a Ladění

Jak víme, že pro výpočty, jako je míchání, třídění a tak dále, Exekuce paměť je použita vzhledem k tomu, že pro účely ukládání do mezipaměti ukládání paměti, že také rozšíří interní data. Mohou existovat některé případy, kdy úlohy nepoužívají žádnou mezipaměť; proto případy chyby v prostoru během provádění. Úlohy uložené v mezipaměti vždy používají méně úložného prostoru, kde data nemohou být vystěhována žádným požadavkem na provedení. Kromě toho lze provést aplikaci pro streamování v reálném čase s Apache Spark.

můžeme nastavit jiskru.paměť.frakce určit, kolik JVM haldy prostor se používá pro spuštění Spark paměti. Obvykle je 60% výchozí. Paměť exekutora musí být udržována co nejméně, protože to může vést ke zpoždění sběru odpadu JVM. Tato skutečnost je také použitelná pro malé exekutory, protože na jedné instanci JVM může běžet více úkolů.

Data Lokalitě

V Apache Spark, Zpracování úkolů jsou optimalizovány umístěním provedení kód do zpracovaných dat, tzv. data lokalitě. Někdy musí úkol zpracování počkat, než se dostanou data, protože data nejsou k dispozici. Nicméně, když čas jiskry.lokalita.čekání vyprší, Spark se snaží méně místní úrovni, tj., místní k uzlu do stojanu na libovolné.

přenos dat mezi disky je velmi nákladný, takže většina operací musí být provedena v místě, kde jsou data umístěna. Pomáhá načíst pouze malé, ale vyžaduje množství dat spolu s testem řízeným vývojem pro Apache Spark.

pomocí Collocated Joins

Collocated joins rozhodují o redistribuci a vysílání. Můžeme definovat malé datové sady, které mají být umístěny do více bloků paměti pro dosažení lepšího využití vysílání. Při použití spojení na dvou datových sadách spark nejprve třídí data obou datových sad podle klíče a sloučí je.

ale můžeme také použít klíč řazení oddílů před jejich spojením nebo při vytváření těchto datových rámců v architektuře šipek. Tím se optimalizuje doba běhu dotazu, protože by k třídění nebyly žádné zbytečné volání funkcí.

ukládání do mezipaměti v Spark

ukládání do mezipaměti v Apache Spark s GPU je nejlepší technikou pro optimalizaci Apache Spark, když potřebujeme nějaká data znovu a znovu. Vždy však není přijatelné ukládat data do mezipaměti.

musíme použít cache () RDD a DataFrames v některém z následujících případů–

  • pokud existuje iterační smyčka, například v algoritmech strojového učení.
  • je-li RDD přistupováno vícekrát v jedné úloze nebo úkolu.
  • když jsou náklady na generování oddílů RDD opět vyšší.

Cache () a persist (StorageLevel.MEMORY_ONLY) lze použít místo sebe. Každý oddíl RDD, který se vystěhuje z paměti, musí být znovu sestaven ze zdroje, který je stále velmi drahý. Jedním z nejlepších řešení je použití persist (úroveň úložiště.MEMORY_AND_DISK_ONLY), který by rozlil oddíly RDD na místní disk pracovníka. Tento případ vyžaduje pouze získání dat z místního disku pracovníka, což je relativně rychlé.

Velikost exekutora

když spustíme exekutory s vysokou pamětí, často to vede k nadměrnému zpoždění při sběru odpadků. Musíme udržet počet jader na exekutora pod pěti úkoly na exekutora. Příliš malé exekutoři nevyšel být užitečné, pokud jde o spuštění více pracovních míst na jednom JVM.

například proměnné vysílání musí být replikovány pro každého exekutora přesně jednou, což bude mít za následek více kopií dat.

funkce jiskřiště

Funkce okna definuje rámec, pomocí kterého můžeme vypočítat vstupní řádky tabulky. Na úrovni jednotlivých řádků. Každý řádek může mít jasný rámec. Okno nám umožňuje definovat okno pro data v datovém rámci. Můžeme porovnat více řádků ve stejném datovém rámci.

můžeme nastavit čas okna na určitý interval, který vyřeší problém závislosti dat s předchozími daty. Míchání v paprsku Apache je méně u dříve zpracovaných dat, protože tato data uchováváme pro interval okna.

technika vodoznaků

Vodoznak je užitečná technika v optimalizaci Apache Spark, která omezuje systém podle návrhu a pomáhá zabránit jeho explozi během běhu. Vodoznak přijímá dva argumenty–

  • Sloupec pro čas události a
  • práh času, které určují, jak dlouho jsme povinni zpracovat pozdě dat

dotaz v Apache Arrow Architektura bude automaticky aktualizována, pokud data spadají do stanovené prahové hodnoty; v opačném případě, bez zpracování, spustí se za to zpoždění data. Je třeba si uvědomit, že můžeme použít kompletní režim vedle sebe s vodoznakem, protože plný režim nejprve přetrvává všechna data do výsledné tabulky.

serializace dat

Apache Spark optimization pracuje na datech, které potřebujeme zpracovat pro některé případy použití, jako je analytika nebo jen pro pohyb dat. Tento pohyb dat nebo analytiky lze dobře provést, pokud jsou data v nějakém lépe serializovaném formátu. Apache Spark podporuje serializaci dat pro efektivní správu datových formátů potřebných u zdroje nebo cíle. Ve výchozím nastavení Apache Spark používá serializaci Java, ale také podporuje serializaci Kryo.

Ve výchozím nastavení Spark používá Java ObjectOutputStream k serializaci dat. Implementace může být prostřednictvím java.io.Serializovatelná třída. Kóduje objekty do proudu bajtů. Poskytuje lehkou vytrvalost a flexibilitu. Stává se však pomalým, protože vede k obrovským serializovaným formátům pro každou třídu, ve které se používá. Spark podporuje Kryo Serialization library (v4) pro serializaci objektů téměř 10x rychleji než Java serializace, protože je kompaktnější než Java.

Apache Spark Optimalizace: Komplexní přístup

Apache Spark, open-source distribuovaný výpočetní engine, je v současné době nejoblíbenějším rámcem pro dávkové zpracování v paměti, který také podporuje streamování v reálném čase. S pokročilým optimalizátorem dotazů a spouštěcím motorem mohou techniky optimalizace Spark Apache zpracovávat a analyzovat velké datové soubory velmi efektivně. Spuštění optimalizačních technik Apache Spark Join bez pečlivého ladění však může snížit výkon. Pokud chcete využít sílu aplikace Apache Spark, podívejte se na naše spravované služby Apache Spark.

Kategorie :

Big Data Development, Big Data Solutions, Streaming Data Analytics,

Podíl:

You might also like

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.