Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum

Пред извесно време се соочивме со прашањето за избор на ETL алатка за работа со Big Data. Претходно користеното решение Informatica BDM не ни одговараше поради ограничената функционалност. Неговата употреба е сведена на рамка за лансирање на команди за испраќање искра. Немаше многу аналози на пазарот кои, во принцип, беа способни да работат со обемот на податоци со кои се занимаваме секој ден. На крајот го избравме Ab Initio. За време на пилот демонстрациите, производот покажа многу висока брзина на обработка на податоци. Речиси нема информации за Ab Initio на руски, па решивме да зборуваме за нашето искуство на Habré.

Ab Initio има многу класични и необични трансформации, чиј код може да се прошири со користење на сопствен PDL јазик. За мал бизнис, таква моќна алатка најверојатно ќе биде претерано, а повеќето од нејзините способности може да бидат скапи и неискористени. Но, ако вашата вага е блиска до онаа на Сберов, тогаш Ab Initio може да ви биде интересен.

Тоа му помага на бизнисот да акумулира знаење на глобално ниво и да развие екосистем, а на развивачот да ги подобри своите вештини во ETL, да го подобри своето знаење во школката, дава можност да го совлада јазикот PDL, дава визуелна слика за процесите на вчитување и го поедноставува развојот поради изобилството на функционални компоненти.

Во овој пост ќе зборувам за можностите на Ab Initio и ќе дадам компаративни карактеристики на неговата работа со Hive и GreenPlum.

  • Опис на рамката MDW и работа на нејзино прилагодување за GreenPlum
  • Споредба на перформансите Ab Initio помеѓу Hive и GreenPlum
  • Работа Ab Initio со GreenPlum во режим речиси реално време


Функционалноста на овој производ е многу широка и бара многу време за проучување. Сепак, со соодветни работни вештини и правилни поставки за перформанси, резултатите од обработката на податоците се многу импресивни. Користењето Ab Initio за развивач може да обезбеди интересно искуство. Ова е ново гледиште за развојот на ETL, хибрид помеѓу визуелно опкружување и развој на преземање на јазик сличен на скрипта.

Бизнисите ги развиваат своите екосистеми и оваа алатка е корисна повеќе од кога било. Со Ab Initio, можете да акумулирате знаење за вашиот тековен бизнис и да го користите ова знаење за да ги проширите старите и да отворите нови бизниси. Алтернативите на Ab Initio вклучуваат средини за визуелен развој Informatica BDM и невизуелни развојни околини Apache Spark.

Опис на Ab Initio

Ab Initio, како и другите ETL алатки, е колекција на производи.

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum

Ab Initio GDE (Graphical Development Environment) е средина за развивачот во која тој ги конфигурира трансформациите на податоци и ги поврзува со тековите на податоци во форма на стрелки. Во овој случај, таков сет на трансформации се нарекува график:

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum

Влезните и излезните врски на функционалните компоненти се порти и содржат полиња пресметани во рамките на трансформациите. Неколку графикони поврзани со текови во форма на стрелки по редоследот на нивното извршување се нарекуваат план.

Има неколку стотици функционални компоненти, што е многу. Многу од нив се високо специјализирани. Можностите на класичните трансформации во Ab Initio се пошироки отколку кај другите ETL алатки. На пример, Join има повеќе излези. Покрај резултатот од поврзувањето на збирките на податоци, можете да добиете излезни записи на влезни збирки на податоци чии клучеви не може да се поврзат. Можете исто така да добиете отфрлања, грешки и дневник на операцијата за трансформација, што може да се прочита во истата колона како текстуална датотека и да се обработи со други трансформации:

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum

Или, на пример, можете да материјализирате приемник на податоци во форма на табела и да читате податоци од него во истата колона.

Има оригинални трансформации. На пример, трансформацијата Scan има функционалност слична на аналитичките функции. Има трансформации со самообјаснувачки имиња: Креирај податоци, Читај Excel, Нормализирај, Подреди во групи, Изврши програма, Стартувај SQL, Придружи се со DB, итн. оперативниот систем. Датотеките со готово множество параметри предадени на графикот се нарекуваат множества на параметри (псети).

Како што се очекуваше, Ab Initio GDE има свое складиште наречено EME (Enterprise Meta Environment). Програмерите имаат можност да работат со локални верзии на кодот и да ги проверат нивните случувања во централното складиште.

Можно е, за време на извршувањето или по извршувањето на графикот, да кликнете на кој било тек што ја поврзува трансформацијата и да ги погледнете податоците што поминале помеѓу овие трансформации:

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum

Исто така, можно е да кликнете на кој било поток и да видите детали за следење - во колку паралели функционирала трансформацијата, колку линии и бајти биле вчитани во која од паралелите:

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum

Можно е извршувањето на графикот да се подели на фази и да се означи дека прво треба да се извршат некои трансформации (во нулта фаза), следните во првата фаза, следните во втората фаза итн.

За секоја трансформација, можете да го изберете таканаречениот распоред (каде што ќе се изврши): без паралели или во паралелни нишки, чиј број може да се наведе. Во исто време, привремените датотеки што Ab Initio ги создава кога трансформациите се извршуваат може да се стават и во датотечниот систем на серверот и во HDFS.

Во секоја трансформација, врз основа на стандардниот шаблон, можете да креирате своја сопствена скрипта во PDL, што е малку како школка.

Со PDL, можете да ја проширите функционалноста на трансформациите и, особено, можете динамички (за време на извршување) да генерирате произволни фрагменти од код во зависност од параметрите за време на траење.

Ab Initio, исто така, има добро развиена интеграција со ОС преку школка. Поточно, Сбербанк користи Linux ksh. Можете да разменувате променливи со школка и да ги користите како параметри на графикот. Можете да го повикате извршувањето на графиконите Ab Initio од школката и да администрирате Ab Initio.

Покрај Ab Initio GDE, во испораката се вклучени и многу други производи. Постои сопствен Co>Operation System со барање да се нарече оперативен систем. Постои Контрола>Центар каде што можете да закажувате и да ги следите тековите на преземање. Постојат производи за правење развој на попримитивно ниво отколку што дозволува Ab Initio GDE.

Опис на рамката MDW и работа на нејзино прилагодување за GreenPlum

Заедно со своите производи, продавачот го снабдува производот MDW (Metadata Driven Warehouse), кој е конфигуратор на графикони дизајниран да помогне во типичните задачи за пополнување на складишта за податоци или сефови на податоци.

Содржи прилагодени (специфични за проектот) анализатори на метаподатоци и готови генератори на код надвор од кутијата.

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum
Како влез, MDW добива модел на податоци, конфигурациска датотека за поставување врска со база на податоци (Oracle, Teradata или Hive) и некои други поставки. Специфичниот дел за проектот, на пример, го распоредува моделот во базата на податоци. Делот од производот надвор од кутијата генерира графикони и конфигурациски датотеки за нив со вчитување податоци во табелите на моделите. Во овој случај, графиконите (и псетите) се креираат за неколку начини на иницијализација и инкрементална работа на ажурирање ентитети.

Во случаите на Hive и RDBMS, се генерираат различни графикони за иницијализација и постепено ажурирање на податоците.

Во случајот на Hive, дојдовните делта податоци се поврзуваат преку Ab Initio Join со податоците што беа во табелата пред ажурирањето. Натоварувачите на податоци во MDW (и во Hive и RDBMS) не само што вметнуваат нови податоци од делтата, туку и ги затвораат периодите на релевантност на податоците чии примарни клучеви ја примиле делтата. Покрај тоа, треба да го преработите непроменетиот дел од податоците. Но, ова мора да се направи бидејќи Hive нема операции за бришење или ажурирање.

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum

Во случајот на RDBMS, графиконите за постепено ажурирање на податоците изгледаат пооптимално, бидејќи RDBMS имаат реални можности за ажурирање.

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum

Примената делта се вчитува во средна табела во базата на податоци. По ова, делтата е поврзана со податоците што беа во табелата пред ажурирањето. И ова е направено со користење на SQL користејќи генерирано SQL барање. Следно, со користење на командите SQL delete+insert, новите податоци од делтата се вметнуваат во целната табела и периодите на релевантност на податоците чии примарни клучеви ја примиле делтата се затворени.
Нема потреба да се препишуваат непроменети податоци.

Така, дојдовме до заклучок дека во случајот со Hive, MDW мора да оди да ја преработи целата табела бидејќи Hive нема функција за ажурирање. И ништо подобро од целосно препишување на податоците кога ажурирањето е измислено. Во случајот со RDBMS, напротив, креаторите на производот најдоа дека е неопходно поврзувањето и ажурирањето на табелите да го доверат на употребата на SQL.

За проект во Сбербанк, создадовме нова, повеќекратна имплементација на вчитувач на база на податоци за GreenPlum. Ова беше направено врз основа на верзијата што MDW ја генерира за Teradata. Терадата, а не Оракл, беше најблиску и најдобро за ова, бидејќи ... е исто така MPP систем. Работните методи, како и синтаксата на Teradata и GreenPlum се покажаа слични.

Примери за MDW-критични разлики помеѓу различни RDBMS се како што следува. Во GreenPlum, за разлика од Teradata, кога креирате табели треба да напишете клаузула

distributed by

Терадата пишува:

delete <table> all

, а во GreenPlum пишуваат

delete from <table>

Во Oracle, за оптимизација тие пишуваат

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

, а пишуваат Teradata и GreenPlum

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

Исто така, забележуваме дека за Ab Initio да работи со GreenPlum, неопходно беше да се инсталира клиентот GreenPlum на сите јазли од кластерот Ab Initio. Тоа е затоа што се поврзавме на GreenPlum истовремено од сите јазли во нашиот кластер. И за да може читањето од GreenPlum да биде паралелно и секоја паралелна нишка Ab Initio да чита свој дел од податоците од GreenPlum, моравме да поставиме конструкција што ја разбира Ab Initio во делот „каде“ на SQL прашања.

where ABLOCAL()

и да ја одредите вредноста на оваа конструкција со наведување на читањето на параметарот од базата на податоци за трансформација

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

, кој се компајлира на нешто слично

mod(sk,10)=3

, т.е. треба да го поттикнете GreenPlum со експлицитен филтер за секоја партиција. За други бази на податоци (Teradata, Oracle), Ab Initio може автоматски да ја изврши оваа паралелизација.

Споредба на перформансите Ab Initio помеѓу Hive и GreenPlum

Сбербанк спроведе експеримент за да ги спореди перформансите на графиконите генерирани од MDW во однос на Hive и во однос на GreenPlum. Како дел од експериментот, во случајот Hive имаше 5 јазли на истиот кластер како Ab Initio, а во случајот на GreenPlum имаше 4 јазли на посебен кластер. Оние. Hive имаше одредена хардверска предност во однос на GreenPlum.

Разгледавме два пара графикони кои ја извршуваат истата задача за ажурирање на податоците во Hive и GreenPlum. Во исто време, беа лансирани графиконите генерирани од конфигураторот MDW:

  • почетно оптоварување + зголемено оптоварување на случајно генерирани податоци во табела Hive
  • почетно оптоварување + зголемено оптоварување на случајно генерирани податоци во истата табела GreenPlum

Во двата случаи (Hive и GreenPlum) тие извршија поставувања на 10 паралелни нишки на истиот Ab Initio кластер. Ab Initio зачувал средни податоци за пресметки во HDFS (во однос на Ab Initio, користен е распоред на MFS со помош на HDFS). Една линија случајно генерирани податоци зафаќала 200 бајти во двата случаи.

Резултатот беше вака:

Кошница:

Почетно вчитување во Hive

Вметнати редови
6 000 000
60 000 000
600 000 000

Времетраење на иницијализацијата
преземања за секунди
41
203
1 601

Инкрементално вчитување во Hive

Број на редови достапни во
целна табела на почетокот на експериментот
6 000 000
60 000 000
600 000 000

Број на делта линии што се применуваат на
целна табела за време на експериментот
6 000 000
6 000 000
6 000 000

Времетраење на инкрементално
преземања за секунди
88
299
2 541

Зелена слива:

Почетно вчитување во GreenPlum

Вметнати редови
6 000 000
60 000 000
600 000 000

Времетраење на иницијализацијата
преземања за секунди
72
360
3 631

Инкрементално вчитување во GreenPlum

Број на редови достапни во
целна табела на почетокот на експериментот
6 000 000
60 000 000
600 000 000

Број на делта линии што се применуваат на
целна табела за време на експериментот
6 000 000
6 000 000
6 000 000

Времетраење на инкрементално
преземања за секунди
159
199
321

Гледаме дека брзината на почетното вчитување и во Hive и во GreenPlum линеарно зависи од количината на податоци и, поради подобар хардвер, таа е малку поголема за Hive отколку за GreenPlum.

Инкременталното вчитување во Hive, исто така, линеарно зависи од обемот на претходно вчитаните податоци достапни во целната табела и продолжува доста бавно како што обемот расте. Ова е предизвикано од потребата целосно да се препише целната табела. Ова значи дека примената на мали промени на огромни табели не е добар случај за употреба за Hive.

Инкременталното вчитување во GreenPlum слабо зависи од обемот на претходно вчитаните податоци достапни во целната табела и продолжува доста брзо. Ова се случи благодарение на SQL Joins и архитектурата GreenPlum, која овозможува операција за бришење.

Значи, GreenPlum ја додава делтата користејќи го методот delete+insert, но Hive нема операции за бришење или ажурирање, така што целата низа на податоци беше принудена целосно да се препише за време на постепено ажурирање. Споредбата на ќелиите означени со задебелени букви е најоткривачка, бидејќи одговара на најчестата опција за користење преземања со интензивни ресурси. Гледаме дека GreenPlum го победи Хив во овој тест за 8 пати.

Работа Ab Initio со GreenPlum во режим речиси реално време

Во овој експеримент, ќе ја тестираме способноста на Ab Initio да ја ажурира табелата GreenPlum со случајно генерирани делови од податоци во речиси реално време. Да ја разгледаме табелата GreenPlum dev42_1_db_usl.TESTING_SUBJ_org_finval, со која ќе работиме.

Ќе користиме три графикони Ab Initio за да работиме со него:

1) График Create_test_data.mp – создава датотеки со податоци во HDFS со 10 редови во 6 паралелни нишки. Податоците се случајни, нивната структура е организирана за вметнување во нашата табела

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum

2) График mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset – График генериран од MDW со иницијализирање на вметнување податоци во нашата табела во 10 паралелни нишки (податоци за тестирање генерирани од графиконот (1) се користат)

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum

3) График mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset – графикон генериран од MDW за постепено ажурирање на нашата табела во 10 паралелни нишки користејќи дел од свежо примените податоци (делта) генерирани од графиконот (1)

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum

Ајде да ја извршиме долунаведената скрипта во режим NRT:

  • генерира 6 тест линии
  • изведете почетно оптоварување вметнете 6 тест редови во празна табела
  • повторете го постепеното преземање 5 пати
    • генерира 6 тест линии
    • изврши инкрементално вметнување од 6 тест редови во табелата (во овој случај, времето на истекување на valid_to_ts е поставено на старите податоци и се вметнуваат понови податоци со истиот примарен клуч)

Ова сценарио го имитира начинот на реално функционирање на одреден деловен систем - прилично голем дел од новите податоци се појавуваат во реално време и веднаш се истураат во GreenPlum.

Сега да го погледнеме дневникот на сценариото:

Започнете Create_test_data.input.pset на 2020 06:04:11
Заврши Create_test_data.input.pset на 2020 06:04:11
Започнете mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020 06:04:11
Завршете mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020 06:04:11
Започнете Create_test_data.input.pset на 2020 06:04:11
Заврши Create_test_data.input.pset на 2020 06:04:11
Започнете mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020 06:04:11
Заврши mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020 06:04:11
Започнете Create_test_data.input.pset на 2020 06:04:11
Заврши Create_test_data.input.pset на 2020 06:04:11
Започнете mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020 06:04:11
Заврши mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020 06:04:11
Започнете Create_test_data.input.pset на 2020 06:04:11
Заврши Create_test_data.input.pset на 2020 06:04:11
Започнете mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020 06:04:11
Заврши mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020 06:04:11
Започнете Create_test_data.input.pset на 2020 06:04:11
Заврши Create_test_data.input.pset на 2020 06:04:12
Започнете mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020 06:04:12
Заврши mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020 06:04:12
Започнете Create_test_data.input.pset на 2020 06:04:12
Заврши Create_test_data.input.pset на 2020 06:04:12
Започнете mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020 06:04:12
Заврши mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020 06:04:12

Излегува оваа слика:

Графикон
Започнете време
Заврши време
Должина на

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

Гледаме дека 6 линии за зголемување се обработуваат за 000 минути, што е доста брзо.
Податоците во целната табела се покажаа како дистрибуирани на следниов начин:

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;

Кога имате Сбер вага. Користење Ab Initio со Hive и GreenPlum
Можете да ја видите кореспонденцијата на вметнати податоци со времето на лансирање на графиконите.
Ова значи дека можете да извршите постепено вчитување на податоци во GreenPlum во Ab Initio со многу висока фреквенција и да забележите голема брзина на вметнување на овие податоци во GreenPlum. Се разбира, нема да биде возможно да се стартува еднаш во секунда, бидејќи Ab Initio, како и секоја алатка ETL, бара време да се „стартира“ кога ќе се стартува.

Заклучок

Ab Initio моментално се користи во Сбербанк за да се изгради унифициран семантички слој на податоци (ESS). Овој проект вклучува изградба на унифицирана верзија на состојбата на различните банкарски деловни субјекти. Информациите доаѓаат од различни извори, чии реплики се подготвени на Hadoop. Врз основа на деловните потреби, се подготвува модел на податоци и се опишуваат трансформациите на податоците. Ab Initio вчитува информации во ESN и преземените податоци не се само од интерес за бизнисот сам по себе, туку служат и како извор за градење податоци за маркети. Во исто време, функционалноста на производот ви овозможува да користите различни системи како приемник (Hive, Greenplum, Teradata, Oracle), што овозможува лесно подготовка на податоци за бизнис во различни формати што ги бара.

Можностите на Ab Initio се широки; на пример, вклучената рамка за MDW овозможува да се изградат технички и деловни историски податоци надвор од кутијата. За програмерите, Ab Initio овозможува повторно да не се измисли тркалото, туку да се користат многу постоечки функционални компоненти, кои во суштина се библиотеки потребни при работа со податоци.

Авторот е експерт во професионалната заедница на Sberbank SberProfi DWH/BigData. Професионалната заедница на SberProfi DWH/BigData е одговорна за развој на компетенции во области како што се екосистемот Hadoop, Teradata, Oracle DB, GreenPlum, како и алатките за BI Qlik, SAP BO, Tableau итн.

Извор: www.habr.com

Додадете коментар