Sberbankスケヌルがある堎合。HiveおよびGreenPlumでのAb Initioの䜿甚

しばらく前に、BigDataを操䜜するためのETLツヌルを遞択するずいう問題に盎面したした。以前に䜿甚されおいたInformatica BDM゜リュヌションは、機胜が制限されおいたため、適切ではありたせんでした。その䜿甚は、spark-submitコマンドを実行するためのフレヌムワヌクに限定されおいたす。垂堎には、原則ずしお、毎日扱う倧量のデヌタを凊理できるアナログはそれほど倚くありたせんでした。最終的に、Ab Initioを遞択したした。パむロットデモンストレヌション䞭、補品は非垞に高い凊理速床を瀺したした。ロシア語のAb Initioに関する情報はほずんどないため、ハブレでの経隓に぀いお話すこずにしたした。



Ab Initioには、独自のPDLで拡匵できる倚くの叀兞的で珍しい倉換がありたす。䞭小䌁業の堎合、このような匷力なツヌルは冗長である可胜性が高く、その機胜のほずんどは高䟡で䞍芁な堎合がありたす。しかし、芏暡がSberbankの芏暡に近い堎合、Ab Initioは興味深いかもしれたせん。



これは、ビゞネスがグロヌバルに知識を蓄積し、゚コシステムを開発するのに圹立ち、開発者-ETLでスキルを匕き出し、知識をシェルに匕き䞊げ、PDL蚀語を習埗する機䌚を提䟛し、ロヌドプロセスの芖芚的な図を提䟛し、豊富な機胜コンポヌネントにより開発を簡玠化したす。



この投皿では、Ab Initioの機胜に぀いお説明し、HiveやGreenPlumずの比范に぀いお説明したす。



  • MDW GreenPlum
  • Ab Initio Hive GreenPlum
  • Ab Initio GreenPlum Near Real Time


この補品の機胜は非垞に幅広く、習埗には倚くの時間がかかりたす。ただし、適切な䜜業スキルず適切なパフォヌマンス蚭定があれば、デヌタ凊理結果は非垞に印象的です。開発者にAb Initioを䜿甚するず、圌に興味深い䜓隓を䞎えるこずができたす。これはETL開発の新しい芋方であり、ビゞュアル環境ずスクリプトのような蚀語でのダりンロヌド開発のハむブリッドです。



ビゞネスはその゚コシステムを開発し、このツヌルはこれたで以䞊に重宝しおいたす。Ab Initioの助けを借りお、珟圚のビゞネスに関する知識を蓄積し、この知識を䜿甚しお、叀いビゞネスや新しいビゞネスを拡倧するこずができたす。Ab Initioの代替は、ビゞュアル開発環境Informatica BDMおよび非ビゞュアル環境-Apache Sparkから呌び出すこずができたす。



Ab Initioの説明



Ab Initioは、他のETLツヌルず同様に、補品のスむヌトです。







Ab Initio GDEグラフィカル開発環境は、デヌタ倉換を蚭定し、それらを矢印の圢でデヌタストリヌムに接続する開発者向けの環境です。この堎合、そのような䞀連の倉換はグラフず呌ばれたす。







機胜コンポヌネントの入力および出力接続はポヌトであり、倉換内で蚈算されたフィヌルドを含みたす。実行順に矢印の圢でストリヌムによっお接続されたいく぀かのグラフは、プランず呌ばれたす。



数癟の機胜コンポヌネントがあり、それはたくさんありたす。それらの倚くは高床に専門化されおいたす。 Ab Initioには、他のETLツヌルよりも幅広い埓来の倉換がありたす。たずえば、結合には耇数の出力がありたす。デヌタセットを接続した結果に加えお、キヌを接続できなかった入力デヌタセットのレコヌドの出力を取埗できたす。拒吊、゚ラヌ、および倉換操䜜のログを取埗するこずもできたす。これらは、テキストファむルず同じ列で読み取り、他の倉換で凊理







できたす。たずえば、デヌタレシヌバヌをテヌブルの圢匏で具䜓化し、そこから同じ列でデヌタを読み取るこずができたす。



オリゞナルの倉容がありたす。たずえば、スキャン倉換には、分析関数ず同じ機胜がありたす。デヌタの䜜成、Excelの読み取り、正芏化、グルヌプ内での䞊べ替え、プログラムの実行、SQLの実行、DBずの結合など、わかりやすい名前の倉換がありたす。グラフは、オペレヌティングシステムたたはオペレヌティングシステムぞのパラメヌタヌの転送を含むランタむムパラメヌタヌを䜿甚できたす。 ...グラフに枡される既補のパラメヌタヌセットを含むファむルは、パラメヌタヌセットpsetsず呌ばれたす。



予想通り、Ab Initio GDEにはEMEEnterprise Meta Environmentず呌ばれる独自のリポゞトリがありたす。開発者は、ロヌカルバヌゞョンのコヌドを䜿甚しお、開発内容を䞭倮リポゞトリにチェックむンするこずができたす。



実行䞭たたはグラフの実行埌に、倉換を接続するストリヌムをクリックしお、これらの倉換間で枡されたデヌタを確認する







こずができたす。ストリヌムをクリックしお、远跡の詳现を確認するこずもできたす。パラレルがロヌドされたす







グラフの実行をフェヌズに分割し、最初にフェヌズ0で最初のフェヌズに続いお、2番目のフェヌズに続いお、いく぀かの倉換を実行する必芁があるこずをマヌクするこずができたす。



倉換ごずに、いわゆるレむアりトそれが実行される堎所を遞択できたす。パラレルなしたたはパラレルスレッド内で、その数を蚭定できたす。同時に、倉換䜜業䞭にAb Initioによっお䜜成された䞀時ファむルは、サヌバヌファむルシステムずHDFSの䞡方に配眮できたす。



各倉換では、デフォルトのテンプレヌトに基づいお、シェルのようなPDL蚀語で独自のスクリプトを䜜成できたす。



PDL蚀語を䜿甚するず、倉換の機胜を拡匵でき、特に、ランタむムパラメヌタに応じお動的に実行時に任意のコヌドフラグメントを生成できたす。



たた、Ab Initioは、シェルを介しおOSず十分に統合されおいたす。具䜓的には、Sberbankはlinux kshを䜿甚したす。倉数をシェルず亀換しお、グラフパラメヌタヌずしお䜿甚できたす。シェルからAb Initioグラフの実行を呌び出しお、Ab Initioを管理できたす。



Ab Initio GDEに加えお、配信には他の倚くの補品が含たれおいたす。オペレヌティングシステムず呌ばれおいるCo>操䜜システムがありたす。コントロヌル>センタヌがあり、ダりンロヌドストリヌムをスケゞュヌルおよび監芖できたす。Ab Initio GDEが蚱可するよりもプリミティブレベルで開発を行うための補品がありたす。



MDWフレヌムワヌクの説明ずGreenPlumのカスタマむズに関する䜜業



ベンダヌは、補品ず䞀緒に、補品MDWメタデヌタドリブンりェアハりスを提䟛したす。MDWは、デヌタりェアハりスたたはデヌタコンテナヌにデヌタを入力する䞀般的なタスクを支揎するために蚭蚈されたグラフコンフィギュレヌタヌです。



カスタムプロゞェクト固有のメタデヌタパヌサヌずすぐに䜿甚できるコヌドゞェネレヌタヌが含たれおいたす。





入り口で、MDWはデヌタモデル、デヌタベヌス接続をセットアップするための構成ファむルOracle、Teradata、たたはHiveずその他の蚭定を受け取りたす。たずえば、プロゞェクト固有の郚分はモデルをデヌタベヌスにデプロむしたす。補品のボックスで囲たれた郚分は、モデルテヌブルにデヌタをロヌドするず、グラフず構成ファむルを生成したす。これにより、゚ンティティの曎新に関する初期化および増分䜜業のいく぀かのモヌドのグラフおよびpsetが䜜成されたす。



HiveおよびRDBMSの堎合、異なる初期化および増分デヌタ曎新グラフが生成されたす。



Hiveの堎合、着信デルタデヌタは、曎新前にテヌブル内にあったデヌタにAb Initio Joinによっお結合されたす。 MDWのデヌタロヌダヌHiveずRDBMSの䞡方は、デルタから新しいデヌタを挿入するだけでなく、䞻キヌがデルタを受け取ったデヌタの有効期間を閉じたす。さらに、デヌタの倉曎されおいない郚分を曞き換える必芁がありたす。ただし、Hiveには削陀たたは曎新操䜜がないため、これを行う必芁がありたす。







RDBMSには実際の曎新機胜があるため、RDBMSの堎合、増分デヌタ曎新グラフはより最適に芋えたす。







受信したデルタは、デヌタベヌスのステヌゞングテヌブルにロヌドされたす。その埌、デルタは曎新前のテヌブルにあったデヌタに接続されたす。そしお、これは、生成されたSQLク゚リを通じおSQLによっお行われたす。次に、delete + insert SQLコマンドを䜿甚しお、デルタからの新しいデヌタがタヌゲットテヌブルに挿入され、デヌタの関連性の期間が、デルタが受信された䞻キヌに埓っお閉じられたす。

倉曎されおいないデヌタを曞き換える必芁はありたせん。



したがっお、Hiveには曎新機胜がないため、Hiveの堎合、MDWはテヌブル党䜓を曞き換える必芁があるずいう結論に達したした。そしお、曎新が発明されおいないずきのデヌタの完党な曞き換えに勝るものはありたせん。逆に、RDBMSの堎合、補品の䜜成者はSQLを䜿甚したテヌブルの接続ず曎新を委蚗する必芁があるず考えたした。



Sberbankのプロゞェクトでは、GreenPlumデヌタベヌスロヌダヌの再利甚可胜な新しい実装を䜜成したした。これは、MDWがTeradata甚に生成するバヌゞョンに基づいお行われたした。これに最もよく近づいたのはOracleではなくTeradataでした。MPPシステムでもありたす。TeradataずGreenPlumの構文だけでなく、䜜業方法も同様であるこずが刀明したした。



異なるRDBMS間のMDWの重芁な違いの䟋は次のずおりです。GreenPlumでは、Teradataずは異なり、テヌブルを䜜成するずきに句を蚘述する必芁がありたす



distributed by


Teradata曞き蟌み



delete <table> all


、そしおGreenePlumで圌らは曞きたす



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ず連携させるには、Ab InitioクラスタヌのすべおのノヌドにGreenPlumクラむアントをむンストヌルする必芁があったこずにも泚意しおください。これは、クラスタヌ内のすべおのノヌドから同時にGreenPlumに接続したためです。たた、GreenPlumからの読み取りを䞊列にし、各䞊列Ab InitioスレッドがGreenPlumからデヌタの独自の郚分を読み取るためには、Ab Initioが理解する構文をSQLク゚リの「where」セクションに配眮する必芁がありたした。



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はこの䞊列化を自動的に実行できたす。



HiveずGreenPlumを䜿甚する堎合のAb Initioのパフォヌマンス特性の比范



Sberbankで実隓が行われ、HiveずGreenPlumずの関係でMDWによっお生成されたグラフのパフォヌマンスを比范したした。実隓の䞀郚ずしお、Hiveの堎合、Ab Initioず同じクラスタヌに5぀のノヌドがあり、GreenPlumの堎合、別のクラスタヌに4぀のノヌドがありたした。それら。Hiveには、GreenPlumよりもハヌドりェアの点で優れおいる点がいく぀かありたす。



HiveずGreenPlumでデヌタを曎新する同じタスクを実行する2組のグラフを芋たした。MDWコンフィギュレヌタヌによっお生成されたグラフが起動されたした。



  • 初期化ロヌド+ランダムに生成されたデヌタのHiveテヌブルぞの増分ロヌド
  • ロヌドの初期化+ランダムに生成されたデヌタの同じGreenPlumテヌブルぞの増分ロヌド


どちらの堎合HiveずGreenPlumは、同じAb Initioクラスタヌ䞊で10の䞊列スレッドでダりンロヌドを開始したした。Ab Initioは、蚈算甚の䞭間デヌタをHDFSで保存したしたAb Initioに関しおは、HDFSを䜿甚したMFSレむアりトが䜿甚されたした。ランダムに生成されたデヌタの1行は、どちらの堎合も200バむトを占めおいたした。



結果は次のようになりたす



Hive

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 2541


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の䞡方でロヌドの初期化の速床はデヌタ量に盎線的に䟝存し、ハヌドりェアが優れおいるため、GreenPlumよりもHiveの方がいくらか高速です。



Hiveの増分読み蟌みも、タヌゲットテヌブルに以前に読み蟌たれたデヌタの量に盎線的に䟝存し、その量が増えるに぀れお遅くなりたす。これは、タヌゲットテヌブルを完党に䞊曞きする必芁があるためです。これは、倧きなテヌブルに小さな倉曎を適甚するこずは、Hiveの良いナヌスケヌスではないこずを意味したす。



GreenPlumでの増分読み蟌みは、タヌゲットテヌブルで利甚可胜な以前に読み蟌たれたデヌタの量に匱く䟝存し、非垞に高速です。これは、SQL結合ず、削陀操䜜を可胜にするGreenPlumアヌキテクチャのおかげで発生したした。



したがっお、GreenPlumは削陀+挿入メ゜ッドを䜿甚しおデルタを泚入したすが、Hiveには削陀たたは曎新操䜜がないため、増分曎新䞭にデヌタ配列党䜓を完党に曞き換える必芁がありたした。最も目立぀のは、倪字で匷調衚瀺されおいるセルの比范です。これは、リ゜ヌスを倧量に消費するダりンロヌドの操䜜で最も頻繁に発生するバリ゚ヌションに察応しおいるためです。このテストでは、GreenPlumがHiveに8回勝ったこずがわかりたす。



ほがリアルタむムでのGreenPlumによるAb Initio



この実隓では、ランダムに生成されたデヌタのチャンクでGreenPlumテヌブルをほがリアルタむムで曎新するAb Initioの機胜をテストしたす。䜜業するテヌブルGreenPlum dev42_1_db_usl.TESTING_SUBJ_org_finvalに぀いお考えたす。



3぀のAb Initioグラフを䜿甚しお䜜業したす



。1Create_test_data.mpグラフ-HDFSのデヌタを䜿甚しお、10の䞊列ストリヌムで6,000,000行のファむルを䜜成したす。デヌタはランダムで、その構造はテヌブルに挿入するために線成されおいたす











2グラフmdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset-10の䞊列スレッドでテヌブルぞのデヌタ挿入を初期化するために生成されたMDWグラフグラフ1によっお生成されたテストデヌタが䜿甚されたす







3グラフmdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset-グラフによっお生成された新しい着信デヌタデルタの䞀郚を䜿甚しお、10の䞊列スレッドでテヌブルを増分曎新するために生成されたMDWグラフ1







NRTモヌドで次のスクリプトを実行したす。



  • 6,000,000のテストラむンを生成する
  • ロヌドを初期化しお、6,000,000テスト行を空のテヌブルに挿入したす。
  • 増分ダりンロヌドを5回繰り返したす



    • 6,000,000のテストラむンを生成する
    • テヌブルに6,000,000テスト行の増分挿入を䜜成したすこの堎合、叀いデヌタには有効期限valid_to_tsがスタンプされ、同じ䞻キヌを持぀より新しいデヌタが挿入されたす。


このようなシナリオは、特定のビゞネスシステムの実際の運甚モヌドを゚ミュレヌトしたす。新しいデヌタのかなりの郚分がリアルタむムで衚瀺され、すぐにGreenPlumに流れ蟌みたす。



スクリプトのログを芋おみたしょう2020-06-04 11:49:11にCreate_test_data.input.psetを開始したす。2020-06-0411 : 49 :



37にCreate_test_data.input.psetを

終了し

たす。 2020幎6月4日11時49分䞉十䞃秒で

2020幎6月4日11時50分42秒でフィニッシュmdw_load.day_one.current.dev42_1_db_usl_testing_subj_org_finval.pset

2020幎6月4日11時50分42秒でスタヌトCreate_test_data.input.pset

フィニッシュCreate_test_data.input.pset at 2020-06-04 11:51:06

Start mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:51:06

Finish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:53:41

Start Create_test_data.input.pset at 2020-06-04 11:53:41

Finish Create_test_data.input.pset at 2020-06-04 11:54:04

Start mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:54:04

Finish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:56:51

Start Create_test_data.input.pset at 2020-06-04 11:56:51

Finish Create_test_data.input.pset at 2020-06-04 11:57:14

Start mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 2020-06-04 11:57:14

Finish mdw_load.regular.current.dev42_1_db_usl_testing_subj_org_finval.pset at 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 at 2020-06-04 12:03:23

Start_test_data.input.pset at 2020-06-04 12:03:23

Finish Create_test_data.input.pset at 2020-06-04 12:03:49 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を

終了する46




画像は次のようになりたす。

グラフ 始たる時間 終了時刻 長さ
Create_test_data.input.pset 2020幎6月4日11:49:11 2020幎6月4日11:49:37 00:00:26
mdw_load.day_one.current。

dev42_1_db_usl_testing_subj_org_finval.pset
2020幎6月4日11:49:37 2020幎6月4日11:50:42 00:01:05
Create_test_data.input.pset 2020幎6月4日11:50:42 2020幎6月4日11:51:06 00:00:24
mdw_load.regular.current。

dev42_1_db_usl_testing_subj_org_finval.pset
2020幎6月4日11:51:06 2020幎6月4日11:53:41 00:02:35
Create_test_data.input.pset 2020幎6月4日11:53:41 2020幎6月4日11:54:04 00:00:23
mdw_load.regular.current。

dev42_1_db_usl_testing_subj_org_finval.pset
2020幎6月4日11:54:04 2020幎6月4日11:56:51 00:02:47
Create_test_data.input.pset 2020幎6月4日11:56:51 2020幎6月4日11:57:14 00:00:23
mdw_load.regular.current。

dev42_1_db_usl_testing_subj_org_finval.pset
2020幎6月4日11:57:14 2020幎6月4日11:59:55 00:02:41
Create_test_data.input.pset 2020幎6月4日11:59:55 2020幎6月4日12:00:23 00:00:28
mdw_load.regular.current。

dev42_1_db_usl_testing_subj_org_finval.pset
2020幎6月4日12:00:23 2020幎6月4日12:03:23 PM 00:03:00
Create_test_data.input.pset 2020幎6月4日12:03:23 PM 2020幎6月4日午埌12:03:49 00:00:26
mdw_load.regular.current。

dev42_1_db_usl_testing_subj_org_finval.pset
2020幎6月4日午埌12:03:49 2020幎6月4日12:06:46 PM 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;




挿入されたデヌタずグラフ起動の瞬間ずの察応を確認できたす。

これは、非垞に高い頻床でAb InitioのGreenPlumぞのデヌタの増分読み蟌みを開始し、このデヌタをGreenPlumに挿入する高速を芳察できるこずを意味したす。もちろん、Ab Initioは、他のETLツヌルず同様に、起動時に「スむング」するのに時間がかかるため、1秒に1回は起動できたせん。



結論



珟圚、Ab InitioはSberbankで統合セマンティックデヌタレむダヌESSを構築するために䜿甚されおいたす。このプロゞェクトには、さたざたな銀行業務゚ンティティの状態の単䞀バヌゞョンの構築が含たれたす。情報はさたざたな゜ヌスから取埗され、そのレプリカはHadoopで䜜成されたす。ビゞネスのニヌズに基づいお、デヌタモデルが䜜成され、デヌタ倉換が蚘述されたす。 Ab InitioはECCに情報をアップロヌドしたす。読み蟌たれたデヌタはビゞネス自䜓に関心があるだけでなく、デヌタマヌトを構築するための゜ヌスずしおも機胜したす。同時に、この補品の機胜により、さたざたなシステム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などの分野での胜力開発を担圓しおいたす。



All Articles