Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum

Fa un temps, ens vam enfrontar a la qüestió de triar una eina ETL per treballar amb Big Data. La solució Informatica BDM utilitzada anteriorment no ens va adequar a causa d'una funcionalitat limitada. El seu ús s'ha reduït a un marc per llançar ordres spark-submit. Al mercat no hi havia molts anàlegs que, en principi, fossin capaços de treballar amb el volum de dades que tractem cada dia. Al final vam triar Ab Initio. Durant les demostracions pilot, el producte va mostrar una velocitat de processament de dades molt alta. Gairebé no hi ha informació sobre Ab Initio en rus, així que vam decidir parlar de la nostra experiència a Habré.

Ab Initio té moltes transformacions clàssiques i inusuals, el codi de les quals es pot ampliar mitjançant el seu propi llenguatge PDL. Per a una petita empresa, una eina tan poderosa probablement serà excessiva i la majoria de les seves capacitats poden ser cares i sense utilitzar. Però si la vostra escala és propera a la de Sberov, llavors Ab Initio us pot interessar.

Ajuda a una empresa a acumular coneixement globalment i a desenvolupar un ecosistema, i un desenvolupador a millorar les seves habilitats en ETL, millorar el seu coneixement a l'intèrpret d'ordres, ofereix l'oportunitat de dominar el llenguatge PDL, ofereix una imatge visual dels processos de càrrega i simplifica el desenvolupament. a causa de l'abundància de components funcionals.

En aquest post parlaré de les capacitats d'Ab Initio i oferiré característiques comparatives del seu treball amb Hive i GreenPlum.

  • Descripció del framework MDW i treball en la seva personalització per a GreenPlum
  • Comparació del rendiment Ab Initio entre Hive i GreenPlum
  • Treballant Ab Initio amb GreenPlum en mode gairebé en temps real


La funcionalitat d'aquest producte és molt àmplia i requereix molt de temps per estudiar. Tanmateix, amb les habilitats de treball adequades i els paràmetres de rendiment adequats, els resultats del processament de dades són molt impressionants. L'ús d'Ab Initio per a un desenvolupador pot proporcionar una experiència interessant. Aquesta és una nova visió del desenvolupament d'ETL, un híbrid entre un entorn visual i el desenvolupament de descàrregues en un llenguatge semblant a un script.

Les empreses estan desenvolupant els seus ecosistemes i aquesta eina és més útil que mai. Amb Ab Initio, podeu acumular coneixements sobre el vostre negoci actual i utilitzar-los per ampliar i obrir noves empreses. Les alternatives a Ab Initio inclouen entorns de desenvolupament visual Informatica BDM i entorns de desenvolupament no visual Apache Spark.

Descripció de Ab Initio

Ab Initio, com altres eines ETL, és una col·lecció de productes.

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum

Ab Initio GDE (Graphical Development Environment) és un entorn per al desenvolupador en el qual configura transformacions de dades i les connecta amb fluxos de dades en forma de fletxes. En aquest cas, aquest conjunt de transformacions s'anomena gràfic:

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum

Les connexions d'entrada i sortida dels components funcionals són ports i contenen camps calculats dins de les transformacions. Diversos gràfics connectats per fluxos en forma de fletxes en l'ordre de la seva execució s'anomenen pla.

Hi ha diversos centenars de components funcionals, que és molt. Molts d'ells estan molt especialitzats. Les capacitats de les transformacions clàssiques en Ab Initio són més àmplies que en altres eines ETL. Per exemple, Join té múltiples sortides. A més del resultat de connectar conjunts de dades, podeu obtenir registres de sortida dels conjunts de dades d'entrada les claus dels quals no s'han pogut connectar. També podeu obtenir rebutjos, errors i un registre de l'operació de transformació, que es pot llegir a la mateixa columna que un fitxer de text i processar-lo amb altres transformacions:

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum

O, per exemple, podeu materialitzar un receptor de dades en forma de taula i llegir-ne dades a la mateixa columna.

Hi ha transformacions originals. Per exemple, la transformació Scan té una funcionalitat similar a les funcions analítiques. Hi ha transformacions amb noms explicatius: Crear dades, Llegir Excel, Normalitzar, Ordenar dins de grups, Executar programa, Executar SQL, Unir-se amb base de dades, etc. Els gràfics poden utilitzar paràmetres de temps d'execució, inclosa la possibilitat de passar paràmetres de o a el sistema operatiu. Els fitxers amb un conjunt ja fet de paràmetres passats al gràfic s'anomenen conjunts de paràmetres (psets).

Com era d'esperar, Ab Initio GDE té el seu propi repositori anomenat EME (Enterprise Meta Environment). Els desenvolupadors tenen l'oportunitat de treballar amb versions locals de codi i comprovar els seus desenvolupaments al repositori central.

És possible, durant l'execució o després d'executar el gràfic, fer clic a qualsevol flux que connecti la transformació i mirar les dades que van passar entre aquestes transformacions:

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum

També és possible fer clic a qualsevol flux i veure els detalls del seguiment: quants paral·lels ha treballat la transformació, quantes línies i bytes s'han carregat en quin dels paral·lels:

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum

És possible dividir l'execució del gràfic en fases i marcar que cal fer primer algunes transformacions (en la fase zero), les següents a la primera fase, les següents a la segona fase, etc.

Per a cada transformació, podeu triar l'anomenat disseny (on s'executarà): sense paral·lels o en fils paral·lels, el nombre dels quals es pot especificar. Al mateix temps, els fitxers temporals que Ab Initio crea quan s'executen transformacions es poden col·locar tant al sistema de fitxers del servidor com a HDFS.

En cada transformació, basant-se en la plantilla predeterminada, podeu crear el vostre propi script en PDL, que és una mica com un shell.

Amb PDL, podeu ampliar la funcionalitat de les transformacions i, en particular, podeu generar de forma dinàmica (en temps d'execució) fragments de codi arbitraris en funció dels paràmetres d'execució.

Ab Initio també té una integració ben desenvolupada amb el sistema operatiu mitjançant shell. Concretament, Sberbank utilitza linux ksh. Podeu intercanviar variables amb l'intèrpret d'ordres i utilitzar-les com a paràmetres de gràfic. Podeu trucar a l'execució de gràfics Ab Initio des del shell i administrar Ab Initio.

A més d'Ab Initio GDE, s'inclouen molts altres productes al lliurament. Hi ha el seu propi sistema de cooperació amb la pretensió d'anomenar-se sistema operatiu. Hi ha un Control>Centre on podeu programar i controlar els fluxos de descàrrega. Hi ha productes per fer desenvolupament a un nivell més primitiu del que permet Ab Initio GDE.

Descripció del framework MDW i treball en la seva personalització per a GreenPlum

Juntament amb els seus productes, el proveïdor subministra el producte MDW (Metadata Driven Warehouse), que és un configurador de gràfics dissenyat per ajudar amb les tasques típiques d'omplir magatzems de dades o magatzems de dades.

Conté analitzadors de metadades personalitzats (específics del projecte) i generadors de codi ja preparats.

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum
Com a entrada, MDW rep un model de dades, un fitxer de configuració per establir una connexió a una base de dades (Oracle, Teradata o Hive) i algunes altres configuracions. La part específica del projecte, per exemple, desplega el model a una base de dades. La part del producte del producte genera gràfics i fitxers de configuració carregant dades a taules de models. En aquest cas, es creen gràfics (i psets) per a diversos modes d'inicialització i treball incremental en l'actualització d'entitats.

En els casos de Hive i RDBMS, es generen diferents gràfics per a la inicialització i les actualitzacions incrementals de dades.

En el cas de Hive, les dades delta entrants es connecten mitjançant Ab Initio Join amb les dades que hi havia a la taula abans de l'actualització. Els carregadors de dades a MDW (tant a Hive com a RDBMS) no només insereixen dades noves del delta, sinó que també tanquen els períodes de rellevància de les dades les claus primàries de les quals van rebre el delta. A més, heu de reescriure la part sense canvis de les dades. Però això s'ha de fer perquè Hive no té operacions d'eliminació o actualització.

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum

En el cas dels RDBMS, els gràfics per a l'actualització incremental de dades semblen més òptims, perquè els RDBMS tenen capacitats reals d'actualització.

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum

El delta rebut es carrega en una taula intermèdia de la base de dades. Després d'això, el delta es connecta a les dades que hi havia a la taula abans de l'actualització. I això es fa mitjançant SQL mitjançant una consulta SQL generada. A continuació, utilitzant les ordres SQL delete+insert, s'insereixen dades noves del delta a la taula de destinació i es tanquen els períodes de rellevància de les dades les claus primàries de les quals van rebre el delta.
No cal reescriure les dades sense canvis.

Així que vam arribar a la conclusió que en el cas de Hive, MDW ha d'anar a reescriure tota la taula perquè Hive no té una funció d'actualització. I res millor que reescriure completament les dades quan s'ha inventat l'actualització. En el cas dels RDBMS, per contra, els creadors del producte van trobar necessari confiar la connexió i l'actualització de les taules a l'ús d'SQL.

Per a un projecte a Sberbank, vam crear una implementació nova i reutilitzable d'un carregador de bases de dades per a GreenPlum. Això es va fer a partir de la versió que genera MDW per a Teradata. Va ser Teradata, i no Oracle, qui es va apropar més i millor per això, perquè... també és un sistema MPP. Els mètodes de treball, així com la sintaxi, de Teradata i GreenPlum van resultar ser similars.

A continuació es mostren exemples de diferències crítiques per a MDW entre diferents RDBMS. A GreenPlum, a diferència de Teradata, en crear taules cal escriure una clàusula

distributed by

Teradata escriu:

delete <table> all

, i a GreenPlum escriuen

delete from <table>

A Oracle, escriuen amb finalitats d'optimització

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

, i Teradata i GreenPlum escriuen

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

També observem que perquè Ab Initio funcionés amb GreenPlum, era necessari instal·lar el client GreenPlum a tots els nodes del clúster Ab Initio. Això es deu al fet que ens vam connectar a GreenPlum simultàniament des de tots els nodes del nostre clúster. I perquè la lectura de GreenPlum fos paral·lela i cada fil d'Ab Initio paral·lel llegís la seva pròpia part de dades de GreenPlum, hem hagut de col·locar una construcció que entén Ab Initio a la secció "on" de les consultes SQL.

where ABLOCAL()

i determineu el valor d'aquesta construcció especificant la lectura del paràmetre de la base de dades de transformació

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

, que es compila en alguna cosa així

mod(sk,10)=3

, és a dir heu de demanar a GreenPlum un filtre explícit per a cada partició. Per a altres bases de dades (Teradata, Oracle), Ab Initio pot realitzar aquesta paral·lelització automàticament.

Comparació del rendiment Ab Initio entre Hive i GreenPlum

Sberbank va realitzar un experiment per comparar el rendiment dels gràfics generats per MDW en relació amb Hive i en relació amb GreenPlum. Com a part de l'experiment, en el cas de Hive hi havia 5 nodes al mateix clúster que Ab Initio, i en el cas de GreenPlum hi havia 4 nodes en un clúster separat. Aquells. Hive tenia algun avantatge de maquinari sobre GreenPlum.

Hem considerat dos parells de gràfics que realitzen la mateixa tasca d'actualització de dades a Hive i GreenPlum. Paral·lelament, es van llançar els gràfics generats pel configurador MDW:

  • càrrega inicial + càrrega incremental de dades generades aleatòriament en una taula Hive
  • càrrega inicial + càrrega incremental de dades generades aleatòriament a la mateixa taula GreenPlum

En ambdós casos (Hive i GreenPlum) van executar càrregues a 10 fils paral·lels al mateix clúster Ab Initio. Ab Initio va desar les dades intermèdies per als càlculs en HDFS (en termes d'Ab Initio, es va utilitzar el disseny MFS mitjançant HDFS). Una línia de dades generades aleatòriament ocupava 200 bytes en ambdós casos.

El resultat va ser així:

Hivern:

Càrrega inicial a Hive

S'han inserit files
6 000 000
60 000 000
600 000 000

Durada de la inicialització
descàrregues en segons
41
203
1 601

Càrrega incremental a Hive

Nombre de files disponibles a
taula d'objectius al començament de l'experiment
6 000 000
60 000 000
600 000 000

Nombre de línies delta aplicades
taula d'objectius durant l'experiment
6 000 000
6 000 000
6 000 000

Durada incremental
descàrregues en segons
88
299
2 541

GreenPlum:

Càrrega inicial a GreenPlum

S'han inserit files
6 000 000
60 000 000
600 000 000

Durada de la inicialització
descàrregues en segons
72
360
3 631

Càrrega incremental a GreenPlum

Nombre de files disponibles a
taula d'objectius al començament de l'experiment
6 000 000
60 000 000
600 000 000

Nombre de línies delta aplicades
taula d'objectius durant l'experiment
6 000 000
6 000 000
6 000 000

Durada incremental
descàrregues en segons
159
199
321

Veiem que la velocitat de càrrega inicial tant a Hive com a GreenPlum depèn linealment de la quantitat de dades i, per raons de millor maquinari, és lleugerament més ràpida per a Hive que per a GreenPlum.

La càrrega incremental a Hive també depèn linealment del volum de dades carregades prèviament disponibles a la taula de destinació i avança bastant lentament a mesura que el volum creix. Això és causat per la necessitat de reescriure completament la taula de destinació. Això vol dir que aplicar petits canvis a taules grans no és un bon cas d'ús per a Hive.

La càrrega incremental a GreenPlum depèn dèbilment del volum de dades carregades prèviament disponibles a la taula de destinació i avança amb força rapidesa. Això va passar gràcies a SQL Joins i a l'arquitectura GreenPlum, que permet l'operació d'eliminació.

Per tant, GreenPlum afegeix el delta mitjançant el mètode delete+insert, però Hive no té operacions de supressió o actualització, de manera que tota la matriu de dades es va obligar a reescriure completament durant una actualització incremental. La comparació de les cel·les destacades en negreta és la més reveladora, ja que correspon a l'opció més comuna per utilitzar descàrregues intensives en recursos. Veiem que GreenPlum va vèncer a Hive en aquesta prova 8 vegades.

Treballant Ab Initio amb GreenPlum en mode gairebé en temps real

En aquest experiment, provarem la capacitat d'Ab Initio d'actualitzar la taula GreenPlum amb fragments de dades generats aleatòriament en temps gairebé real. Considerem la taula GreenPlum dev42_1_db_usl.TESTING_SUBJ_org_finval, amb la qual treballarem.

Utilitzarem tres gràfics Ab Initio per treballar-hi:

1) Gràfic Create_test_data.mp: crea fitxers de dades en HDFS amb 10 de files en 6 fils paral·lels. Les dades són aleatòries, la seva estructura està organitzada per a la inserció a la nostra taula

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum

2) Gràfic mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset: gràfic generat per MDW inicialitzant la inserció de dades a la nostra taula en 10 fils paral·lels (s'utilitzen les dades de prova generades pel gràfic (1))

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum

3) Gràfic mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset: un gràfic generat per MDW per a l'actualització incremental de la nostra taula en 10 fils paral·lels utilitzant una part de les dades recentment rebudes (delta) generades pel gràfic (1)

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum

Executem l'script següent en mode NRT:

  • generar 6 de línies de prova
  • realitzeu una càrrega inicial inseriu 6 de files de prova en una taula buida
  • repetiu la baixada incremental 5 vegades
    • generar 6 de línies de prova
    • realitzeu una inserció incremental de 6 de files de prova a la taula (en aquest cas, el temps de caducitat valid_to_ts s'estableix a les dades antigues i s'insereixen les dades més recents amb la mateixa clau primària)

Aquest escenari emula el mode de funcionament real d'un determinat sistema empresarial: una part força gran de dades noves apareixen en temps real i s'aboquen immediatament a GreenPlum.

Ara mirem el registre de l'script:

Inicieu Create_test_data.input.pset a 2020-06-04 11:49:11
Finalitza Create_test_data.input.pset a 2020-06-04 11:49:37
Inicieu mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset a 2020-06-04 11:49:37
Finalitza mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset a 2020-06-04 11:50:42
Inicieu Create_test_data.input.pset a 2020-06-04 11:50:42
Finalitza Create_test_data.input.pset a 2020-06-04 11:51:06
Inicieu mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset a 2020-06-04 11:51:06
Finalitza mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset a 2020-06-04 11:53:41
Inicieu Create_test_data.input.pset a 2020-06-04 11:53:41
Finalitza Create_test_data.input.pset a 2020-06-04 11:54:04
Inicieu mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset a 2020-06-04 11:54:04
Finalitza mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset a 2020-06-04 11:56:51
Inicieu Create_test_data.input.pset a 2020-06-04 11:56:51
Finalitza Create_test_data.input.pset a 2020-06-04 11:57:14
Inicieu mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset a 2020-06-04 11:57:14
Finalitza mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset a 2020-06-04 11:59:55
Inicieu Create_test_data.input.pset a 2020-06-04 11:59:55
Finalitza Create_test_data.input.pset a 2020-06-04 12:00:23
Inicieu mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset a 2020-06-04 12:00:23
Finalitza mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset a 2020-06-04 12:03:23
Inicieu Create_test_data.input.pset a 2020-06-04 12:03:23
Finalitza Create_test_data.input.pset a 2020-06-04 12:03:49
Inicieu mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset a 2020-06-04 12:03:49
Finalitza mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset a 2020-06-04 12:06:46

Resulta aquesta imatge:

Gràfic
Hora d'inici
Acabar el temps
Longitud

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

Veiem que es processen 6 de línies d'increment en 000 minuts, la qual cosa és bastant ràpid.
Les dades de la taula objectiu es van distribuir de la següent manera:

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;

Quan tens escales Sber. Utilitzant Ab Initio amb Hive i GreenPlum
Podeu veure la correspondència de les dades inserides amb els moments en què es van llançar els gràfics.
Això vol dir que podeu executar una càrrega incremental de dades a GreenPlum en Ab Initio amb una freqüència molt alta i observar una gran velocitat d'inserció d'aquestes dades a GreenPlum. Per descomptat, no serà possible llançar-se un cop per segon, ja que Ab Initio, com qualsevol eina ETL, requereix temps per "iniciar-se" quan es llança.

Conclusió

Ab Initio s'utilitza actualment a Sberbank per crear una capa de dades semàntiques unificades (ESS). Aquest projecte consisteix a construir una versió unificada de l'estat de diverses entitats empresarials bancàries. La informació prové de diverses fonts, les rèpliques de les quals es preparen a Hadoop. En funció de les necessitats del negoci, es prepara un model de dades i es descriuen les transformacions de dades. Ab Initio carrega informació a l'ESN i les dades descarregades no només són d'interès per a l'empresa en si mateixes, sinó que també serveixen com a font per crear data marts. Al mateix temps, la funcionalitat del producte permet utilitzar diversos sistemes com a receptor (Hive, Greenplum, Teradata, Oracle), cosa que permet preparar fàcilment dades per a un negoci en els diferents formats que requereix.

Les capacitats d'Ab Initio són àmplies; per exemple, el marc MDW inclòs permet crear dades històriques tècniques i comercials fora de la caixa. Per als desenvolupadors, Ab Initio permet no reinventar la roda, sinó utilitzar molts components funcionals existents, que són essencialment biblioteques necessàries per treballar amb dades.

L'autor és un expert de la comunitat professional de Sberbank SberProfi DWH/BigData. La comunitat professional de SberProfi DWH/BigData és responsable de desenvolupar competències en àrees com l'ecosistema Hadoop, Teradata, Oracle DB, GreenPlum, així com les eines de BI Qlik, SAP BO, Tableau, etc.

Font: www.habr.com

Afegeix comentari