Pred časom sme stáli pred otázkou výberu ETL nástroja pre prácu s Big Data. Predtým používané riešenie Informatica BDM nám nevyhovovalo z dôvodu obmedzenej funkčnosti. Jeho použitie sa zredukovalo na rámec pre spúšťanie príkazov spark-submit. Na trhu nebolo veľa analógov, ktoré by v princípe vedeli pracovať s objemom dát, s ktorými sa denne stretávame. Nakoniec sme zvolili Ab Initio. Počas pilotných demonštrácií produkt vykazoval veľmi vysokú rýchlosť spracovania dát. V ruštine nie sú o Ab Initiovi takmer žiadne informácie, preto sme sa rozhodli porozprávať o našich skúsenostiach na Habré.
Ab Initio má mnoho klasických a nezvyčajných transformácií, ktorých kód je možné rozšíriť pomocou vlastného jazyka PDL. Pre malý podnik bude takýto výkonný nástroj pravdepodobne prehnaný a väčšina jeho schopností môže byť drahá a nevyužitá. Ale ak je vaša mierka blízka Sberovovej, potom môže byť pre vás zaujímavá Ab Initio.
Pomáha firme hromadiť znalosti globálne a rozvíjať ekosystém a vývojárovi zlepšiť svoje zručnosti v ETL, zlepšiť svoje znalosti v prostredí shell, poskytuje príležitosť zvládnuť jazyk PDL, poskytuje vizuálny obraz o procesoch načítania a zjednodušuje vývoj. vďaka množstvu funkčných komponentov.
V tomto príspevku budem hovoriť o schopnostiach Ab Initio a poskytnem porovnávacie charakteristiky jeho práce s Hive a GreenPlum.
- Popis frameworku MDW a práce na jeho prispôsobení pre GreenPlum
- Ab Initio porovnanie výkonu medzi Hive a GreenPlum
- Práca Ab Initio s GreenPlum v režime Near Real Time
Funkčnosť tohto produktu je veľmi široká a vyžaduje si veľa času na štúdium. Pri správnych pracovných zručnostiach a správnom nastavení výkonu sú však výsledky spracovania dát veľmi pôsobivé. Použitie Ab Initio pre vývojárov môže poskytnúť zaujímavý zážitok. Toto je nový pohľad na vývoj ETL, hybrid medzi vizuálnym prostredím a vývojom sťahovania v jazyku podobnom skriptu.
Firmy rozvíjajú svoje ekosystémy a tento nástroj sa im hodí viac ako kedykoľvek predtým. S Ab Initio môžete zhromažďovať vedomosti o svojom súčasnom podnikaní a použiť tieto znalosti na rozšírenie starých a otvorenie nových podnikov. Alternatívy k Ab Initio zahŕňajú vizuálne vývojové prostredia Informatica BDM a nevizuálne vývojové prostredia Apache Spark.
Popis Ab Initio
Ab Initio, rovnako ako ostatné ETL nástroje, je kolekcia produktov.
Ab Initio GDE (Graphical Development Environment) je prostredie pre vývojára, v ktorom konfiguruje transformácie dát a prepája ich s dátovými tokmi vo forme šípok. V tomto prípade sa takáto množina transformácií nazýva graf:
Vstupné a výstupné spojenia funkčných komponentov sú porty a obsahujú polia vypočítané v rámci transformácií. Niekoľko grafov spojených tokmi vo forme šípok v poradí ich vykonávania sa nazýva plán.
Funkčných komponentov je niekoľko stoviek, čo je veľa. Mnohé z nich sú vysoko špecializované. Možnosti klasických transformácií v Ab Initio sú širšie ako v iných ETL nástrojoch. Napríklad Join má viacero výstupov. Okrem výsledku pripojenia množín údajov môžete získať výstupné záznamy vstupných množín údajov, ktorých kľúče nebolo možné pripojiť. Môžete tiež získať odmietnutia, chyby a protokol operácie transformácie, ktorý možno čítať v rovnakom stĺpci ako textový súbor a spracovať s inými transformáciami:
Alebo napríklad môžete zhmotniť prijímač údajov vo forme tabuľky a čítať z nej údaje v rovnakom stĺpci.
Existujú originálne premeny. Napríklad transformácia skenovania má funkčnosť podobnú analytickým funkciám. Existujú transformácie so samovysvetľujúcimi názvami: Create Data, Read Excel, Normalize, Sort within Groups, Run Program, Run SQL, Join with DB, atď. Grafy môžu využívať run-time parametre vrátane možnosti odovzdávania parametrov z alebo do operačný systém. Súbory s predpripravenou sadou parametrov odovzdaných do grafu sa nazývajú sady parametrov (psets).
Ako sa očakávalo, Ab Initio GDE má svoje vlastné úložisko s názvom EME (Enterprise Meta Environment). Vývojári majú možnosť pracovať s lokálnymi verziami kódu a kontrolovať ich vývoj v centrálnom úložisku.
Počas vykonávania alebo po vykonaní grafu je možné kliknúť na ľubovoľný tok spájajúci transformáciu a pozrieť sa na údaje, ktoré prešli medzi týmito transformáciami:
Je tiež možné kliknúť na ľubovoľný stream a zobraziť podrobnosti sledovania - v koľkých paralelách transformácia fungovala, koľko riadkov a bajtov sa načítalo do ktorej z paralel:
Vyhotovenie grafu je možné rozdeliť do fáz a označiť, že niektoré transformácie je potrebné vykonať najskôr (v nulovej fáze), ďalšie v prvej fáze, ďalšie v druhej fáze atď.
Pre každú transformáciu si môžete zvoliť takzvané rozloženie (kde sa vykoná): bez paralel alebo v paralelných vláknach, ktorých počet je možné určiť. Dočasné súbory, ktoré Ab Initio vytvára, keď sú spustené transformácie, je zároveň možné umiestniť do súborového systému servera aj do HDFS.
V každej transformácii si na základe predvolenej šablóny môžete vytvoriť vlastný skript v PDL, ktorý je tak trochu ako shell.
Pomocou PDL môžete rozšíriť funkčnosť transformácií a najmä môžete dynamicky (za behu) generovať ľubovoľné fragmenty kódu v závislosti od parametrov behu.
Ab Initio má tiež dobre vyvinutú integráciu s OS cez shell. Konkrétne Sberbank používa linux ksh. Premenné si môžete vymieňať s shellom a používať ich ako parametre grafu. Môžete zavolať vykonávanie grafov Ab Initio z shellu a spravovať Ab Initio.
Okrem Ab Initio GDE je súčasťou dodávky mnoho ďalších produktov. Existuje vlastný Co>Operation System s tvrdením, že sa nazýva operačný systém. Existuje Control>Centrum, kde môžete plánovať a monitorovať toky sťahovania. Existujú produkty na vývoj na primitívnejšej úrovni, než umožňuje Ab Initio GDE.
Popis frameworku MDW a práce na jeho prispôsobení pre GreenPlum
Dodávateľ spolu so svojimi produktmi dodáva produkt MDW (Metadata Driven Warehouse), čo je grafový konfigurátor určený na pomoc pri typických úlohách napĺňania dátových skladov alebo dátových trezorov.
Obsahuje vlastné (projektovo špecifické) analyzátory metadát a hotové generátory kódu hneď po vybalení.
Ako vstup dostane MDW dátový model, konfiguračný súbor pre nastavenie pripojenia k databáze (Oracle, Teradata alebo Hive) a niektoré ďalšie nastavenia. Časť špecifická pre projekt napríklad nasadí model do databázy. Predpripravená časť produktu generuje pre ne grafy a konfiguračné súbory načítaním údajov do modelových tabuliek. V tomto prípade sa vytvárajú grafy (a psety) pre niekoľko režimov inicializácie a prírastkovej práce na aktualizácii entít.
V prípade Hive a RDBMS sa generujú rôzne grafy pre inicializáciu a prírastkové aktualizácie údajov.
V prípade Hive sú prichádzajúce delta dáta prepojené cez Ab Initio Join s dátami, ktoré boli v tabuľke pred aktualizáciou. Zavádzače údajov v MDW (v Hive aj RDBMS) nielen vkladajú nové údaje z delty, ale tiež uzatvárajú obdobia relevantnosti údajov, ktorých primárne kľúče dostali deltu. Okrem toho musíte prepísať nezmenenú časť údajov. Musí sa to však urobiť, pretože Hive nemá operácie odstraňovania alebo aktualizácie.
V prípade RDBMS vyzerajú grafy pre prírastkovú aktualizáciu údajov optimálnejšie, pretože RDBMS majú skutočné možnosti aktualizácie.
Prijatá delta sa načíta do pomocnej tabuľky v databáze. Potom sa delta pripojí k údajom, ktoré boli v tabuľke pred aktualizáciou. A to sa robí pomocou SQL pomocou vygenerovaného SQL dotazu. Ďalej pomocou príkazov SQL delete+insert sa do cieľovej tabuľky vložia nové údaje z delty a uzavrú sa obdobia relevantnosti údajov, ktorých primárne kľúče dostali delta.
Nie je potrebné prepisovať nezmenené údaje.
Dospeli sme teda k záveru, že v prípade Hive musí MDW ísť prepísať celú tabuľku, pretože Hive nemá funkciu aktualizácie. A nebolo vynájdené nič lepšie ako úplné prepísanie údajov pri aktualizácii. Naopak, v prípade RDBMS tvorcovia produktu považovali za potrebné zveriť prepojenie a aktualizáciu tabuliek využívaniu SQL.
Pre projekt v Sberbank sme vytvorili novú, opakovane použiteľnú implementáciu databázového nakladača pre GreenPlum. Toto bolo urobené na základe verzie, ktorú MDW generuje pre Teradata. Bola to Teradata, a nie Oracle, kto sa k tomu priblížil a najlepšie, pretože... je tiež systémom MPP. Pracovné metódy, ako aj syntax Teradata a GreenPlum sa ukázali byť podobné.
Príklady MDW-kritických rozdielov medzi rôznymi RDBMS sú nasledovné. V GreenPlum, na rozdiel od Teradata, pri vytváraní tabuliek musíte napísať klauzulu
distributed by
Teradata píše:
delete <table> all
, a v GreenPlum píšu
delete from <table>
V Oracle píšu na účely optimalizácie
delete from t where rowid in (<соединение t с дельтой>)
, a Teradata a GreenPlum píšu
delete from t where exists (select * from delta where delta.pk=t.pk)
Upozorňujeme tiež, že na to, aby Ab Initio fungovalo s GreenPlum, bolo potrebné nainštalovať klienta GreenPlum na všetky uzly klastra Ab Initio. Je to preto, že sme sa k GreenPlum pripojili súčasne zo všetkých uzlov v našom klastri. A aby bolo čítanie z GreenPlum paralelné a každé paralelné vlákno Ab Initio čítalo svoju vlastnú časť údajov z GreenPlum, museli sme umiestniť konštrukciu, ktorej rozumie Ab Initio, do sekcie „kde“ SQL dotazov.
where ABLOCAL()
a určiť hodnotu tejto konštrukcie zadaním parametra čítania z transformačnej databázy
ablocal_expr=«string_concat("mod(t.", string_filter_out("{$TABLE_KEY}","{}"), ",", (decimal(3))(number_of_partitions()),")=", (decimal(3))(this_partition()))»
, ktorý sa zostaví do niečoho podobného
mod(sk,10)=3
, t.j. musíte GreenPlum požiadať o explicitný filter pre každý oddiel. Pri iných databázach (Teradata, Oracle) môže Ab Initio vykonávať túto paralelizáciu automaticky.
Ab Initio porovnanie výkonu medzi Hive a GreenPlum
Sberbank uskutočnila experiment na porovnanie výkonnosti grafov generovaných MDW vo vzťahu k Hive a vo vzťahu k GreenPlum. V rámci experimentu bolo v prípade Hive 5 uzlov na rovnakom klastri ako Ab Initio a v prípade GreenPlum boli 4 uzly na samostatnom klastri. Tie. Hive mal oproti GreenPlum určitú hardvérovú výhodu.
Zvažovali sme dva páry grafov, ktoré vykonávajú rovnakú úlohu aktualizácie údajov v Hive a GreenPlum. Zároveň boli spustené grafy generované konfigurátorom MDW:
- počiatočné načítanie + prírastkové načítanie náhodne generovaných údajov do tabuľky Hive
- počiatočné načítanie + prírastkové načítanie náhodne generovaných údajov do rovnakej tabuľky GreenPlum
V oboch prípadoch (Hive a GreenPlum) spustili nahrávanie do 10 paralelných vlákien na rovnakom klastri Ab Initio. Ab Initio uložil prechodné dáta pre výpočty v HDFS (v zmysle Ab Initio bolo použité rozloženie MFS pomocou HDFS). Jeden riadok náhodne generovaných údajov zaberal v oboch prípadoch 200 bajtov.
Výsledok bol takýto:
Úľ:
Počiatočné načítanie v Hive
Vložené riadky
6 000 000
60 000 000
600 000 000
Trvanie inicializácie
sťahovanie za pár sekúnd
41
203
1 601
Prírastkové načítanie v Hive
Počet dostupných riadkov v
cieľovej tabuľky na začiatku experimentu
6 000 000
60 000 000
600 000 000
Počet aplikovaných delta čiar
cieľovej tabuľky počas experimentu
6 000 000
6 000 000
6 000 000
Trvanie prírastku
sťahovanie za pár sekúnd
88
299
2 541
Zelená slivka:
Počiatočné načítanie v GreenPlum
Vložené riadky
6 000 000
60 000 000
600 000 000
Trvanie inicializácie
sťahovanie za pár sekúnd
72
360
3 631
Prírastkové načítanie v GreenPlum
Počet dostupných riadkov v
cieľovej tabuľky na začiatku experimentu
6 000 000
60 000 000
600 000 000
Počet aplikovaných delta čiar
cieľovej tabuľky počas experimentu
6 000 000
6 000 000
6 000 000
Trvanie prírastku
sťahovanie za pár sekúnd
159
199
321
Vidíme, že rýchlosť počiatočného načítania v Hive aj GreenPlum lineárne závisí od množstva dát a z dôvodov lepšieho hardvéru je pre Hive o niečo rýchlejšia ako pre GreenPlum.
Prírastkové načítanie v Hive tiež lineárne závisí od objemu predtým načítaných údajov dostupných v cieľovej tabuľke a postupuje pomerne pomaly, keď objem rastie. Je to spôsobené potrebou úplne prepísať cieľovú tabuľku. To znamená, že aplikácia malých zmien na obrovské tabuľky nie je pre Hive dobrým príkladom použitia.
Prírastkové načítanie v GreenPlum slabo závisí od objemu predtým načítaných údajov dostupných v cieľovej tabuľke a prebieha pomerne rýchlo. Stalo sa tak vďaka SQL Joins a architektúre GreenPlum, ktorá umožňuje operáciu vymazania.
GreenPlum teda pridáva deltu pomocou metódy delete+insert, ale Hive nemá operácie vymazania ani aktualizácie, takže celé dátové pole bolo nútené úplne prepísať počas prírastkovej aktualizácie. Porovnanie buniek zvýraznených tučným písmom je najprezreteľnejšie, pretože zodpovedá najbežnejšej možnosti používania sťahovania náročných na zdroje. Vidíme, že GreenPlum porazil Hive v tomto teste 8-krát.
Práca Ab Initio s GreenPlum v režime Near Real Time
V tomto experimente otestujeme schopnosť Ab Initio aktualizovať tabuľku GreenPlum náhodne generovanými kúskami údajov takmer v reálnom čase. Zoberme si tabuľku GreenPlum dev42_1_db_usl.TESTING_SUBJ_org_finval, s ktorou budeme pracovať.
Na prácu s ním použijeme tri Ab Initio grafy:
1) Graph Create_test_data.mp – vytvára dátové súbory v HDFS so 10 6 000 riadkami v 000 paralelných vláknach. Dáta sú náhodné, ich štruktúra je usporiadaná na vloženie do našej tabuľky
2) Graf mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset – MDW generovaný graf inicializáciou vkladania údajov do našej tabuľky v 10 paralelných vláknach (používajú sa testovacie údaje vygenerované grafom (1))
3) Graf mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset – graf vygenerovaný MDW pre prírastkovú aktualizáciu našej tabuľky v 10 paralelných vláknach s použitím časti čerstvo prijatých údajov (delta) vygenerovaných grafom (1)
Spustite nižšie uvedený skript v režime NRT:
- vygenerovať 6 000 000 testovacích riadkov
- vykonať počiatočné načítanie vložte 6 000 000 testovacích riadkov do prázdnej tabuľky
- zopakujte postupné sťahovanie 5-krát
- vygenerovať 6 000 000 testovacích riadkov
- vykonať prírastkové vloženie 6 000 000 testovacích riadkov do tabuľky (v tomto prípade je čas vypršania platnosti valid_to_ts nastavený na staré údaje a vložia sa novšie údaje s rovnakým primárnym kľúčom)
Tento scenár napodobňuje režim reálneho fungovania určitého podnikového systému – pomerne veľká časť nových dát sa objaví v reálnom čase a okamžite sa naleje do GreenPlum.
Teraz sa pozrime na denník skriptu:
Začnite Create_test_data.input.pset 2020-06-04 11:49:11
Dokončite Create_test_data.input.pset 2020-06-04 11:49:37
Začnite mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset 2020-06-04 11:49:37
Dokončite mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset 2020-06-04 11:50:42
Začnite Create_test_data.input.pset 2020-06-04 11:50:42
Dokončite Create_test_data.input.pset 2020-06-04 11:51:06
Začnite mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset 2020-06-04 11:51:06
Dokončite mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset 2020-06-04 11:53:41
Začnite Create_test_data.input.pset 2020-06-04 11:53:41
Dokončite Create_test_data.input.pset 2020-06-04 11:54:04
Začnite mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset 2020-06-04 11:54:04
Dokončite mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset 2020-06-04 11:56:51
Začnite Create_test_data.input.pset 2020-06-04 11:56:51
Dokončite Create_test_data.input.pset 2020-06-04 11:57:14
Začnite mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset 2020-06-04 11:57:14
Dokončite mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset 2020-06-04 11:59:55
Začnite Create_test_data.input.pset 2020-06-04 11:59:55
Dokončite Create_test_data.input.pset 2020-06-04 12:00:23
Začnite mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset 2020-06-04 12:00:23
Dokončite mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset 2020-06-04 12:03:23
Začnite Create_test_data.input.pset 2020-06-04 12:03:23
Dokončite Create_test_data.input.pset 2020-06-04 12:03:49
Začnite mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset 2020-06-04 12:03:49
Dokončite mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset 2020-06-04 12:06:46
Ukazuje sa tento obrázok:
Graf
Doba spustenia
Čas ukončenia
Dĺžka
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 prírastkových riadkov sa spracuje za 3 minúty, čo je pomerne rýchle.
Ukázalo sa, že údaje v cieľovej tabuľke sú rozdelené 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;
Môžete vidieť zhodu vložených údajov s časom spustenia grafov.
To znamená, že môžete spustiť prírastkové načítanie údajov do GreenPlum v Ab Initio s veľmi vysokou frekvenciou a pozorovať vysokú rýchlosť vkladania týchto údajov do GreenPlum. Samozrejme, nebude možné spustiť raz za sekundu, pretože Ab Initio, ako každý nástroj ETL, vyžaduje čas na „spustenie“ pri spustení.
Záver
Ab Initio sa v súčasnosti používa v Sberbank na vytvorenie Unified Semantic Data Layer (ESS). Tento projekt zahŕňa vybudovanie jednotnej verzie stavu rôznych bankových podnikateľských subjektov. Informácie pochádzajú z rôznych zdrojov, ktorých repliky sú pripravené na Hadoop. Na základe obchodných potrieb sa pripraví dátový model a popíšu sa transformácie dát. Ab Initio načítava informácie do ESN a stiahnuté dáta sú nielen zaujímavé pre samotný podnik, ale slúžia aj ako zdroj pre budovanie dátových trhov. Funkčnosť produktu zároveň umožňuje využívať rôzne systémy ako prijímač (Hive, Greenplum, Teradata, Oracle), čo umožňuje jednoducho pripraviť dáta pre podnik v rôznych požadovaných formátoch.
Možnosti Ab Initio sú široké, napríklad zahrnutý rámec MDW umožňuje vytvárať technické a obchodné historické údaje hneď po vybalení. Vývojárom Ab Initio umožňuje nevynájsť koleso, ale využiť mnohé existujúce funkčné komponenty, ktoré sú v podstate knižnice potrebné pri práci s údajmi.
Autor je odborníkom v odbornej komunite Sberbank SberProfi DWH/BigData. Odborná komunita SberProfi DWH/BigData je zodpovedná za rozvoj kompetencií v takých oblastiach, ako sú ekosystém Hadoop, Teradata, Oracle DB, GreenPlum, ako aj BI nástroje Qlik, SAP BO, Tableau atď.
Zdroj: hab.com