Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum

Před časem jsme stáli před otázkou výběru ETL nástroje pro práci s Big Data. Dříve používané řešení Informatica BDM nám nevyhovovalo z důvodu omezené funkčnosti. Jeho použití bylo omezeno na rámec pro spouštění příkazů spark-submit. Na trhu nebylo mnoho analogů, které by v zásadě uměly pracovat s objemem dat, se kterými se denně potýkáme. Nakonec jsme zvolili Ab Initio. Během pilotních ukázek produkt vykazoval velmi vysokou rychlost zpracování dat. O Ab Initio v ruštině nejsou téměř žádné informace, a tak jsme se rozhodli promluvit o našich zkušenostech na Habré.

Ab Initio má mnoho klasických i neobvyklých transformací, jejichž kód lze rozšířit pomocí vlastního jazyka PDL. Pro malou firmu bude takový výkonný nástroj pravděpodobně přehnaný a většina jeho schopností může být drahá a nevyužitá. Ale pokud se vaše měřítko blíží Sberovu, pak pro vás může být zajímavé Ab Initio.

Pomáhá podniku shromažďovat znalosti globálně a rozvíjet ekosystém a vývojáři zlepšit své dovednosti v ETL, zlepšit své znalosti v prostředí shell, poskytuje příležitost ovládat jazyk PDL, poskytuje vizuální obraz o procesech načítání a zjednodušuje vývoj. díky množství funkčních komponent.

V tomto příspěvku budu hovořit o schopnostech Ab Initio a poskytnu srovnávací charakteristiky jeho práce s Hive a GreenPlum.

  • Popis frameworku MDW a práce na jeho přizpůsobení pro GreenPlum
  • Ab Initio srovnání výkonu mezi Hive a GreenPlum
  • Práce Ab Initio s GreenPlum v režimu Near Real Time


Funkčnost tohoto produktu je velmi široká a vyžaduje hodně času na studium. Při správných pracovních dovednostech a správném nastavení výkonu jsou však výsledky zpracování dat velmi působivé. Použití Ab Initio pro vývojáře může poskytnout zajímavou zkušenost. Toto je nový pohled na vývoj ETL, hybrid mezi vizuálním prostředím a vývojem stahování ve skriptovacím jazyce.

Firmy rozvíjejí své ekosystémy a tento nástroj se hodí více než kdy jindy. S Ab Initio můžete nashromáždit znalosti o svém současném podnikání a využít tyto znalosti k rozšíření starých a otevření nových podniků. Alternativy k Ab Initio zahrnují vizuální vývojová prostředí Informatica BDM a nevizuální vývojová prostředí Apache Spark.

Popis Ab Initio

Ab Initio, stejně jako ostatní nástroje ETL, je kolekcí produktů.

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum

Ab Initio GDE (Graphical Development Environment) je prostředí pro vývojáře, ve kterém konfiguruje transformace dat a propojuje je s datovými toky ve formě šipek. V tomto případě se taková množina transformací nazývá graf:

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum

Vstupní a výstupní spojení funkčních komponent jsou porty a obsahují pole vypočítaná v rámci transformací. Několik grafů spojených toky ve formě šipek v pořadí jejich provedení se nazývá plán.

Funkčních komponent je několik stovek, což je hodně. Mnohé z nich jsou vysoce specializované. Možnosti klasických transformací v Ab Initio jsou širší než v jiných ETL nástrojích. Například Join má více výstupů. Kromě výsledku připojení datových sad můžete získat výstupní záznamy vstupních datových sad, jejichž klíče nebylo možné propojit. Můžete také získat odmítnutí, chyby a protokol transformační operace, který lze číst ve stejném sloupci jako textový soubor a zpracovávat s jinými transformacemi:

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum

Nebo můžete například zhmotnit přijímač dat ve formě tabulky a číst z ní data ve stejném sloupci.

Existují originální proměny. Například transformace skenování má funkcionalitu podobnou analytickým funkcím. Existují transformace se samozřejmými názvy: Create Data, Read Excel, Normalize, Sort within Groups, Run Program, Run SQL, Join with DB atd. Grafy mohou využívat parametry za běhu, včetně možnosti předávání parametrů z nebo do operační systém. Soubory s hotovou sadou parametrů předaných do grafu se nazývají sady parametrů (psets).

Jak se dalo očekávat, Ab Initio GDE má své vlastní úložiště nazvané EME (Enterprise Meta Environment). Vývojáři mají možnost pracovat s lokálními verzemi kódu a kontrolovat jejich vývoj do centrálního úložiště.

Během provádění nebo po provedení grafu je možné kliknout na libovolný tok spojující transformaci a podívat se na data, která prošla mezi těmito transformacemi:

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum

Je také možné kliknout na libovolný stream a zobrazit podrobnosti sledování – v kolika rovnoběžkách transformace fungovala, kolik řádků a bajtů bylo načteno do které z rovnoběžek:

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum

Provádění grafu je možné rozdělit do fází a označit, že některé transformace je potřeba provést nejdříve (v nulté fázi), další v první fázi, další ve druhé fázi atd.

Pro každou transformaci si můžete zvolit tzv. rozložení (kde se bude provádět): bez paralel nebo v paralelních vláknech, jejichž počet lze určit. Současně lze dočasné soubory, které Ab Initio vytváří při provádění transformací, umístit jak do souborového systému serveru, tak do HDFS.

V každé transformaci, na základě výchozí šablony, můžete vytvořit svůj vlastní skript v PDL, který je tak trochu jako shell.

Pomocí PDL můžete rozšířit funkčnost transformací a zejména můžete dynamicky (za běhu) generovat libovolné fragmenty kódu v závislosti na parametrech běhu.

Ab Initio má také dobře propracovanou integraci s OS přes shell. Konkrétně Sberbank používá linux ksh. Proměnné si můžete vyměňovat s shellem a používat je jako parametry grafu. Můžete volat provádění grafů Ab Initio z shellu a spravovat Ab Initio.

Kromě Ab Initio GDE je součástí dodávky mnoho dalších produktů. Existuje vlastní Co>Operation System s nárokem, že se nazývá operační systém. K dispozici je Control>Centrum, kde můžete plánovat a sledovat toky stahování. Existují produkty pro vývoj na primitivnější úrovni, než umožňuje Ab Initio GDE.

Popis frameworku MDW a práce na jeho přizpůsobení pro GreenPlum

Spolu se svými produkty dodavatel dodává produkt MDW (Metadata Driven Warehouse), což je grafový konfigurátor určený k pomoci s typickými úkoly naplňování datových skladů nebo datových trezorů.

Obsahuje vlastní (pro konkrétní projekt) analyzátory metadat a hotové generátory kódu ihned po vybalení.

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum
Jako vstup obdrží MDW datový model, konfigurační soubor pro nastavení připojení k databázi (Oracle, Teradata nebo Hive) a některá další nastavení. Část specifická pro projekt například nasadí model do databáze. Přednastavená část produktu pro ně generuje grafy a konfigurační soubory načítáním dat do modelových tabulek. V tomto případě jsou vytvořeny grafy (a psety) pro několik režimů inicializace a přírůstkové práce na aktualizaci entit.

V případě Hive a RDBMS jsou pro inicializaci a přírůstkové aktualizace dat generovány různé grafy.

V případě Hive jsou příchozí delta data propojena přes Ab Initio Join s daty, která byla v tabulce před aktualizací. Zavaděče dat v MDW (v Hive i RDBMS) nejen vkládají nová data z delty, ale také uzavírají období relevance dat, jejichž primární klíče přijaly delta. Kromě toho musíte přepsat nezměněnou část dat. Ale to musí být provedeno, protože Hive nemá operace mazání nebo aktualizace.

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum

V případě RDBMS vypadají grafy pro přírůstkovou aktualizaci dat optimálněji, protože RDBMS mají skutečné možnosti aktualizace.

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum

Přijatá delta se načte do zprostředkující tabulky v databázi. Poté se delta propojí s daty, která byla v tabulce před aktualizací. A to se provádí pomocí SQL pomocí vygenerovaného SQL dotazu. Dále se pomocí příkazů SQL delete+insert vloží nová data z delty do cílové tabulky a uzavřou se období relevance dat, jejichž primární klíče přijaly delta.
Není potřeba přepisovat nezměněná data.

Došli jsme tedy k závěru, že v případě Hive musí MDW jít přepsat celou tabulku, protože Hive nemá funkci aktualizace. A nebylo vynalezeno nic lepšího, než úplné přepsání dat při aktualizaci. V případě RDBMS naopak tvůrci produktu zjistili, že je nutné svěřit připojení a aktualizaci tabulek použití SQL.

Pro projekt ve Sberbank jsme vytvořili novou, opakovaně použitelnou implementaci databázového nakladače pro GreenPlum. To bylo provedeno na základě verze, kterou MDW generuje pro Teradata. Byla to Teradata, a ne Oracle, kdo byl pro to nejlepší a nejbližší, protože... je také systém MPP. Pracovní metody, stejně jako syntaxe, Teradata a GreenPlum se ukázaly být podobné.

Příklady MDW-kritických rozdílů mezi různými RDBMS jsou následující. V GreenPlum, na rozdíl od Teradata, při vytváření tabulek musíte napsat klauzuli

distributed by

Teradata píše:

delete <table> all

, a v GreenPlum píšou

delete from <table>

V Oracle píšou pro účely optimalizace

delete from t where rowid in (<соединение t с дельтой>)

, a Teradata a GreenPlum píší

delete from t where exists (select * from delta where delta.pk=t.pk)

Upozorňujeme také, že aby Ab Initio fungovalo s GreenPlum, bylo nutné nainstalovat klienta GreenPlum na všechny uzly clusteru Ab Initio. Je to proto, že jsme se ke GreenPlum připojili současně ze všech uzlů v našem clusteru. A aby čtení z GreenPlum bylo paralelní a každé paralelní vlákno Ab Initio mohlo číst svou vlastní část dat z GreenPlum, museli jsme umístit konstrukci, kterou Ab Initio chápe, do sekce „kde“ dotazů SQL.

where ABLOCAL()

a určit hodnotu této konstrukce zadáním parametru čtení z transformační databáze

ablocal_expr=«string_concat("mod(t.", string_filter_out("{$TABLE_KEY}","{}"), ",", (decimal(3))(number_of_partitions()),")=", (decimal(3))(this_partition()))»

, který se zkompiluje na něco podobného

mod(sk,10)=3

, tj. musíte GreenPlum požádat o explicitní filtr pro každý oddíl. U ostatních databází (Teradata, Oracle) může Ab Initio provádět tuto paralelizaci automaticky.

Ab Initio srovnání výkonu mezi Hive a GreenPlum

Sberbank provedla experiment s cílem porovnat výkonnost grafů generovaných MDW ve vztahu k Hive a ve vztahu k GreenPlum. V rámci experimentu bylo v případě Hive 5 uzlů na stejném clusteru jako Ab Initio a v případě GreenPlum byly 4 uzly na samostatném clusteru. Tito. Hive měl oproti GreenPlum určitou hardwarovou výhodu.

Uvažovali jsme o dvou párech grafů provádějících stejný úkol aktualizace dat v Hive a GreenPlum. Současně byly spuštěny grafy generované konfigurátorem MDW:

  • počáteční načtení + přírůstkové načtení náhodně generovaných dat do tabulky Hive
  • počáteční načtení + přírůstkové načtení náhodně generovaných dat do stejné tabulky GreenPlum

V obou případech (Hive a GreenPlum) spustili nahrávání do 10 paralelních vláken na stejném clusteru Ab Initio. Ab Initio uložil mezilehlá data pro výpočty v HDFS (z hlediska Ab Initio bylo použito rozložení MFS pomocí HDFS). Jeden řádek náhodně generovaných dat zabíral v obou případech 200 bajtů.

Výsledek byl takový:

Úl:

Počáteční načtení v Hive

Řádky vloženy
6 000 000
60 000 000
600 000 000

Doba trvání inicializace
stahování během několika sekund
41
203
1 601

Přírůstkové načítání v Hive

Počet dostupných řádků v
cílovou tabulku na začátku experimentu
6 000 000
60 000 000
600 000 000

Počet použitých delta čar
cílovou tabulku během experimentu
6 000 000
6 000 000
6 000 000

Přírůstkové trvání
stahování během několika sekund
88
299
2 541

GreenPlum:

Počáteční načtení v GreenPlum

Řádky vloženy
6 000 000
60 000 000
600 000 000

Doba trvání inicializace
stahování během několika sekund
72
360
3 631

Přírůstkové načítání v GreenPlum

Počet dostupných řádků v
cílovou tabulku na začátku experimentu
6 000 000
60 000 000
600 000 000

Počet použitých delta čar
cílovou tabulku během experimentu
6 000 000
6 000 000
6 000 000

Přírůstkové trvání
stahování během několika sekund
159
199
321

Vidíme, že rychlost počátečního načítání v Hive i GreenPlum lineárně závisí na množství dat a z důvodů lepšího hardwaru je u Hive o něco rychlejší než u GreenPlum.

Přírůstkové načítání v Hive také lineárně závisí na objemu dříve načtených dat dostupných v cílové tabulce a postupuje poměrně pomalu, jak objem roste. To je způsobeno nutností zcela přepsat cílovou tabulku. To znamená, že použití malých změn na velké tabulky není pro Hive dobrým příkladem použití.

Inkrementální načítání v GreenPlum slabě závisí na objemu dříve načtených dat dostupných v cílové tabulce a probíhá poměrně rychle. Stalo se tak díky SQL Joins a architektuře GreenPlum, která umožňuje operaci odstranění.

GreenPlum tedy přidává deltu pomocí metody delete+insert, ale Hive nemá operace mazání nebo aktualizace, takže celé pole dat bylo nuceno být zcela přepsáno během přírůstkové aktualizace. Porovnání buněk zvýrazněných tučně je nejvýraznější, protože odpovídá nejběžnější možnosti použití stahování náročných na zdroje. Vidíme, že GreenPlum porazil Hive v tomto testu 8krát.

Práce Ab Initio s GreenPlum v režimu Near Real Time

V tomto experimentu otestujeme schopnost Ab Initio aktualizovat tabulku GreenPlum náhodně generovanými kusy dat téměř v reálném čase. Uvažujme tabulku GreenPlum dev42_1_db_usl.TESTING_SUBJ_org_finval, se kterou budeme pracovat.

K práci s ním použijeme tři Ab Initio grafy:

1) Graph Create_test_data.mp – vytváří datové soubory v HDFS s 10 6 000 řádky v 000 paralelních vláknech. Data jsou náhodná, jejich struktura je uspořádána pro vložení do naší tabulky

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum

2) Graf mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset – MDW generovaný graf inicializací vkládání dat do naší tabulky v 10 paralelních vláknech (používá se testovací data vygenerovaná grafem (1))

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum

3) Graf mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset – graf generovaný MDW pro inkrementální aktualizaci naší tabulky v 10 paralelních vláknech s použitím části čerstvě přijatých dat (delta) generovaných grafem (1)

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum

Spusťte níže uvedený skript v režimu NRT:

  • vygenerovat 6 000 000 testovacích řádků
  • provést počáteční načtení vložit 6 000 000 testovacích řádků do prázdné tabulky
  • opakujte postupné stahování 5krát
    • vygenerovat 6 000 000 testovacích řádků
    • provést přírůstkové vložení 6 000 000 testovacích řádků do tabulky (v tomto případě je doba expirace valid_to_ts nastavena na stará data a jsou vložena novější data se stejným primárním klíčem)

Tento scénář emuluje režim reálného provozu určitého podnikového systému – poměrně velká část nových dat se objeví v reálném čase a okamžitě se nalije do GreenPlum.

Nyní se podívejme na protokol skriptu:

Začněte Create_test_data.input.pset v 2020-06-04 11:49:11
Dokončete Create_test_data.input.pset v 2020-06-04 11:49:37
Začněte mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset v 2020-06-04 11:49:37
Dokončete mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset v 2020-06-04 11:50:42
Začněte Create_test_data.input.pset v 2020-06-04 11:50:42
Dokončete Create_test_data.input.pset v 2020-06-04 11:51:06
Spusťte mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset v 2020-06-04 11:51:06
Dokončete mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset v 2020-06-04 11:53:41
Začněte Create_test_data.input.pset v 2020-06-04 11:53:41
Dokončete Create_test_data.input.pset v 2020-06-04 11:54:04
Spusťte mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset v 2020-06-04 11:54:04
Dokončete mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset v 2020-06-04 11:56:51
Začněte Create_test_data.input.pset v 2020-06-04 11:56:51
Dokončete Create_test_data.input.pset v 2020-06-04 11:57:14
Spusťte mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset v 2020-06-04 11:57:14
Dokončete mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset v 2020-06-04 11:59:55
Začněte Create_test_data.input.pset v 2020-06-04 11:59:55
Dokončete Create_test_data.input.pset v 2020-06-04 12:00:23
Spusťte mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset v 2020-06-04 12:00:23
Dokončete mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset v 2020-06-04 12:03:23
Začněte Create_test_data.input.pset v 2020-06-04 12:03:23
Dokončete Create_test_data.input.pset v 2020-06-04 12:03:49
Spusťte mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset v 2020-06-04 12:03:49
Dokončete mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset v 2020-06-04 12:06:46

Ukazuje se tento obrázek:

Graf
Začátek
Konečný čas
Délka

Create_test_data.input.pset
04.06.2020 11: 49: 11
04.06.2020 11: 49: 37
00:00:26

mdw_load.day_one.current.
dev42_1_db_usl_testing_subj_org_finval.pset
04.06.2020 11: 49: 37
04.06.2020 11: 50: 42
00:01:05

Create_test_data.input.pset
04.06.2020 11: 50: 42
04.06.2020 11: 51: 06
00:00:24

mdw_load.regular.current.
dev42_1_db_usl_testing_subj_org_finval.pset
04.06.2020 11: 51: 06
04.06.2020 11: 53: 41
00:02:35

Create_test_data.input.pset
04.06.2020 11: 53: 41
04.06.2020 11: 54: 04
00:00:23

mdw_load.regular.current.
dev42_1_db_usl_testing_subj_org_finval.pset
04.06.2020 11: 54: 04
04.06.2020 11: 56: 51
00:02:47

Create_test_data.input.pset
04.06.2020 11: 56: 51
04.06.2020 11: 57: 14
00:00:23

mdw_load.regular.current.
dev42_1_db_usl_testing_subj_org_finval.pset
04.06.2020 11: 57: 14
04.06.2020 11: 59: 55
00:02:41

Create_test_data.input.pset
04.06.2020 11: 59: 55
04.06.2020 12: 00: 23
00:00:28

mdw_load.regular.current.
dev42_1_db_usl_testing_subj_org_finval.pset
04.06.2020 12: 00: 23
04.06.2020 12: 03: 23
00:03:00

Create_test_data.input.pset
04.06.2020 12: 03: 23
04.06.2020 12: 03: 49
00:00:26

mdw_load.regular.current.
dev42_1_db_usl_testing_subj_org_finval.pset
04.06.2020 12: 03: 49
04.06.2020 12: 06: 46
00:02:57

Vidíme, že 6 000 000 přírůstkových řádků je zpracováno za 3 minuty, což je docela rychlé.
Ukázalo se, že data v cílové tabulce jsou distribuována takto:

select valid_from_ts, valid_to_ts, count(1), min(sk), max(sk) from dev42_1_db_usl.TESTING_SUBJ_org_finval group by valid_from_ts, valid_to_ts order by 1,2;

Když máte Sber váhy. Použití Ab Initio s Hive a GreenPlum
Můžete vidět shodu vložených dat s časy spuštění grafů.
To znamená, že můžete spouštět přírůstkové načítání dat do GreenPlum v Ab Initio s velmi vysokou frekvencí a pozorovat vysokou rychlost vkládání těchto dat do GreenPlum. Samozřejmě nebude možné spustit jednou za sekundu, protože Ab Initio, jako každý nástroj ETL, vyžaduje čas, aby se po spuštění „spustil“.

Závěr

Ab Initio se v současné době používá ve Sberbank k vytvoření jednotné sémantické datové vrstvy (ESS). Tento projekt zahrnuje vybudování jednotné verze stavu různých bankovních podnikatelských subjektů. Informace pocházejí z různých zdrojů, jejichž repliky jsou připravovány na Hadoop. Na základě obchodních potřeb je připraven datový model a popsány transformace dat. Ab Initio načítá informace do ESN a stažená data jsou nejen zajímavá pro samotný podnik, ale slouží také jako zdroj pro budování datových trhů. Funkčnost produktu zároveň umožňuje používat různé systémy jako přijímač (Hive, Greenplum, Teradata, Oracle), což umožňuje snadno připravit data pro podnik v různých formátech, které vyžaduje.

Možnosti Ab Initio jsou široké, například zahrnutý rámec MDW umožňuje vytvářet technická a obchodní historická data ihned po vybalení. Vývojářům Ab Initio umožňuje nevynalézat znovu kolo, ale využít mnoho existujících funkčních komponent, což jsou v podstatě knihovny potřebné při práci s daty.

Autor je odborníkem v odborné komunitě Sberbank SberProfi DWH/BigData. Odborná komunita SberProfi DWH/BigData je zodpovědná za rozvoj kompetencí v oblastech jako je ekosystém Hadoop, Teradata, Oracle DB, GreenPlum, ale i BI nástroje Qlik, SAP BO, Tableau atd.

Zdroj: www.habr.com

Přidat komentář