'n Tyd gelede het ons gekonfronteer met die vraag om 'n ETL-instrument te kies om met Big Data te werk. Die voorheen gebruikte Informatica BDM-oplossing het ons nie gepas nie weens beperkte funksionaliteit. Die gebruik daarvan is verminder tot 'n raamwerk vir die bekendstelling van vonk-indien-opdragte. Daar was nie baie analoë op die mark wat in beginsel in staat was om te werk met die volume data waarmee ons elke dag te doen het nie. Op die ou end het ons Ab Initio gekies. Tydens loodsdemonstrasies het die produk baie hoë dataverwerkingspoed getoon. Daar is amper geen inligting oor Ab Initio in Russies nie, so ons het besluit om oor ons ervaring op Habré te praat.
Ab Initio het baie klassieke en ongewone transformasies, waarvan die kode uitgebrei kan word met sy eie PDL-taal. Vir 'n klein besigheid sal so 'n kragtige instrument waarskynlik te veel wees, en die meeste van sy vermoëns kan duur en ongebruik wees. Maar as jou skaal naby aan Sberov s'n is, is Ab Initio dalk vir jou interessant.
Dit help 'n onderneming om wêreldwyd kennis te versamel en 'n ekosisteem te ontwikkel, en 'n ontwikkelaar om sy vaardighede in ETL te verbeter, sy kennis in die dop te verbeter, bied die geleentheid om die PDL-taal te bemeester, gee 'n visuele prentjie van laaiprosesse, en vereenvoudig ontwikkeling as gevolg van die oorvloed van funksionele komponente.
In hierdie pos sal ek praat oor die vermoëns van Ab Initio en vergelykende kenmerke van sy werk met Hive en GreenPlum verskaf.
- Beskrywing van die MDW-raamwerk en werk aan die aanpassing daarvan vir GreenPlum
- Ab Initio prestasie vergelyking tussen Hive en GreenPlum
- Werk Ab Initio met GreenPlum in Near Real Time-modus
Die funksionaliteit van hierdie produk is baie wyd en verg baie tyd om te studeer. Met die regte werkvaardighede en die regte prestasie-instellings is die resultate van dataverwerking egter baie indrukwekkend. Die gebruik van Ab Initio vir 'n ontwikkelaar kan 'n interessante ervaring bied. Dit is 'n nuwe benadering van ETL-ontwikkeling, 'n baster tussen 'n visuele omgewing en aflaai-ontwikkeling in 'n skrifagtige taal.
Besighede ontwikkel hul ekosisteme en hierdie hulpmiddel kom meer handig as ooit tevore. Met Ab Initio kan jy kennis oor jou huidige besigheid versamel en hierdie kennis gebruik om ou en nuwe besighede uit te brei. Alternatiewe vir Ab Initio sluit in visuele ontwikkelingsomgewings Informatica BDM en nie-visuele ontwikkelingsomgewings Apache Spark.
Beskrywing van Ab Initio
Ab Initio, soos ander ETL-instrumente, is 'n versameling produkte.
Ab Initio GDE (Graphical Development Environment) is 'n omgewing vir die ontwikkelaar waarin hy datatransformasies konfigureer en met datavloei in die vorm van pyle verbind. In hierdie geval word so 'n stel transformasies 'n grafiek genoem:
Die inset- en uitsetverbindings van funksionele komponente is poorte en bevat velde wat binne transformasies bereken word. Verskeie grafieke verbind deur vloei in die vorm van pyle in die volgorde van hul uitvoering word 'n plan genoem.
Daar is 'n paar honderd funksionele komponente, wat baie is. Baie van hulle is hoogs gespesialiseerd. Die vermoëns van klassieke transformasies in Ab Initio is wyer as in ander ETL-instrumente. Byvoorbeeld, Join het verskeie uitsette. Benewens die resultaat van die koppeling van datastelle, kan jy uitvoerrekords kry van invoerdatastelle waarvan die sleutels nie gekoppel kon word nie. Jy kan ook verwerpings, foute en 'n log van die transformasie-bewerking kry, wat in dieselfde kolom as 'n tekslêer gelees kan word en met ander transformasies verwerk kan word:
Of jy kan byvoorbeeld 'n data-ontvanger in die vorm van 'n tabel realiseer en data daaruit in dieselfde kolom lees.
Daar is oorspronklike transformasies. Byvoorbeeld, die Scan transformasie het funksionaliteit soortgelyk aan analitiese funksies. Daar is transformasies met selfverduidelikende name: Skep Data, Lees Excel, Normaliseer, Sorteer binne Groepe, Begin Program, Begin SQL, Sluit aan by DB, ens. Grafieke kan looptydparameters gebruik, insluitend die moontlikheid om parameters van of na deur te gee die bedryfstelsel. Lêers met 'n klaargemaakte stel parameters wat na die grafiek oorgedra word, word parameterstelle (psets) genoem.
Soos verwag, het Ab Initio GDE sy eie bewaarplek genaamd EME (Enterprise Meta Environment). Ontwikkelaars het die geleentheid om met plaaslike weergawes van kode te werk en hul ontwikkelings in die sentrale bewaarplek in te check.
Dit is moontlik om tydens uitvoering of nadat die grafiek uitgevoer is, op enige vloei wat die transformasie verbind, te klik en na die data te kyk wat tussen hierdie transformasies geslaag het:
Dit is ook moontlik om op enige stroom te klik en naspoorbesonderhede te sien - in hoeveel parallelle die transformasie gewerk het, hoeveel lyne en grepe in watter van die parallelle gelaai is:
Dit is moontlik om die uitvoering van die grafiek in fases te verdeel en te merk dat sommige transformasies eers uitgevoer moet word (in die nulfase), die volgende in die eerste fase, die volgende in die tweede fase, ens.
Vir elke transformasie kan u die sogenaamde uitleg kies (waar dit uitgevoer sal word): sonder parallelle of in parallelle drade, waarvan die aantal gespesifiseer kan word. Terselfdertyd kan tydelike lêers wat Ab Initio skep wanneer transformasies aan die gang is, beide in die bedienerlêerstelsel en in HDFS geplaas word.
In elke transformasie, gebaseer op die verstek sjabloon, kan jy jou eie skrif in PDL skep, wat 'n bietjie soos 'n dop is.
Met PDL kan jy die funksionaliteit van transformasies uitbrei en veral kan jy dinamies (by looptyd) arbitrêre kodefragmente genereer, afhangende van looptydparameters.
Ab Initio het ook goed ontwikkelde integrasie met die OS via dop. Spesifiek, Sberbank gebruik linux ksh. Jy kan veranderlikes met die dop uitruil en dit as grafiekparameters gebruik. Jy kan die uitvoering van Ab Initio-grafieke vanaf die dop oproep en Ab Initio administreer.
Benewens Ab Initio GDE, is baie ander produkte by die aflewering ingesluit. Daar is sy eie Co>Operation System met 'n eis om 'n bedryfstelsel genoem te word. Daar is 'n Beheer> Sentrum waar jy aflaaivloei kan skeduleer en monitor. Daar is produkte om ontwikkeling op 'n meer primitiewe vlak te doen as wat Ab Initio GDE toelaat.
Beskrywing van die MDW-raamwerk en werk aan die aanpassing daarvan vir GreenPlum
Saam met sy produkte verskaf die verkoper die MDW (Metadata Driven Warehouse) produk, wat 'n grafiekkonfigureerder is wat ontwerp is om te help met tipiese take om datapakhuise of datakluise te vul.
Dit bevat pasgemaakte (projek-spesifieke) metadata-ontleders en klaargemaakte kode-opwekkers uit die boks.
As invoer ontvang MDW 'n datamodel, 'n konfigurasielêer vir die opstel van 'n verbinding met 'n databasis (Oracle, Teradata of Hive) en 'n paar ander instellings. Die projek-spesifieke deel, byvoorbeeld, ontplooi die model na 'n databasis. Die buite-die-boks-deel van die produk genereer grafieke en konfigurasielêers daarvoor deur data in modeltabelle te laai. In hierdie geval word grafieke (en psets) geskep vir verskeie maniere van initialisering en inkrementele werk om entiteite by te werk.
In die gevalle van Hive en RDBMS word verskillende grafieke gegenereer vir inisialisering en inkrementele data-opdaterings.
In die geval van Hive word die inkomende deltadata via Ab Initio Join verbind met die data wat in die tabel voor die opdatering was. Datalaaiers in MDW (beide in Hive en RDBMS) voeg nie net nuwe data van die delta in nie, maar sluit ook die periodes van relevansie van die data wie se primêre sleutels die delta ontvang het. Daarbenewens moet jy die onveranderde deel van die data herskryf. Maar dit moet gedoen word omdat Hive nie uitvee- of opdateringsbewerkings het nie.
In die geval van RDBMS lyk grafieke vir inkrementele data-opdatering meer optimaal, omdat RDBMS werklike opdateringsvermoëns het.
Die ontvangde delta word in 'n tussentabel in die databasis gelaai. Hierna word die delta gekoppel aan die data wat voor die opdatering in die tabel was. En dit word gedoen met behulp van SQL met behulp van 'n gegenereerde SQL-navraag. Volgende, met behulp van die SQL-opdragte delete+insert, word nuwe data van die delta in die teikentabel ingevoeg en die periodes van relevansie van die data wie se primêre sleutels die delta ontvang het, word gesluit.
Dit is nie nodig om onveranderde data te herskryf nie.
Ons het dus tot die gevolgtrekking gekom dat in die geval van Hive, MDW moet gaan om die hele tabel te herskryf omdat Hive nie 'n opdateringsfunksie het nie. En niks beter as om die data heeltemal te herskryf wanneer opdatering uitgevind is nie. In die geval van RDBMS, inteendeel, het die skeppers van die produk dit nodig gevind om die verbinding en opdatering van tabelle aan die gebruik van SQL toe te vertrou.
Vir 'n projek by Sberbank het ons 'n nuwe, herbruikbare implementering van 'n databasislaaier vir GreenPlum geskep. Dit is gedoen op grond van die weergawe wat MDW vir Teradata genereer. Dit was Teradata, en nie Oracle nie, wat die naaste en die beste hiervoor gekom het, want... is ook 'n MPP-stelsel. Die werkmetodes, sowel as die sintaksis, van Teradata en GreenPlum was soortgelyk.
Voorbeelde van MDW-kritieke verskille tussen verskillende RDBBS'e is soos volg. In GreenPlum, anders as Teradata, moet jy 'n klousule skryf wanneer jy tabelle skep
distributed by
Teradata skryf:
delete <table> all
, en in GreenPlum skryf hulle
delete from <table>
In Oracle skryf hulle vir optimaliseringsdoeleindes
delete from t where rowid in (<соединение t с дельтой>)
, en Teradata en GreenPlum skryf
delete from t where exists (select * from delta where delta.pk=t.pk)
Ons neem ook kennis dat vir Ab Initio om met GreenPlum te werk, dit nodig was om die GreenPlum-kliënt op alle nodusse van die Ab Initio-kluster te installeer. Dit is omdat ons gelyktydig vanaf alle nodusse in ons groep aan GreenPlum gekoppel het. En sodat lees vanaf GreenPlum parallel kan wees en elke parallelle Ab Initio-draad sy eie gedeelte van data van GreenPlum kan lees, moes ons 'n konstruksie plaas wat deur Ab Initio verstaan word in die "waar"-afdeling van SQL-navrae
where ABLOCAL()
en bepaal die waarde van hierdie konstruksie deur die parameterlesing vanaf die transformasiedatabasis te spesifiseer
ablocal_expr=«string_concat("mod(t.", string_filter_out("{$TABLE_KEY}","{}"), ",", (decimal(3))(number_of_partitions()),")=", (decimal(3))(this_partition()))»
, wat saamstel tot iets soos
mod(sk,10)=3
, d.w.s. jy moet vir GreenPlum 'n eksplisiete filter vir elke partisie vra. Vir ander databasisse (Teradata, Oracle), kan Ab Initio hierdie parallelisering outomaties uitvoer.
Ab Initio prestasie vergelyking tussen Hive en GreenPlum
Sberbank het 'n eksperiment uitgevoer om die prestasie van MDW-gegenereerde grafieke met betrekking tot Hive en met betrekking tot GreenPlum te vergelyk. As deel van die eksperiment was daar in die geval van Hive 5 nodusse op dieselfde groep as Ab Initio, en in die geval van GreenPlum was daar 4 nodusse op 'n aparte groepie. Dié. Hive het 'n mate van hardewarevoordeel bo GreenPlum gehad.
Ons het twee pare grafieke oorweeg wat dieselfde taak uitvoer om data in Hive en GreenPlum op te dateer. Terselfdertyd is die grafieke wat deur die MDW-konfigureerder gegenereer is bekendgestel:
- aanvanklike vrag + inkrementele vrag van willekeurig gegenereerde data in 'n Hive-tabel
- aanvanklike vrag + inkrementele vrag van willekeurig gegenereerde data in dieselfde GreenPlum-tabel
In beide gevalle (Hive en GreenPlum) het hulle oplaaie na 10 parallelle drade op dieselfde Ab Initio-groepering uitgevoer. Ab Initio het intermediêre data vir berekeninge in HDFS gestoor (in terme van Ab Initio is MFS-uitleg met HDFS gebruik). Een lyn van ewekansig gegenereerde data het in beide gevalle 200 grepe beset.
Die resultaat was soos volg:
Korf:
Aanvanklike laai in Hive
Rye ingevoeg
6 000 000
60 000 000
600 000 000
Inisialiseringsduur
aflaai in sekondes
41
203
1 601
Inkrementele laai in Hive
Aantal rye beskikbaar in
teikentabel aan die begin van die eksperiment
6 000 000
60 000 000
600 000 000
Aantal deltalyne wat toegepas is
teikentabel tydens die eksperiment
6 000 000
6 000 000
6 000 000
Duur van inkrementele
aflaai in sekondes
88
299
2 541
GreenPlum:
Aanvanklike laai in GreenPlum
Rye ingevoeg
6 000 000
60 000 000
600 000 000
Inisialiseringsduur
aflaai in sekondes
72
360
3 631
Inkrementele laai in GreenPlum
Aantal rye beskikbaar in
teikentabel aan die begin van die eksperiment
6 000 000
60 000 000
600 000 000
Aantal deltalyne wat toegepas is
teikentabel tydens die eksperiment
6 000 000
6 000 000
6 000 000
Duur van inkrementele
aflaai in sekondes
159
199
321
Ons sien dat die spoed van aanvanklike laai in beide Hive en GreenPlum lineêr afhang van die hoeveelheid data en, om redes van beter hardeware, is dit effens vinniger vir Hive as vir GreenPlum.
Inkrementele laai in Hive hang ook lineêr af van die volume van voorheen gelaaide data wat in die teikentabel beskikbaar is en gaan redelik stadig voort soos die volume groei. Dit word veroorsaak deur die behoefte om die teikentabel heeltemal te herskryf. Dit beteken dat die toepassing van klein veranderinge op groot tabelle nie 'n goeie gebruiksgeval vir Hive is nie.
Inkrementele laai in GreenPlum hang swak af van die volume van voorheen gelaaide data beskikbaar in die teikentabel en gaan redelik vinnig voort. Dit het gebeur danksy SQL Joins en die GreenPlum-argitektuur, wat die uitvee-operasie moontlik maak.
Dus, GreenPlum voeg die delta by met behulp van die delete+insert-metode, maar Hive het nie delete- of update-operasies nie, so die hele data-skikking is gedwing om heeltemal herskryf te word tydens 'n inkrementele opdatering. Die vergelyking van die vetgedrukte selle is die mees onthullende, aangesien dit ooreenstem met die mees algemene opsie vir die gebruik van hulpbron-intensiewe aflaaie. Ons sien dat GreenPlum Hive in hierdie toets met 8 keer geklop het.
Werk Ab Initio met GreenPlum in Near Real Time-modus
In hierdie eksperiment sal ons Ab Initio se vermoë toets om die GreenPlum-tabel byna intyds op te dateer met ewekansige gegenereerde stukke data. Kom ons kyk na die GreenPlum-tabel dev42_1_db_usl.TESTING_SUBJ_org_finval, waarmee ons sal werk.
Ons sal drie Ab Initio-grafieke gebruik om daarmee te werk:
1) Grafiek Create_test_data.mp – skep datalêers in HDFS met 10 rye in 6 parallelle drade. Die data is ewekansig, die struktuur daarvan is georganiseer vir invoeging in ons tabel
2) Grafiek mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset – MDW-gegenereerde grafiek deur data-invoeging in ons tabel te inisialiseer in 10 parallelle drade (toetsdata wat deur grafiek (1) gegenereer word, word gebruik)
3) Grafiek mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset – 'n grafiek gegenereer deur MDW vir inkrementele opdatering van ons tabel in 10 parallelle drade deur 'n gedeelte van vars ontvangde data (delta) gegenereer deur grafiek (1) te gebruik.
Kom ons voer die onderstaande skrif in NRT-modus uit:
- genereer 6 000 000 toetslyne
- voer 'n aanvanklike vrag plaas 6 toetsrye in 'n leë tabel
- herhaal inkrementele aflaai 5 keer
- genereer 6 000 000 toetslyne
- voer 'n inkrementele invoeging van 6 toetsrye in die tabel uit (in hierdie geval word die valid_to_ts-vervaltyd op die ou data gestel en meer onlangse data met dieselfde primêre sleutel word ingevoeg)
Hierdie scenario boots die wyse van werklike werking van 'n sekere besigheidstelsel na - 'n redelike groot gedeelte van nuwe data verskyn in reële tyd en word onmiddellik in GreenPlum gegooi.
Kom ons kyk nou na die skrif se logboek:
Begin Create_test_data.input.pset op 2020-06-04 11:49:11
Voltooi Create_test_data.input.pset op 2020-06-04 11:49:37
Begin mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset op 2020-06-04 11:49:37
Voltooi mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset op 2020-06-04 11:50:42
Begin Create_test_data.input.pset op 2020-06-04 11:50:42
Voltooi Create_test_data.input.pset op 2020-06-04 11:51:06
Begin mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset op 2020-06-04 11:51:06
Voltooi mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset op 2020-06-04 11:53:41
Begin Create_test_data.input.pset op 2020-06-04 11:53:41
Voltooi Create_test_data.input.pset op 2020-06-04 11:54:04
Begin mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset op 2020-06-04 11:54:04
Voltooi mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset op 2020-06-04 11:56:51
Begin Create_test_data.input.pset op 2020-06-04 11:56:51
Voltooi Create_test_data.input.pset op 2020-06-04 11:57:14
Begin mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset op 2020-06-04 11:57:14
Voltooi mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset op 2020-06-04 11:59:55
Begin Create_test_data.input.pset op 2020-06-04 11:59:55
Voltooi Create_test_data.input.pset op 2020-06-04 12:00:23
Begin mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset op 2020-06-04 12:00:23
Voltooi mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset op 2020-06-04 12:03:23
Begin Create_test_data.input.pset op 2020-06-04 12:03:23
Voltooi Create_test_data.input.pset op 2020-06-04 12:03:49
Begin mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset op 2020-06-04 12:03:49
Voltooi mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset op 2020-06-04 12:06:46
Dit blyk hierdie prentjie:
Grafiek
Begin Tyd
Eindtyd
Lengte
Skep_toets_data.invoer.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
Skep_toets_data.invoer.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
Skep_toets_data.invoer.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
Skep_toets_data.invoer.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
Skep_toets_data.invoer.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
Skep_toets_data.invoer.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
Ons sien dat 6 inkrementlyne in 000 minute verwerk word, wat redelik vinnig is.
Die data in die teikentabel blyk soos volg versprei te wees:
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;
Jy kan die ooreenstemming van die ingevoegde data sien met die tye wat die grafieke bekendgestel is.
Dit beteken dat u die inkrementele laai van data in GreenPlum in Ab Initio met 'n baie hoë frekwensie kan uitvoer en 'n hoë spoed waarneem om hierdie data in GreenPlum in te voeg. Dit sal natuurlik nie moontlik wees om een keer per sekonde te begin nie, aangesien Ab Initio, soos enige ETL-instrument, tyd benodig om te "begin" wanneer dit geloods word.
Gevolgtrekking
Ab Initio word tans by Sberbank gebruik om 'n Unified Semantic Data Layer (ESS) te bou. Hierdie projek behels die bou van 'n verenigde weergawe van die toestand van verskeie banksake-entiteite. Inligting kom uit verskeie bronne, waarvan die replikas op Hadoop voorberei is. Op grond van besigheidsbehoeftes word 'n datamodel voorberei en datatransformasies word beskryf. Ab Initio laai inligting in die ESN en die afgelaaide data is nie net van belang vir die besigheid op sigself nie, maar dien ook as 'n bron vir die bou van datamars. Terselfdertyd laat die funksionaliteit van die produk jou toe om verskeie stelsels as 'n ontvanger te gebruik (Hive, Greenplum, Teradata, Oracle), wat dit moontlik maak om data maklik vir 'n besigheid voor te berei in die verskillende formate wat dit vereis.
Ab Initio se vermoëns is wyd; byvoorbeeld, die ingeslote MDW-raamwerk maak dit moontlik om tegniese en besigheidshistoriese data uit die boks te bou. Vir ontwikkelaars maak Ab Initio dit moontlik om nie die wiel weer uit te vind nie, maar om baie bestaande funksionele komponente te gebruik, wat in wese biblioteke is wat nodig is wanneer met data gewerk word.
Die skrywer is 'n kenner in die professionele gemeenskap van Sberbank SberProfi DWH/BigData. Die SberProfi DWH/BigData professionele gemeenskap is verantwoordelik vir die ontwikkeling van bevoegdhede in gebiede soos die Hadoop-ekosisteem, Teradata, Oracle DB, GreenPlum, sowel as BI-instrumente Qlik, SAP BO, Tableau, ens.
Bron: will.com