Ny Airflow dia fitaovana iray ahafahana mampivelatra sy mitazona ny fizotran'ny fanodinana angon-drakitra amin'ny fomba mora sy haingana

Ny Airflow dia fitaovana iray ahafahana mampivelatra sy mitazona ny fizotran'ny fanodinana angon-drakitra amin'ny fomba mora sy haingana

Salama, Habr! Amin'ity lahatsoratra ity dia te hiresaka momba ny fitaovana lehibe iray amin'ny fampivoarana ny fizotran'ny fanodinana angon-drakitra aho, ohatra, amin'ny fotodrafitrasa DWH orinasa na DataLake anao. Hiresaka momba ny Apache Airflow (antsoina hoe Airflow) isika. Esorina amin'ny fomba tsy ara-drariny ny fiheverana an'i Habré, ary amin'ny ampahany lehibe dia hiezaka ny handresy lahatra anao aho fa farafaharatsiny ny Airflow dia mendrika hojerena rehefa misafidy fandaharam-potoana ho an'ny fizotranao ETL/ELT.

Teo aloha, nanoratra andian-dahatsoratra momba ny lohahevitra DWH aho fony aho niasa tao amin'ny Tinkoff Bank. Ankehitriny dia lasa anisan'ny ekipa Mail.Ru Group aho ary mamolavola sehatra ho an'ny famakafakana angon-drakitra ao amin'ny faritra filalaovana. Raha ny marina, rehefa miseho ny vaovao sy ny vahaolana mahaliana, izaho sy ny ekipako dia hiresaka eto momba ny sehatray momba ny famakafakana data.

Sasin-teny

Noho izany, andao hanomboka. Inona no atao hoe Airflow? Ity dia tranomboky (na fitambaran'ny tranomboky) hamolavola, hanomana ary hanara-maso ny fizotran'ny asa. Ny endri-javatra fototra amin'ny Airflow: Ny code Python dia ampiasaina hamaritana ny fizotran'ny (fampandrosoana). Manana tombony be dia be amin'ny fikarakarana ny tetikasanao sy ny fivoaranao izany: raha ny tena izy, ny tetikasa ETL anao (ohatra) dia tetikasa Python fotsiny, ary azonao atao ny mandamina azy io araka izay tianao, amin'ny fiheverana ny mombamomba ny fotodrafitrasa, ny haben'ny ekipa ary fepetra hafa. Ny zava-drehetra dia tsotra. Ampiasao ohatra PyCharm + Git. Mahafinaritra ary tena mety!

Andeha hojerentsika ireo sampana lehibe amin'ny Airflow. Amin'ny fahatakarana ny maha-izy azy sy ny tanjon'izy ireo, dia azonao atao ny mandamina tsara ny rafitry ny fizotranao. Angamba ny tena zava-dehibe dia ny Directed Acyclic Graph (antsoina hoe DAG avy eo).

Dag

Ny DAG dia fikambanana misy dikany amin'ny asanao izay tianao hovitaina amin'ny filaharana voafaritra tsara araka ny fandaharam-potoana manokana. Ny Airflow dia manome interface tsara amin'ny Internet amin'ny fiaraha-miasa amin'ny DAG sy ny sampana hafa:

Ny Airflow dia fitaovana iray ahafahana mampivelatra sy mitazona ny fizotran'ny fanodinana angon-drakitra amin'ny fomba mora sy haingana

Ny DAG dia mety ho toy izao:

Ny Airflow dia fitaovana iray ahafahana mampivelatra sy mitazona ny fizotran'ny fanodinana angon-drakitra amin'ny fomba mora sy haingana

Ny mpamorona, rehefa mamolavola DAG, dia mametraka andiana mpandraharaha izay hananganana asa ao anatin'ny DAG. Tonga amin'ny sampana manan-danja iray hafa isika: Airflow Operator.

mpandraharaha

Ny opérateur dia sampan-draharaha mifototra amin'ny famoronana ohatra momba ny asa, izay mamaritra ny zavatra hitranga mandritra ny fanatanterahana asa iray. Famoahana ny Airflow avy amin'ny GitHub efa misy andiana mpandraharaha vonona hampiasaina. Ohatra:

  • BashOperator - mpandraharaha amin'ny fanatanterahana baiko bash.
  • PythonOperator - mpandraharaha hiantso ny code Python.
  • EmailOperator - mpandraharaha amin'ny fandefasana mailaka.
  • HTTPOperator - mpandraharaha miasa amin'ny fangatahana http.
  • SqlOperator - mpandraharaha amin'ny fanatanterahana ny kaody SQL.
  • Ny sensor dia mpandraharaha amin'ny fiandrasana hetsika iray (ny fahatongavan'ny fotoana takiana, ny fisehon'ny rakitra ilaina, ny tsipika ao anaty tahiry, ny valin'ny API, sns., sns.).

Misy mpandraharaha manokana kokoa: DockerOperator, HiveOperator, S3FileTransferOperator, PrestoToMysqlOperator, SlackOperator.

Azonao atao ihany koa ny mamolavola mpandraharaha mifototra amin'ny toetranao manokana ary mampiasa azy ireo amin'ny tetikasanao. Ohatra, namorona MongoDBToHiveViaHdfsTransfer izahay, mpandraharaha fanondranana antontan-taratasy avy amin'ny MongoDB mankany Hive, ary mpandraharaha maromaro hiara-miasa amin'ny clickhouse: CHLoadFromHiveOperator sy CHTableLoaderOperator. Amin'ny ankapobeny, raha vantany vao mampiasa fehezan-dalàna miorina amin'ny fanambarana fototra ny tetikasa iray, dia azonao atao ny mieritreritra ny hanorina azy ho fanambarana vaovao. Hanamora ny fivoarana bebe kokoa izany, ary hanitatra ny tranombokin'ny mpandraharaha amin'ny tetikasa ianao.

Manaraka, mila tanterahina ireo trangan-javatra rehetra ireo, ary hiresaka momba ny fandaharam-potoana isika.

Mpandrindra

Ny fandaharam-potoanan'ny Airflow dia miorina amin'ny Seleria. Celery dia tranomboky Python izay ahafahanao mandamina filaharana miampy famitana asa tsy mifanaraka sy mizara. Amin'ny lafiny Airflow, ny asa rehetra dia mizara ho dobo. Ny dobo dia natao tanana. Amin'ny ankapobeny, ny tanjon'izy ireo dia ny hamerana ny enta-mavesatry ny fiasana amin'ny loharano na ny fanondroana asa ao anatin'ny DWH. Ny dobo dia azo fehezina amin'ny alàlan'ny interface interface:

Ny Airflow dia fitaovana iray ahafahana mampivelatra sy mitazona ny fizotran'ny fanodinana angon-drakitra amin'ny fomba mora sy haingana

Ny dobo tsirairay dia manana fetra amin'ny isan'ny slot. Rehefa mamorona DAG dia omena dobo:

ALERT_MAILS =  Variable.get("gv_mail_admin_dwh")
DAG_NAME = 'dma_load'
OWNER = 'Vasya Pupkin'
DEPENDS_ON_PAST = True
EMAIL_ON_FAILURE = True
EMAIL_ON_RETRY = True
RETRIES = int(Variable.get('gv_dag_retries'))
POOL = 'dma_pool'
PRIORITY_WEIGHT = 10

start_dt = datetime.today() - timedelta(1)
start_dt = datetime(start_dt.year, start_dt.month, start_dt.day)

default_args = {
    'owner': OWNER,
    'depends_on_past': DEPENDS_ON_PAST,
    'start_date': start_dt,
    'email': ALERT_MAILS,
    'email_on_failure': EMAIL_ON_FAILURE,
    'email_on_retry': EMAIL_ON_RETRY,
    'retries': RETRIES,
    'pool': POOL,
    'priority_weight': PRIORITY_WEIGHT
}
dag = DAG(DAG_NAME, default_args=default_args)
dag.doc_md = __doc__

Ny dobo iray voafaritra amin'ny ambaratonga DAG dia azo fehezina amin'ny haavon'ny asa.
Ny dingana iray misaraka, Scheduler, dia tompon'andraikitra amin'ny fandrindrana ny asa rehetra ao amin'ny Airflow. Raha ny marina, ny Scheduler dia miresaka momba ny mekanika rehetra amin'ny fametrahana asa ho an'ny famonoana. Mandalo dingana maromaro ny asa alohan'ny hanatanterahana azy:

  1. Ny asa teo aloha dia vita tao amin'ny DAG; misy vaovao azo alahatra.
  2. Ny filaharana dia sokajiana arakaraka ny laharam-pahamehana amin'ny asa (azo fehezina ihany koa ny laharam-pahamehana), ary raha misy slot maimaim-poana ao amin'ny dobo, dia azo raisina ny asa.
  3. Raha misy seleria mpiasa maimaim-poana dia alefa any aminy ny asa; manomboka ny asa nomaninao amin'ny olana, mampiasa mpandraharaha iray na hafa.

Tsotra ampy.

Ny scheduler dia mandeha amin'ny fitambaran'ny DAG rehetra sy ny asa rehetra ao anatin'ny DAG.

Mba hanombohan'ny Scheduler miasa amin'ny DAG dia mila mametraka fandaharam-potoana ny DAG:

dag = DAG(DAG_NAME, default_args=default_args, schedule_interval='@hourly')

Misy karazana preset efa vita: @once, @hourly, @daily, @weekly, @monthly, @yearly.

Azonao atao koa ny mampiasa cron expressions:

dag = DAG(DAG_NAME, default_args=default_args, schedule_interval='*/10 * * * *')

Daty famonoana

Mba hahatakarana ny fomba fiasan'ny Airflow dia zava-dehibe ny mahatakatra ny datin'ny famonoana ho an'ny DAG. Ao amin'ny Airflow, ny DAG dia manana refy Daty famonoana, izany hoe, miankina amin'ny fandaharam-potoanan'ny DAG, ny trangan'asa dia noforonina isaky ny Daty famonoana. Ary ho an'ny Daty famonoana tsirairay dia azo averina averina ny asa - na, ohatra, ny DAG dia afaka miasa miaraka amin'ny Daty famonoana maromaro. Hita mazava eto izany:

Ny Airflow dia fitaovana iray ahafahana mampivelatra sy mitazona ny fizotran'ny fanodinana angon-drakitra amin'ny fomba mora sy haingana

Indrisy (na mety ho soa ihany: miankina amin'ny zava-misy izany), raha ahitsy ny fampiharana ny asa ao amin'ny DAG, dia hitohy ny famonoana amin'ny Daty famonoana teo aloha raha jerena ny fanitsiana. Tsara izany raha mila mamerina manitsy ny angon-drakitra tamin'ny vanim-potoana taloha ianao amin'ny fampiasana algorithm vaovao, saingy ratsy izany satria very ny famerenana ny vokatra (mazava ho azy fa tsy misy manelingelina anao hamerina ny dikan-teny ilaina amin'ny kaody loharano avy amin'ny Git ary kajy hoe inona mila indray mandeha ianao, araka ny ilanao azy).

Mamorona asa

Ny fampiharana ny DAG dia kaody amin'ny Python, noho izany dia manana fomba tena mety izahay hampihenana ny habetsaky ny kaody rehefa miasa, ohatra, miaraka amin'ny loharano sharded. Andeha atao hoe manana telo MySQL shards ho loharano, mila miakatra amin'ny tsirairay ianao ary maka angon-drakitra sasany. Ankoatra izany, tsy miankina sy amin'ny parallèle. Ny code Python ao amin'ny DAG dia mety ho toy izao:

connection_list = lv.get('connection_list')

export_profiles_sql = '''
SELECT
  id,
  user_id,
  nickname,
  gender,
  {{params.shard_id}} as shard_id
FROM profiles
'''

for conn_id in connection_list:
    export_profiles = SqlToHiveViaHdfsTransfer(
        task_id='export_profiles_from_' + conn_id,
        sql=export_profiles_sql,
        hive_table='stg.profiles',
        overwrite=False,
        tmpdir='/data/tmp',
        conn_id=conn_id,
        params={'shard_id': conn_id[-1:], },
        compress=None,
        dag=dag
    )
    export_profiles.set_upstream(exec_truncate_stg)
    export_profiles.set_downstream(load_profiles)

Ny DAG dia toy izao:

Ny Airflow dia fitaovana iray ahafahana mampivelatra sy mitazona ny fizotran'ny fanodinana angon-drakitra amin'ny fomba mora sy haingana

Amin'ity tranga ity, azonao atao ny manampy na manaisotra shard amin'ny alàlan'ny fanitsiana tsotra ny fanovana sy ny fanavaozana ny DAG. Mahazo aina!

Azonao atao ihany koa ny mampiasa famoronana kaody sarotra kokoa, ohatra, miara-miasa amin'ny loharano amin'ny endrika angon-drakitra na mamaritra ny rafitry ny latabatra, ny algorithm amin'ny fiasana amin'ny latabatra, ary, amin'ny fiheverana ny endrik'ireo fotodrafitrasa DWH, mamorona dingana. mba hampidirana tabilao N ao anaty fitahirizanao. Na, ohatra, miara-miasa amin'ny API izay tsy manohana ny fiasana amin'ny mari-pamantarana amin'ny endrika lisitra, azonao atao ny mamorona asa N ao amin'ny DAG avy amin'ity lisitra ity, mametra ny fitovian'ny fangatahana ao amin'ny API amin'ny dobo iray, ary mikisaka. ny angona ilaina avy amin'ny API. Flexible!

repository

Ny Airflow dia manana tahiry backend azy manokana, tahiry iray (mety ho MySQL na Postgres, manana Postgres izahay), izay mitahiry ny toetry ny asa, DAGs, fifandraisana fifandraisana, variables manerantany, sns., sns.. Eto aho dia tiako ny milaza fa ny Ny tahiry ao amin'ny Airflow dia tena tsotra (tokony ho eo amin'ny 20 latabatra) ary mety raha te-hanorina ny iray amin'ireo dinganao manokana eo amboniny ianao. Tsaroako ireo tabilao 100500 ao amin'ny tahiry Informatica, izay tsy maintsy nodinihina nandritra ny fotoana ela vao nahatakatra ny fomba fananganana fanontaniana.

fanaraha-maso

Noho ny fahatsoran'ny fitahirizana dia azonao atao ny manangana dingana fanaraha-maso asa izay mety aminao. Mampiasa notepad amin'ny Zeppelin izahay, izay hijerena ny toeran'ny asa:

Ny Airflow dia fitaovana iray ahafahana mampivelatra sy mitazona ny fizotran'ny fanodinana angon-drakitra amin'ny fomba mora sy haingana

Mety ho ny tranonkalan'ny Airflow ihany koa ity:

Ny Airflow dia fitaovana iray ahafahana mampivelatra sy mitazona ny fizotran'ny fanodinana angon-drakitra amin'ny fomba mora sy haingana

Loharanom-baovao misokatra ny kaody Airflow, noho izany dia nanampy fanairana ho an'ny Telegram izahay. Isaky ny mandeha amin'ny asa iray, raha misy hadisoana, dia mandefa spam ny vondrona ao amin'ny Telegram, izay misy ny ekipa fampandrosoana sy mpanohana manontolo.

Mahazo valiny haingana izahay amin'ny alàlan'ny Telegram (raha ilaina), ary amin'ny alàlan'ny Zeppelin dia mahazo sary ankapobeny momba ny asa ao amin'ny Airflow.

Итого

Ny Airflow dia loharano misokatra voalohany indrindra, ary tsy tokony hanantena fahagagana avy amin'izany ianao. Miomàna handany fotoana sy ezaka hananganana vahaolana mahomby. Ny tanjona dia azo tratrarina, minoa ahy, mendrika izany. Hafainganam-pandrosoana, flexibility, fanamorana ny fampidirana dingana vaovao - ho tianao izany. Mazava ho azy fa mila mitandrina be amin'ny fandaminana ny tetikasa ianao, ny fahamarinan'ny Airflow mihitsy: tsy misy fahagagana.

Ankehitriny dia manana Airflow miasa isan'andro izahay asa 6,5 ​​arivo eo ho eo. Tena samy hafa ny toetrany. Misy ny andraikitry ny fametrahana angon-drakitra ao amin'ny DWH lehibe avy amin'ny loharano samihafa sy tena voafaritra manokana, misy ny fikajiana ny trano fivarotana ao anatin'ny DWH lehibe, misy ny asa famoahana angon-drakitra ho DWH haingana, misy asa maro samihafa - ary Airflow mitsako azy rehetra isan'andro. Raha miresaka isa dia izao 2,3 Asa ELT amin'ny fahasarotana samihafa ao anatin'ny DWH (Hadoop), eo ho eo. 2,5 angona angona loharano, ekipa avy amin'ny 4 mpamorona ETL, izay mizara ho fanodinana data ETL amin'ny fanodinana data DWH sy ELT ao anaty DWH ary mazava ho azy bebe kokoa admin iray, izay misahana ny fotodrafitrasa amin'ny serivisy.

Drafitra ho an'ny ho avy

Tsy azo ihodivirana ny fitomboan'ny isan'ny dingana, ary ny zava-dehibe ho ataontsika amin'ny resaka fotodrafitrasa Airflow dia ny scaling. Te-hanorina kluster Airflow izahay, hanokana tongotra roa ho an'ny mpiasa Seleria, ary hanao lohan-doha mandika tena miaraka amin'ny fizotry ny fandaharam-potoana sy ny fitehirizana.

epilogue

Mazava ho azy fa tsy ny zavatra rehetra tiako holazaina momba ny Airflow, fa niezaka nanasongadina ireo hevi-dehibe aho. Tonga miaraka amin'ny fihinanana ny hena, andramo fa ho tianao :)

Source: www.habr.com

Add a comment