Airflow ke sesebelisoa sa ho ntshetsa pele le ho boloka lits'ebetso tsa ts'ebetso ea data ea batch ha bonolo le kapele

Airflow ke sesebelisoa sa ho ntshetsa pele le ho boloka lits'ebetso tsa ts'ebetso ea data ea batch ha bonolo le kapele

Lumela, Habr! Sehloohong sena ke batla ho bua ka sesebelisoa se le seng se seholo sa ho nts'etsapele lits'ebetso tsa ts'ebetso ea data ea batch, mohlala, litsing tsa motheo tsa DWH ea khoebo kapa DataLake ea hau. Re tla bua ka Apache Airflow (eo ka mor'a moo e bitsoang Airflow). Ha e hlokomeloe ka leeme ho Habré, 'me karolong e ka sehloohong ke tla leka ho u kholisa hore bonyane Airflow e lokela ho shejoa ha u khetha kemiso bakeng sa mekhoa ea hau ea ETL / ELT.

Pejana, ke ile ka ngola letoto la lingoloa ka sehlooho sa DWH ha ke ne ke sebetsa Tinkoff Bank. Hona joale ke fetohile karolo ea sehlopha sa Mail.Ru Group 'me ke ntse ke ntlafatsa sethala sa tlhahlobo ea lintlha sebakeng sa lipapali. Haele hantle, ha litaba le litharollo tse khahlisang li hlaha, 'na le sehlopha sa ka re tla bua mona ka sethala sa rona sa tlhahlobo ea data.

Prologue

Kahoo, ha re qaleng. Airflow ke eng? Ena ke laebrari (kapa sehlopha sa lilaebrari) ho ntshetsapele, ho rera le ho beha leihlo ditshebetso tsa mosebetsi. Karolo e ka sehloohong ea Airflow: Khoutu ea Python e sebelisetsoa ho hlalosa (ntlafatsa) lits'ebetso. Sena se na le melemo e mengata ea ho hlophisa morero oa hau le nts'etsopele: ha e le hantle, morero oa hau (mohlala) oa ETL ke morero oa Python feela, 'me u ka o hlophisa kamoo u lakatsang kateng, u ela hloko lintlha tse khethehileng tsa lisebelisoa, boholo ba sehlopha le litlhoko tse ling. Ka lisebelisoa tsohle li bonolo. Sebelisa mohlala PyCharm + Git. E babatseha ebile e loketse haholo!

Joale ha re shebeng likarolo tsa mantlha tsa Airflow. Ka ho utloisisa moelelo le sepheo sa bona, o ka hlophisa meralo ea hau ea ts'ebetso hantle. Mohlomong mokhatlo o ka sehloohong ke Directed Acyclic Graph (eo hamorao e tla bitsoa DAG).

DAG

DAG ke mokhatlo o itseng o nang le moelelo oa mesebetsi ea hau eo u batlang ho e phetha ka tatellano e hlakileng ho latela kemiso e itseng. Airflow e fana ka sebopeho se bonolo sa marang-rang bakeng sa ho sebetsa le li-DAG le mekhatlo e meng:

Airflow ke sesebelisoa sa ho ntshetsa pele le ho boloka lits'ebetso tsa ts'ebetso ea data ea batch ha bonolo le kapele

DAG e ka shebahala tjena:

Airflow ke sesebelisoa sa ho ntshetsa pele le ho boloka lits'ebetso tsa ts'ebetso ea data ea batch ha bonolo le kapele

Mohlahisi, ha a rala DAG, o beha sehlopha sa basebetsi hore na mesebetsi ka har'a DAG e tla hahuoa. Mona re tla setsing se seng sa bohlokoa: Airflow Operator.

Basebelisi

Opareitara ke setheo seo ho itshetlehileng ka sona maemo a mosebetsi a thehwang, se hlalosang se tla etsahala nakong ya ho phethahatsa ketsahalo ya mosebetsi. Airflow e lokolloa ho tloha GitHub e se e ntse e na le sehlopha sa li-operator tse seng li loketse ho sebelisoa. Mehlala:

  • BashOperator - opareitara bakeng sa ho phethahatsa taelo ea bash.
  • PythonOperator - opareitara bakeng sa ho letsetsa khoutu ea Python.
  • EmailOperator — opareitara bakeng sa ho romella lengolo-tsoibila.
  • HTTPOperator - opareitara bakeng sa ho sebetsa le likopo tsa http.
  • SqlOperator - opareitara bakeng sa ho sebelisa khoutu ea SQL.
  • Sensor ke opareitara bakeng sa ho emela ketsahalo (ho fihla ha nako e hlokahalang, ponahalo ea faele e hlokahalang, mohala oa database, karabo e tsoang ho API, joalo-joalo, joalo-joalo).

Ho na le basebelisi ba khethehileng: DockerOperator, HiveOperator, S3FileTransferOperator, PrestoToMysqlOperator, SlackOperator.

U ka boela ua nts'etsapele li-operator ho latela litšoaneleho tsa hau 'me ua li sebelisa morerong oa hau. Mohlala, re thehile MongoDBToHiveViaHdfsTransfer, opareitara bakeng sa ho romela litokomane ho tloha MongoDB ho ea Hive, le basebetsi ba 'maloa bakeng sa ho sebetsa le TlanyaHouse: CLoadFromHiveOperator le CHTableLoaderOperator. Ha e le hantle, hang ha morero o sebelisa khoutu e hahiloeng holim'a lipolelo tsa motheo, u ka nahana ka ho e aha polelong e ncha. Sena se tla nolofatsa tsoelo-pele e eketsehileng, 'me u tla atolosa laeborari ea hau ea basebetsi morerong.

Ka mor'a moo, liketsahalo tsena tsohle tsa mesebetsi li hloka ho etsoa, ​​​​'me joale re tla bua ka kemiso.

Mohlophisi

Sehlophisi sa mosebetsi sa Airflow se hahiloe holim'a Seleri. Celery ke laeborari ea Python e u lumellang hore u hlophise queue hammoho le ts'ebetso e sa tsitsang le e ajoang ea mesebetsi. Ka lehlakoreng la Airflow, mesebetsi eohle e arotsoe ka matamo. Matamo a entsoe ka letsoho. Ka tloaelo, sepheo sa bona ke ho fokotsa boima ba mosebetsi oa ho sebetsa le mohloli kapa ho tšoaea mesebetsi e ka har'a DWH. Matamo a ka laoloa ka sebopeho sa marang-rang:

Airflow ke sesebelisoa sa ho ntshetsa pele le ho boloka lits'ebetso tsa ts'ebetso ea data ea batch ha bonolo le kapele

Letamo le leng le le leng le na le moeli oa palo ea li-slots. Ha u theha DAG, e fuoa letamo:

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__

Letamo le hlalositsoeng boemong ba DAG le ka tlosoa boemong ba mosebetsi.
Ts'ebetso e arohaneng, Scheduler, e ikarabella bakeng sa ho hlophisa mesebetsi eohle ho Airflow. Haele hantle, Scheduler e sebetsana le mechanics eohle ea ho beha mesebetsi bakeng sa ho e etsa. Mosebetsi o feta mekhahlelo e mengata pele o etsoa:

  1. Mesebetsi e fetileng e phethiloe ho DAG; e ncha e ka hlophisoa.
  2. Letoto le hlophisitsoe ho latela lintho tse tlang pele ho mesebetsi (lintho tse tlang pele li ka laoloa hape), 'me haeba ho na le slot ea mahala ka letamong, mosebetsi o ka etsoa.
  3. Haeba ho na le celery ea mosebeletsi ea sa lefelloeng, mosebetsi o romeloa ho oona; mosebetsi oo o o hlophisitseng bothateng o qala, o sebelisa opereishene e le 'ngoe.

E bonolo ka ho lekaneng.

Scheduler e sebetsa ho sehlopha sa li-DAG tsohle le mesebetsi eohle ka har'a li-DAG.

Hore Scheduler a qale ho sebetsa le DAG, DAG e hloka ho beha kemiso:

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

Ho na le lethathamo la li-presets tse entsoeng esale pele: @once, @hourly, @daily, @weekly, @monthly, @yearly.

U ka sebelisa mantsoe a cron:

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

Letsatsi la ho Phethahatso

Ho utloisisa hore na Airflow e sebetsa joang, ho bohlokoa ho utloisisa hore na Letsatsi la Phethahatso ke lefe bakeng sa DAG. Ho Airflow, DAG e na le tekanyo ea Letsatsi la Phethahatso, ke hore, ho latela kemiso ea mosebetsi ea DAG, liketsahalo tsa mesebetsi li etsoa bakeng sa Letsatsi ka leng la Phethahatso. 'Me bakeng sa Letsatsi le leng le le leng la Phethahatso, mesebetsi e ka etsoa hape - kapa, mohlala, DAG e ka sebetsa ka nako e le' ngoe Matsatsing a 'maloa a Phethahatso. Sena se bontšoa ka ho hlaka mona:

Airflow ke sesebelisoa sa ho ntshetsa pele le ho boloka lits'ebetso tsa ts'ebetso ea data ea batch ha bonolo le kapele

Ka bomalimabe (kapa mohlomong ka lehlohonolo: ho itšetlehile ka boemo), haeba ts'ebetsong ea mosebetsi ho DAG e lokisoa, joale ts'ebetso ea Letsatsi la Phethahatso e fetileng e tla tsoela pele ho nahanoa ka liphetoho. Sena se molemo haeba o hloka ho bala hape data ka linako tse fetileng u sebelisa algorithm e ncha, empa ho hobe hobane ho ikatisa ha sephetho ho lahlehile (ho hlakile, ha ho motho ea u khathatsang hore u khutlisetse mofuta o hlokahalang oa khoutu ea mohloli ho tsoa ho Git le ho bala hore na ke eng. u hloka nako e le 'ngoe, ka tsela eo u e hlokang ka eona).

Ho hlahisa mesebetsi

Ts'ebetsong ea DAG ke khoutu ho Python, kahoo re na le mokhoa o bonolo haholo oa ho fokotsa palo ea khoutu ha re sebetsa, mohlala, ka mehloli e sharded. Ha re re u na le li-shards tse tharo tsa MySQL e le mohloli, u hloka ho hloella ho e 'ngoe le e' ngoe ebe u nka lintlha tse ling. Ho feta moo, ka boikemelo le ka tsela e tšoanang. Khoutu ea Python ho DAG e kanna ea shebahala tjena:

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)

DAG e shebahala tjena:

Airflow ke sesebelisoa sa ho ntshetsa pele le ho boloka lits'ebetso tsa ts'ebetso ea data ea batch ha bonolo le kapele

Tabeng ena, o ka eketsa kapa oa tlosa shard ka ho fetola litlhophiso le ho ntlafatsa DAG. E phutholohile!

U ka boela ua sebelisa mokhoa o rarahaneng oa ho hlahisa khoutu, mohlala, ho sebetsa le mehloli ka mokhoa oa database kapa ho hlalosa sebopeho sa tafole, algorithm bakeng sa ho sebetsa le tafole, 'me, ho nahanela likarolo tsa mohaho oa DWH, hlahisa ts'ebetso. bakeng sa ho kenya litafole tsa N polokelong ea hau. Kapa, ​​​​ka mohlala, ho sebetsa le API e sa tšehetseng ho sebetsa le parameter ka mokhoa oa lenane, o ka hlahisa mesebetsi ea N ho DAG ho tsoa lethathamong lena, fokotsa ho tšoana ha likopo ho API ho ea letamong, le ho senya. data e hlokahalang ho tsoa ho API. E tenyetseha!

polokelo

Airflow e na le polokelo ea eona ea morao-rao, database (e ka ba MySQL kapa Postgres, re na le Postgres), e bolokang libaka tsa mesebetsi, li-DAG, litlhophiso tsa khokahano, mefuta-futa ea lefats'e, joalo-joalo, joalo-joalo Mona ke rata hore nka re polokelo ea Airflow e bonolo haholo (e ka bang litafole tse 20) ebile e bonolo haeba u batla ho iketsetsa mekhoa ea hau holim'a eona. Ke hopola litafole tse 100500 sebakeng sa polokelo ea Informatica, tse neng li tlameha ho ithutoa nako e telele pele li utloisisa mokhoa oa ho theha potso.

Tlhokomelo

Ka lebaka la bonolo ba polokelo, o ka theha mokhoa oa ho lekola mosebetsi o loketseng uena. Re sebelisa notepad ho Zeppelin, moo re shebang boemo ba mesebetsi:

Airflow ke sesebelisoa sa ho ntshetsa pele le ho boloka lits'ebetso tsa ts'ebetso ea data ea batch ha bonolo le kapele

Sena e kanna ea ba sebopeho sa webo sa Airflow ka boeona:

Airflow ke sesebelisoa sa ho ntshetsa pele le ho boloka lits'ebetso tsa ts'ebetso ea data ea batch ha bonolo le kapele

Khoutu ea Airflow ke mohloli o bulehileng, kahoo re kentse tlhokomeliso ho Telegraph. Mohlala o mong le o mong o sebetsang oa mosebetsi, haeba phoso e etsahala, e senya sehlopha ho Telegraph, moo sehlopha sohle sa nts'etsopele le ts'ehetso se nang le sona.

Re fumana karabo e potlakileng ka Telegraph (haeba ho hlokahala), mme ka Zeppelin re fumana setšoantšo se akaretsang sa mesebetsi ho Airflow.

Kakaretso

Airflow ke mohloli o bulehileng, 'me ha oa lokela ho lebella mehlolo ho eona. Itokisetse ho beha nako le boiteko ba ho theha tharollo e sebetsang. Sepheo se ka finyelloa, nkholoe, ke habohlokoa. Lebelo la nts'etsopele, ho tenyetseha, boiketlo ba ho eketsa lits'ebetso tse ncha - u tla e rata. Ha e le hantle, ho hlokahala hore u ele hloko haholo mokhatlo o hlophisitsoeng oa morero, botsitso ba Airflow ka boeona: mehlolo ha e etsahale.

Hona joale re na le Airflow e sebetsang letsatsi le letsatsi mesebetsi e ka bang likete tse 6,5. Li fapane haholo ka sebopeho. Ho na le mesebetsi ea ho kenya data ho DWH e kholo ho tsoa mehloling e mengata e fapaneng le e ikhethileng haholo, ho na le mesebetsi ea ho bala li-storefronts ka hare ho DWH e kholo, ho na le mesebetsi ea ho phatlalatsa data ho DWH e potlakileng, ho na le mesebetsi e mengata, e mengata e fapaneng - le Airflow. li hlafuna kaofela letsatsi le letsatsi. Ho bua ka lipalo, sena ke Tse sekete Mesebetsi ea ELT ea ho rarahana ho fapaneng ka har'a DWH (Hadoop), hoo e ka bang. 2,5 makholo a polokelo ea boitsebiso mehloli, sena ke sehlopha ho tloha Baetsi ba 4 ba ETL, tse arotsoeng ka ts'ebetso ea data ea ETL ho DWH le ELT data processing ka hare ho DWH le ho feta admin e le 'ngoe, ea sebetsanang le lisebelisoa tsa litšebeletso.

Merero ea bokamoso

Palo ea lits'ebetso e ntse e hola ka mokhoa o ke keng oa qojoa, 'me ntho ea mantlha eo re tla beng re e etsa ho latela metheo ea Airflow ke ho eketseha. Re batla ho haha ​​​​sehlopha sa Airflow, ho abela basebetsi ba Celery para ea maoto, le ho iketsetsa hlooho e ikatisang ka mekhoa ea ho hlophisa mosebetsi le polokelo.

Epilogue

Sena, ehlile, ha se ntho e 'ngoe le e' ngoe eo nka ratang ho e bua ka Airflow, empa ke lekile ho totobatsa lintlha tsa bohlokoa. Takatso ea lijo e tla le ho ja, e leke 'me u tla e rata :)

Source: www.habr.com

Eketsa ka tlhaloso