Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum

Преди известно време бяхме изправени пред въпроса за избор на ETL инструмент за работа с големи данни. Използваното преди това решение 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 инструменти, е колекция от продукти.

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum

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

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum

Входните и изходните връзки на функционалните компоненти са портове и съдържат полета, изчислени в трансформации. Няколко графики, свързани с потоци под формата на стрелки в реда на тяхното изпълнение, се наричат ​​план.

Има няколкостотин функционални компонента, което е много. Много от тях са тясно специализирани. Възможностите на класическите трансформации в Ab Initio са по-широки, отколкото в други ETL инструменти. Например Join има множество изходи. В допълнение към резултата от свързването на набори от данни, можете да получите изходни записи на входни набори от данни, чиито ключове не могат да бъдат свързани. Можете също така да получите отхвърляния, грешки и дневник на операцията за трансформация, който може да бъде прочетен в същата колона като текстов файл и обработен с други трансформации:

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum

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

Има оригинални трансформации. Например трансформацията Scan има функционалност, подобна на аналитичните функции. Има трансформации с ясни имена: Създаване на данни, Четене на Excel, Нормализиране, Сортиране в групи, Изпълнение на програма, Изпълнение на SQL, Присъединяване с DB и т.н. Графиките могат да използват параметри по време на изпълнение, включително възможността за предаване на параметри от или към операционната система. Файловете с готов набор от параметри, предадени на графиката, се наричат ​​набори от параметри (psets).

Както се очаква, Ab Initio GDE има собствено хранилище, наречено EME (Enterprise Meta Environment). Разработчиците имат възможност да работят с локални версии на код и да проверяват своите разработки в централното хранилище.

Възможно е по време на изпълнение или след изпълнение на графиката да щракнете върху който и да е поток, свързващ трансформацията, и да разгледате данните, преминали между тези трансформации:

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum

Възможно е също да щракнете върху който и да е поток и да видите подробности за проследяване - в колко паралела е работила трансформацията, колко реда и байта са били заредени в кой от паралелите:

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum

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

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

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

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

Ab Initio има и добре развита интеграция с ОС чрез shell. По-конкретно, Sberbank използва linux ksh. Можете да обменяте променливи с обвивката и да ги използвате като параметри на графика. Можете да извикате изпълнението на Ab Initio графики от обвивката и да администрирате Ab Initio.

В допълнение към Ab Initio GDE, много други продукти са включени в доставката. Има собствена Co>Operation System с претенция да се нарича операционна система. Има Control>Center, където можете да планирате и наблюдавате потоците на изтегляне. Има продукти за извършване на разработка на по-примитивно ниво, отколкото позволява Ab Initio GDE.

Описание на рамката MDW и работата по нейното персонализиране за GreenPlum

Заедно със своите продукти, продавачът доставя продукта MDW (Metadata Driven Warehouse), който е конфигуратор на графики, предназначен да помага при типични задачи за попълване на хранилища за данни или хранилища за данни.

Той съдържа персонализирани (специфични за проекта) анализатори на метаданни и готови генератори на кодове.

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum
Като входни данни MDW получава модел на данни, конфигурационен файл за настройка на връзка към база данни (Oracle, Teradata или Hive) и някои други настройки. Частта, специфична за проекта, например, внедрява модела в база данни. Частта извън кутията на продукта генерира графики и конфигурационни файлове за тях чрез зареждане на данни в таблици с модели. В този случай се създават графики (и psets) за няколко режима на инициализиране и постепенна работа по актуализиране на обекти.

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

В случая на Hive, входящите делта данни се свързват чрез Ab Initio Join с данните, които са били в таблицата преди актуализацията. Зареждащите устройства в MDW (както в Hive, така и в RDBMS) не само вмъкват нови данни от делтата, но и затварят периодите на релевантност на данните, чиито първични ключове са получили делтата. Освен това трябва да пренапишете непроменената част от данните. Но това трябва да се направи, защото Hive няма операции за изтриване или актуализиране.

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum

В случая на RDBMS, графиките за постепенно актуализиране на данни изглеждат по-оптимални, тъй като RDBMS имат реални възможности за актуализиране.

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum

Получената делта се зарежда в междинна таблица в базата данни. След това делтата се свързва с данните, които са били в таблицата преди актуализацията. И това се прави с помощта на SQL с помощта на генерирана SQL заявка. След това, използвайки SQL командите delete+insert, новите данни от делтата се вмъкват в целевата таблица и периодите на релевантност на данните, чиито първични ключове са получили делтата, се затварят.
Няма нужда да пренаписвате непроменени данни.

Така стигнахме до заключението, че в случая на Hive, MDW трябва да пренапише цялата таблица, защото Hive няма функция за актуализиране. И не е измислено нищо по-добро от пълното пренаписване на данните при актуализиране. В случая с RDBMS, напротив, създателите на продукта намериха за необходимо да поверят свързването и актуализирането на таблици на използването на SQL.

За проект в Sberbank създадохме нова, многократно използваема реализация на програма за зареждане на база данни за GreenPlum. Това беше направено въз основа на версията, която MDW генерира за Teradata. Teradata, а не Oracle, беше най-близо и най-добре за това, защото... също е 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

Sberbank проведе експеримент, за да сравни производителността на генерираните от 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:

Първоначално зареждане в 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 победи Hive в този тест с 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 000 реда в 000 паралелни нишки. Данните са произволни, структурата им е организирана за вмъкване в нашата таблица

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum

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

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum

3) Графика mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset – графика, генерирана от MDW за постепенно актуализиране на нашата таблица в 10 паралелни нишки, използвайки част от прясно получени данни (делта), генерирани от графика (1)

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum

Нека стартираме скрипта по-долу в режим NRT:

  • генерира 6 000 000 тестови линии
  • извършете първоначално зареждане, вмъкнете 6 000 000 тестови реда в празна таблица
  • повторете постепенното изтегляне 5 пъти
    • генерира 6 000 000 тестови линии
    • извършете постепенно вмъкване на 6 000 000 тестови реда в таблицата (в този случай времето за изтичане на valid_to_ts е зададено на старите данни и се вмъкват по-нови данни със същия първичен ключ)

Този сценарий емулира режима на реална работа на определена бизнес система - доста голяма част от новите данни се появяват в реално време и веднага се изсипват в GreenPlum.

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

Стартирайте Create_test_data.input.pset в 2020-06-04 11:49:11
Завършете Create_test_data.input.pset в 2020-06-04 11:49:37
Стартирайте mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset в 2020-06-04 11:49:37
Завършете mdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020-06-04 11:50:42
Стартирайте Create_test_data.input.pset в 2020-06-04 11:50:42
Завършете Create_test_data.input.pset в 2020-06-04 11:51:06
Стартирайте mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset в 2020-06-04 11:51:06
Завършете mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020-06-04 11:53:41
Стартирайте Create_test_data.input.pset в 2020-06-04 11:53:41
Завършете Create_test_data.input.pset в 2020-06-04 11:54:04
Стартирайте mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset в 2020-06-04 11:54:04
Завършете mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020-06-04 11:56:51
Стартирайте Create_test_data.input.pset в 2020-06-04 11:56:51
Завършете Create_test_data.input.pset в 2020-06-04 11:57:14
Стартирайте mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset в 2020-06-04 11:57:14
Завършете mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020-06-04 11:59:55
Стартирайте Create_test_data.input.pset в 2020-06-04 11:59:55
Завършете Create_test_data.input.pset в 2020-06-04 12:00:23
Стартирайте mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset в 2020-06-04 12:00:23
Завършете mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020-06-04 12:03:23
Стартирайте Create_test_data.input.pset в 2020-06-04 12:03:23
Завършете Create_test_data.input.pset в 2020-06-04 12:03:49
Стартирайте mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset в 2020-06-04 12:03:49
Завършете mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset на 2020-06-04 12:06:46

Оказва се тази снимка:

Крива
Началният час
Крайно време
Дължина

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 000 нарастващи реда се обработват за 3 минути, което е доста бързо.
Данните в целевата таблица се оказаха разпределени както следва:

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;

Когато имате Sber везни. Използване на Ab Initio с Hive и GreenPlum
Можете да видите съответствието на вмъкнатите данни с времето на стартиране на графиките.
Това означава, че можете да изпълнявате постепенно зареждане на данни в GreenPlum в Ab Initio с много висока честота и да наблюдавате висока скорост на вмъкване на тези данни в GreenPlum. Разбира се, няма да е възможно да се стартира веднъж на секунда, тъй като Ab Initio, като всеки ETL инструмент, изисква време за „стартиране“ при стартиране.

Заключение

Понастоящем Ab Initio се използва в Сбербанк за изграждане на Unified Semantic Data Layer (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

Добавяне на нов коментар