Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум

Пре извесног времена суочили смо се са питањем избора ЕТЛ алата за рад са великим подацима. Раније коришћено Информатица БДМ решење нам није одговарало због ограничене функционалности. Његова употреба је сведена на оквир за покретање команди спарк-субмит. Није било много аналога на тржишту који су, у принципу, били способни да раде са обимом података са којима се свакодневно бавимо. На крају смо изабрали Аб Инитио. Током пилот демонстрација, производ је показао веома велику брзину обраде података. Скоро да нема информација о Аб Инитио на руском, па смо одлучили да причамо о нашем искуству на Хабре.

Аб Инитио има много класичних и необичних трансформација, чији се код може проширити коришћењем сопственог ПДЛ језика. За мало предузеће, тако моћно средство ће вероватно бити претерано, а већина његових могућности може бити скупа и неискоришћена. Али ако је ваша скала блиска Сберовљевој, онда би вам Аб Инитио могао бити занимљив.

Помаже предузећу да акумулира знање на глобалном нивоу и развије екосистем, а програмеру да унапреди своје вештине у ЕТЛ-у, унапреди своје знање у љусци, пружа могућност да савлада ПДЛ језик, даје визуелну слику процеса учитавања и поједностављује развој због обиља функционалних компоненти.

У овом посту ћу говорити о могућностима Аб Инитио-а и дати упоредне карактеристике његовог рада са Хиве и ГреенПлум-ом.

  • Опис МДВ оквира и рад на његовом прилагођавању за ГреенПлум
  • Поређење перформанси Аб Инитио између Хиве и ГреенПлум
  • Рад Аб Инитио са ГреенПлум-ом у режиму скоро реалног времена


Функционалност овог производа је веома широка и захтева доста времена за проучавање. Међутим, уз одговарајуће радне вештине и одговарајућа подешавања перформанси, резултати обраде података су веома импресивни. Коришћење Аб Инитио за програмера може пружити занимљиво искуство. Ово је нови поглед на развој ЕТЛ-а, хибрид између визуелног окружења и развоја преузимања на језику сличном скрипти.

Предузећа развијају своје екосистеме и овај алат је згоднији него икад. Са Аб Инитио, можете акумулирати знање о свом тренутном пословању и користити ово знање за проширење старих и отварање нових предузећа. Алтернативе за Аб Инитио укључују визуелна развојна окружења Информатица БДМ и не-визуелна развојна окружења Апацхе Спарк.

Опис Аб Инитио

Аб Инитио, као и други ЕТЛ алати, представља колекцију производа.

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум

Аб Инитио ГДЕ (Грапхицал Девелопмент Енвиронмент) је окружење за програмера у којем он конфигурише трансформације података и повезује их са токовима података у облику стрелица. У овом случају, такав скуп трансформација се назива граф:

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум

Улазне и излазне везе функционалних компоненти су портови и садрже поља израчуната у оквиру трансформација. Неколико графова повезаних токовима у виду стрелица по редоследу њиховог извођења назива се план.

Постоји неколико стотина функционалних компоненти, што је много. Многи од њих су високо специјализовани. Могућности класичних трансформација у Аб Инитио су шире него у другим ЕТЛ алатима. На пример, Јоин има више излаза. Поред резултата повезивања скупова података, можете добити излазне записе улазних скупова података чији кључеви нису могли бити повезани. Такође можете добити одбијенице, грешке и дневник операције трансформације, који се може прочитати у истој колони као текстуална датотека и обрадити са другим трансформацијама:

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум

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

Постоје оригиналне трансформације. На пример, трансформација Сцан има функционалност сличну аналитичким функцијама. Постоје трансформације са називима који су сами по себи разумљиви: Креирај податке, Читај Екцел, Нормализуј, Сортирај унутар група, Покрени програм, Покрени СКЛ, Придружи се ДБ, итд. Графови могу да користе параметре времена извршавања, укључујући могућност прослеђивања параметара од или до оперативни систем . Датотеке са готовим скупом параметара који се прослеђују на графикон називају се скупови параметара (псети).

Као што се и очекивало, Аб Инитио ГДЕ има сопствено спремиште под називом ЕМЕ (Ентерприсе Мета Енвиронмент). Програмери имају прилику да раде са локалним верзијама кода и провере свој развој у централном спремишту.

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

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум

Такође је могуће кликнути на било који ток и видети детаље праћења – у колико паралела је трансформација функционисала, колико линија и бајтова је учитано у коју од паралела:

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум

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

За сваку трансформацију можете изабрати такозвани распоред (где ће се извршити): без паралела или у паралелним нитима, чији се број може одредити. Истовремено, привремене датотеке које Аб Инитио креира када се трансформације покрећу могу се поставити и у систем датотека сервера и у ХДФС.

У свакој трансформацији, на основу подразумеваног шаблона, можете креирати сопствену скрипту у ПДЛ-у, која је помало попут љуске.

Помоћу ПДЛ-а можете проширити функционалност трансформација и, посебно, можете динамички (у току извршавања) генерисати произвољне фрагменте кода у зависности од параметара времена извршавања.

Аб Инитио такође има добро развијену интеграцију са ОС-ом преко љуске. Конкретно, Сбербанк користи линук ксх. Можете размењивати променљиве са љуском и користити их као параметре графикона. Можете позвати извршење Аб Инитио графова из љуске и администрирати Аб Инитио.

Поред Аб Инитио ГДЕ, многи други производи су укључени у испоруку. Постоји сопствени оперативни систем за сарадњу са тврдњом да се зове оперативни систем. Постоји Цонтрол>Центар где можете заказати и пратити токове преузимања. Постоје производи за развој на примитивнијем нивоу него што Аб Инитио ГДЕ дозвољава.

Опис МДВ оквира и рад на његовом прилагођавању за ГреенПлум

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

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

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум
Као улаз, МДВ добија модел података, конфигурациону датотеку за подешавање везе са базом података (Орацле, Терадата или Хиве) и нека друга подешавања. Део специфичан за пројекат, на пример, примењује модел у бази података. Део производа који је припремљен за употребу генерише графиконе и конфигурационе датотеке за њих учитавањем података у табеле модела. У овом случају, графови (и псети) се креирају за неколико начина иницијализације и инкременталног рада на ажурирању ентитета.

У случајевима Хиве и РДБМС-а, генеришу се различити графикони за иницијализацију и инкрементално ажурирање података.

У случају Хиве-а, долазни делта подаци су повезани преко Аб Инитио Јоин-а са подацима који су били у табели пре ажурирања. Учитавачи података у МДВ (и у Хиве и РДБМС) не само да убацују нове податке из делте, већ и затварају периоде релевантности података чији примарни кључеви су примили делту. Поред тога, морате да препишете непромењени део података. Али то се мора урадити јер Хиве нема операције брисања или ажурирања.

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум

У случају РДБМС-а, графикони за инкрементално ажурирање података изгледају оптималније, јер РДБМС имају стварне могућности ажурирања.

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум

Примљена делта се учитава у међутабелу у бази података. Након овога, делта се повезује са подацима који су били у табели пре ажурирања. А ово се ради помоћу СКЛ-а помоћу генерисаног СКЛ упита. Затим, користећи СКЛ делете+инсерт команде, нови подаци из делта се убацују у циљну табелу и периоди релевантности података чији примарни кључеви су примили делта се затварају.
Нема потребе за преписивањем непромењених података.

Тако смо дошли до закључка да у случају Хиве-а, МДВ мора да препише целу табелу јер Хиве нема функцију ажурирања. И ништа боље од потпуног поновног писања података када је измишљено ажурирање. У случају РДБМС-а, напротив, креатори производа су нашли за сходно да повезивање и ажурирање табела повере коришћењу СКЛ-а.

За пројекат у Сбербанци, креирали смо нову, вишекратну имплементацију пуњача базе података за ГреенПлум. Ово је урађено на основу верзије коју МДВ генерише за Терадата. Најбољи и најближи за ово је био Терадата, а не Орацле, јер... је такође МПП систем. Испоставило се да су методе рада, као и синтакса, Терадата и ГреенПлум-а слични.

Примери критичних разлика за МДВ између различитих РДБМС-ова су следећи. У ГреенПлум-у, за разлику од Терадата, приликом креирања табела морате написати клаузулу

distributed by

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

delete <table> all

, а у ГреенПлуму пишу

delete from <table>

У Орацле-у, за потребе оптимизације пишу

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

, а Терадата и ГреенПлум пишу

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

Такође напомињемо да је за рад Аб Инитио са ГреенПлум-ом било неопходно инсталирати ГреенПлум клијент на све чворове Аб Инитио кластера. То је зато што смо се повезали на ГреенПлум истовремено са свих чворова у нашем кластеру. А да би читање из ГреенПлум-а било паралелно и да би свака паралелна Аб Инитио нит читала свој део података из ГреенПлум-а, морали смо да поставимо конструкцију коју разуме Аб Инитио у одељак „где“ СКЛ упита

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

, тј. морате да затражите ГреенПлум са експлицитним филтером за сваку партицију. За друге базе података (Терадата, Орацле), Аб Инитио може аутоматски извршити ову паралелизацију.

Поређење перформанси Аб Инитио између Хиве и ГреенПлум

Сбербанк је спровела експеримент да упореди перформансе МДВ генерисаних графикона у односу на Хиве иу односу на ГреенПлум. У оквиру експеримента, у случају Хиве било је 5 чворова на истом кластеру као Аб Инитио, ау случају ГреенПлум-а било је 4 чвора на посебном кластеру. Оне. Хиве је имао неку хардверску предност у односу на ГреенПлум.

Размотрили смо два пара графикона који обављају исти задатак ажурирања података у Хиве и ГреенПлум. Истовремено, покренути су и графикони које је генерисао МДВ конфигуратор:

  • почетно оптерећење + инкрементално учитавање насумично генерисаних података у табелу Хиве
  • почетно оптерећење + инкрементално учитавање насумично генерисаних података у исту ГреенПлум табелу

У оба случаја (Хиве и ГреенПлум) покренули су отпремање у 10 паралелних нити на истом Аб Инитио кластеру. Аб Инитио је сачувао међуподатке за прорачуне у ХДФС (у смислу Аб Инитио, коришћен је МФС распоред који користи ХДФС). Једна линија насумично генерисаних података заузимала је 200 бајтова у оба случаја.

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

Кошница:

Почетно учитавање у кошници

Редови су уметнути
6 000 000
60 000 000
600 000 000

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

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

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

Број делта линија примењених на
циљна табела током експеримента
6 000 000
6 000 000
6 000 000

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

ГреенПлум:

Почетно учитавање у ГреенПлум-у

Редови су уметнути
6 000 000
60 000 000
600 000 000

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

Инкрементално учитавање у ГреенПлум-у

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

Број делта линија примењених на
циљна табела током експеримента
6 000 000
6 000 000
6 000 000

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

Видимо да брзина почетног учитавања у Хиве и ГреенПлум линеарно зависи од количине података и, из разлога бољег хардвера, нешто је бржа за Хиве него за ГреенПлум.

Инкрементално учитавање у Хиве-у такође линеарно зависи од количине претходно учитаних података доступних у циљној табели и одвија се прилично споро како обим расте. Ово је узроковано потребом да се у потпуности препише циљна табела. То значи да примена малих измена на огромне табеле није добар случај употребе за Хиве.

Инкрементално учитавање у ГреенПлум-у слабо зависи од количине претходно учитаних података доступних у циљној табели и одвија се прилично брзо. Ово се догодило захваљујући СКЛ Јоинс-у и ГреенПлум архитектури, која омогућава операцију брисања.

Дакле, ГреенПлум додаје делту користећи методу делете+инсерт, али Хиве нема операције брисања или ажурирања, тако да је цео низ података био приморан да се у потпуности препише током инкременталног ажурирања. Поређење ћелија означених подебљаним словима је најупечатљивије, јер одговара најчешћој опцији за коришћење преузимања која захтевају велике ресурсе. Видимо да је ГреенПлум победио Хиве у овом тесту за 8 пута.

Рад Аб Инитио са ГреенПлум-ом у режиму скоро реалног времена

У овом експерименту ћемо тестирати способност Аб Инитио-а да ажурира ГреенПлум табелу насумично генерисаним комадима података у скоро реалном времену. Хајде да размотримо ГреенПлум табелу дев42_1_дб_усл.ТЕСТИНГ_СУБЈ_орг_финвал, са којом ћемо радити.

Користићемо три Аб Инитио графикона за рад са њим:

1) Грапх Цреате_тест_дата.мп – креира датотеке података у ХДФС са 10 редова у 6 паралелних нити. Подаци су насумични, њихова структура је организована за убацивање у нашу табелу

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум

2) Граф мдв_лоад.даи_оне.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет – график који генерише МДВ иницијализацијом уметања података у нашу табелу у 10 паралелних нити (користе се тест подаци генерисани графиконом (1))

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум

3) Грапх мдв_лоад.регулар.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет – график генерисан од стране МДВ-а за инкрементално ажурирање наше табеле у 10 паралелних нити користећи део свеже примљених података (делта) генерисаних на графикону (1)

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум

Покренимо доњу скрипту у НРТ режиму:

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

Овај сценарио опонаша начин стварног рада одређеног пословног система - прилично велики део нових података се појављује у реалном времену и одмах се сипа у ГреенПлум.

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

Започни Цреате_тест_дата.инпут.псет на 2020-06-04 11:49:11
Заврши Цреате_тест_дата.инпут.псет у 2020-06-04 11:49:37
Започните мдв_лоад.даи_оне.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет у 2020-06-04 11:49:37
Заврши мдв_лоад.даи_оне.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет у 2020-06-04 11:50:42
Започни Цреате_тест_дата.инпут.псет на 2020-06-04 11:50:42
Заврши Цреате_тест_дата.инпут.псет у 2020-06-04 11:51:06
Започните мдв_лоад.регулар.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет на 2020 06:04:11
Заврши мдв_лоад.регулар.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет у 2020-06-04 11:53:41
Започни Цреате_тест_дата.инпут.псет на 2020-06-04 11:53:41
Заврши Цреате_тест_дата.инпут.псет у 2020-06-04 11:54:04
Започните мдв_лоад.регулар.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет на 2020 06:04:11
Заврши мдв_лоад.регулар.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет у 2020-06-04 11:56:51
Започни Цреате_тест_дата.инпут.псет на 2020-06-04 11:56:51
Заврши Цреате_тест_дата.инпут.псет у 2020-06-04 11:57:14
Започните мдв_лоад.регулар.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет на 2020 06:04:11
Заврши мдв_лоад.регулар.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет у 2020-06-04 11:59:55
Започни Цреате_тест_дата.инпут.псет на 2020-06-04 11:59:55
Заврши Цреате_тест_дата.инпут.псет у 2020-06-04 12:00:23
Започните мдв_лоад.регулар.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет на 2020 06:04:12
Заврши мдв_лоад.регулар.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет у 2020-06-04 12:03:23
Започни Цреате_тест_дата.инпут.псет на 2020-06-04 12:03:23
Заврши Цреате_тест_дата.инпут.псет у 2020-06-04 12:03:49
Започните мдв_лоад.регулар.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет на 2020 06:04:12
Заврши мдв_лоад.регулар.цуррент.дев42_1_дб_усл_тестинг_субј_орг_финвал.псет у 2020-06-04 12:06:46

Испада ова слика:

Графикон
Почетно време
Крај времена
Дужина

Цреате_тест_дата.инпут.псет
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
00:00:26

мдв_лоад.даи_оне.цуррент.
дев42_1_дб_усл_тестинг_субј_орг_финвал.псет
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
00:01:05

Цреате_тест_дата.инпут.псет
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
00:00:24

мдв_лоад.регулар.цуррент.
дев42_1_дб_усл_тестинг_субј_орг_финвал.псет
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
00:02:35

Цреате_тест_дата.инпут.псет
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
00:00:23

мдв_лоад.регулар.цуррент.
дев42_1_дб_усл_тестинг_субј_орг_финвал.псет
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
00:02:47

Цреате_тест_дата.инпут.псет
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
00:00:23

мдв_лоад.регулар.цуррент.
дев42_1_дб_усл_тестинг_субј_орг_финвал.псет
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
00:02:41

Цреате_тест_дата.инпут.псет
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
00:00:28

мдв_лоад.регулар.цуррент.
дев42_1_дб_усл_тестинг_субј_орг_финвал.псет
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
00:03:00

Цреате_тест_дата.инпут.псет
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
00:00:26

мдв_лоад.регулар.цуррент.
дев42_1_дб_усл_тестинг_субј_орг_финвал.псет
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
КСНУМКС КСНУМКС: КСНУМКС: КСНУМКС
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;

Кад имаш Сбер вагу. Коришћење Аб Инитио са Хиве и ГреенПлум
Можете видети кореспонденцију уметнутих података са временима покретања графикона.
То значи да можете покренути инкрементално учитавање података у ГреенПлум у Аб Инитио са веома великом фреквенцијом и посматрати велику брзину уметања ових података у ГреенПлум. Наравно, неће бити могуће покренути једном у секунди, јер Аб Инитио, као и сваки ЕТЛ алат, захтева време да се „покрене“ када се покрене.

Закључак

Аб Инитио се тренутно користи у Сбербанци за изградњу обједињеног семантичког слоја података (ЕСС). Овај пројекат подразумева изградњу јединствене верзије стања различитих банкарских пословних субјеката. Информације потичу из различитих извора, чије су реплике припремљене на Хадооп-у. На основу пословних потреба израђује се модел података и описују трансформације података. Аб Инитио учитава информације у ЕСН и преузети подаци не само да су од интереса за пословање сами по себи, већ служе и као извор за изградњу база података. Истовремено, функционалност производа вам омогућава да користите различите системе као пријемник (Хиве, Греенплум, Терадата, Орацле), што вам омогућава да лако припремите податке за посао у различитим форматима који су му потребни.

Могућности Аб Инитиа су широке, на пример, укључени МДВ оквир омогућава прављење техничких и пословних историјских података из кутије. За програмере, Аб Инитио омогућава да не измишљају точак, већ да користе многе постојеће функционалне компоненте, које су у суштини библиотеке потребне за рад са подацима.

Аутор је стручњак у професионалној заједници Сбербанк СберПрофи ДВХ/БигДата. Професионална заједница СберПрофи ДВХ/БигДата је одговорна за развој компетенција у областима као што су Хадооп екосистем, Терадата, Орацле ДБ, ГреенПлум, као и БИ алати Клик, САП БО, Таблеау итд.

Извор: ввв.хабр.цом

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