O le Airflow o se meafaigaluega mo le faʻaogaina ma le vave faʻaleleia ma le tausia o faʻagasologa o faʻamaumauga o faʻamaumauga

O le Airflow o se meafaigaluega mo le faʻaogaina ma le vave faʻaleleia ma le tausia o faʻagasologa o faʻamaumauga o faʻamaumauga

Talofa, Habr! I totonu o lenei tusiga ou te fia talanoa e uiga i se tasi meafaigaluega sili mo le atinaʻeina o faʻagasologa o faʻamaumauga o faʻamaumauga, mo se faʻataʻitaʻiga, i le atinaʻe o se kamupani DWH poʻo lau DataLake. O le a matou talanoa e uiga i Apache Airflow (o loʻo taʻua mulimuli ane o le Airflow). E le talafeagai le faʻaogaina o le Habré, ma i le vaega autu o le a ou taumafai e faʻamaonia oe o le Airflow e aoga le vaʻai i ai pe a filifilia se faʻatulagaina mo au faiga ETL / ELT.

I le taimi muamua, sa ou tusia se faasologa o tala i le autu o le DWH ina ua ou faigaluega i Tinkoff Bank. O lenei ua avea aʻu ma se vaega o le Mail.Ru Group team ma o loʻo ou atiaʻe se faʻavae mo suʻesuʻega faʻamaumauga i le vaega taʻaloga. O le mea moni, a'o fa'aalia tala fou ma fofo mata'ina, o le a matou talanoa ma la'u 'au iinei e uiga i la matou fa'avae mo fa'amaumauga o fa'amaumauga.

Folasaga

O lea, tatou amata. O le a le Airflow? Ole faletusi lea (po'o seti o faletusi) ia atia'e, fuafua ma mata'itū faiga o galuega. Le vaega autu o le Airflow: Python code o loʻo faʻaaogaina e faʻamatala ai (tupuina) faiga. O loʻo i ai le tele o mea lelei mo le faʻatulagaina o lau poloketi ma le atinaʻe: o le mea moni, o lau (mo se faʻataʻitaʻiga) ETL poloketi e naʻo se poloketi Python, ma e mafai ona e faʻatulagaina pe a e manaʻo ai, ma amanaʻia faʻamatalaga patino o atinaʻe, tele o le au ma isi manaoga. E faigofie mea uma. Faʻaaoga mo se faʻataʻitaʻiga PyCharm + Git. E manaia ma faigofie tele!

Sei o tatou vaʻavaʻai i vaega autu o le Airflow. E ala i le malamalama i lo latou uiga ma le faʻamoemoe, e mafai ona e faʻatulagaina lelei lau faʻasologa o fausaga. Masalo o le vaega autu o le Directed Acyclic Graph (o loʻo taʻua mulimuli ane o le DAG).

DAG

O le DAG o se feso'ota'iga 'anoa o au galuega e te mana'o e fa'amae'aina i se fa'asologa fa'amalamalama manino e tusa ai ma se fa'atulagaga patino. E maua e le Airflow se fesoʻotaʻiga i luga ole laiga talafeagai mo le galulue faʻatasi ma DAGs ma isi faʻalapotopotoga:

O le Airflow o se meafaigaluega mo le faʻaogaina ma le vave faʻaleleia ma le tausia o faʻagasologa o faʻamaumauga o faʻamaumauga

O le DAG atonu e pei o lenei:

O le Airflow o se meafaigaluega mo le faʻaogaina ma le vave faʻaleleia ma le tausia o faʻagasologa o faʻamaumauga o faʻamaumauga

O le atinaʻe, pe a mamanuina se DAG, e tuʻuina i lalo se seti o tagata faʻatautaia o galuega i totonu o le DAG o le a fausia. O lea ua tatou oo mai i se isi vaega taua: Airflow Operator.

Faʻatonu

O le tagata fa'afoe ose fa'alapotopotoga i luga o le fa'avae o galuega e fa'atupuina, lea e fa'amatala ai mea o le a tupu i le taimi o le fa'atinoina o se galuega. Ea fa'asa'oloto mai GitHub ua uma ona iai se seti o fa'agaioiga ua sauni e fa'aoga. Faataitaiga:

  • BashOperator - tagata faigaluega mo le faʻatinoina o se faʻatonuga bash.
  • PythonOperator - fa'afoe mo le vala'au o le code Python.
  • EmailOperator - tagata faigaluega mo le lafoina o imeli.
  • HTTPOperator - fa'afoe mo le galue ma talosaga http.
  • SqlOperator - fa'atonu mo le fa'atinoina o le code SQL.
  • Sensor o se faʻatautaia mo le faʻatali mo se mea na tupu (le taunuu mai o le taimi manaʻomia, foliga o le faila manaʻomia, se laina i totonu o faʻamaumauga, se tali mai le API, ma isi, ma isi).

O lo'o iai nisi fa'atonu fa'apitoa: DockerOperator, HiveOperator, S3FileTransferOperator, PrestoToMysqlOperator, SlackOperator.

E mafai fo'i ona e atia'e fa'alapotopotoga e fa'atatau i au lava uiga ma fa'aogaina i lau galuega. Mo se faʻataʻitaʻiga, na matou fatuina MongoDBToHiveViaHdfsTransfer, o se faʻalapotopotoga mo le auina atu i fafo o pepa mai MongoDB i Hive, ma le tele o faʻalapotopotoga mo le galulue faatasi. Kiliki Fale: CHLoadFromHiveOperator ma CHTableLoaderOperator. O le mea moni, o le taimi lava e masani ona faʻaaogaina ai e se poloketi le faʻailoga e fausia i luga o faʻamatalaga autu, e mafai ona e mafaufau e fausia i se faʻamatalaga fou. O lenei mea o le a faʻafaigofie atili ai le atinaʻe, ma o le a faʻalauteleina lau faletusi o faʻalapotopotoga i le poloketi.

Le isi, o nei tulaga uma o galuega e manaʻomia ona faʻatinoina, ma o lenei o le a tatou talanoa e uiga i le faʻatulagaina.

Fa'atonu

Ua fausia i luga le fa'atulagaina o galuega a le Airflow Seleti. Celery o se faletusi Python lea e mafai ai e oe ona faʻatulagaina se laina faʻatasi ai ma le asynchronous ma tufatufaina atu o galuega. I le itu Airflow, o galuega uma e vaevaeina i vaitaele. O vaita'ele e fai ma le lima. E masani lava, o lo latou fa'amoemoe o le fa'atapula'aina o le galuega o le galue ma le puna po'o le fa'ata'ita'iina o galuega i totonu o le DWH. E mafai ona pulea vaitaele e ala i le initaneti:

O le Airflow o se meafaigaluega mo le faʻaogaina ma le vave faʻaleleia ma le tausia o faʻagasologa o faʻamaumauga o faʻamaumauga

O vaita'ele ta'itasi e iai le tapula'a i le aofa'i o avanoa. Pe a fatuina se DAG, e tuʻuina atu se vaitaele:

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__

O se vaita'ele ua fa'amatalaina ile tulaga DAG e mafai ona fa'asili ile tulaga ole galuega.
O se isi faiga, Scheduler, e nafa ma le faatulagaina o galuega uma i le Airflow. O le mea moni, o le Scheduler e faʻatatau i masini uma o le setiina o galuega mo le faʻatinoina. O le galuega e alu i ni laasaga se tele aʻo leʻi faʻatinoina:

  1. O galuega muamua ua maeʻa i le DAG; e mafai ona tuʻuina se mea fou.
  2. O le laina e fa'avasega e fa'atatau i le fa'amuamua o galuega (fa'amuamua e mafai fo'i ona pulea), ma afai ei ai se avanoa avanoa i le vaita'ele, e mafai ona fa'atino le galuega.
  3. Afai e iai se tagata faigaluega e leai se totogi, e lafo atu le galuega i ai; o le galuega na e faʻapolokalameina i le faʻafitauli e amata, faʻaaoga se tasi poʻo se isi faʻaoga.

Faigofie lava.

O le faʻatulagaina e tamoʻe i luga o le seti o DAG uma ma galuega uma i totonu o DAGs.

Mo le Scheduler e amata galue ma DAG, e manaʻomia e le DAG ona seti se faʻatulagaga:

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

O loʻo i ai se seti o faʻasologa ua saunia: @once, @hourly, @daily, @weekly, @monthly, @yearly.

E mafai fo'i ona e fa'aogaina fa'amatalaga cron:

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

Aso Fa'ataunu'u

Ina ia malamalama pe faʻafefea ona galue le Airflow, e taua le malamalama i le Aso Faʻataunuʻu mo le DAG. I le Airflow, DAG o loʻo i ai se fuataga o le Aso Faʻataunuʻu, o lona uiga, e faʻatatau i le DAG faʻatulagaina o galuega, o faʻataʻitaʻiga o galuega e faia mo aso taʻitasi. Ma mo Aso Fa'ataunu'u ta'itasi, e mafai ona toe fa'atino galuega - pe, mo se fa'ata'ita'iga, e mafai e le DAG ona galue fa'atasi i nisi Aso Fa'atino. O loʻo faʻaalia manino iinei:

O le Airflow o se meafaigaluega mo le faʻaogaina ma le vave faʻaleleia ma le tausia o faʻagasologa o faʻamaumauga o faʻamaumauga

Ae paga lea (pe atonu foi e laki: e faʻalagolago i le tulaga), pe a faʻasaʻo le faʻatinoga o le galuega i le DAG, ona faʻataunuʻuina lea i le Aso Faʻataunuʻu talu ai o le a faʻaauau le amanaia o fetuunaiga. E lelei lenei pe afai e te manaʻomia le toe faʻatulagaina o faʻamatalaga i vaitaimi ua tuanaʻi e faʻaaoga ai se algorithm fou, ae e leaga ona o le toe faʻaleleia o le iʻuga ua leiloa (ioe, e leai se tasi e faʻalavelaveina oe e toe faʻafoʻi le manaʻomia o le source code mai Git ma fuafua le mea e te manaʻomia tasi le taimi, i le auala e te manaʻomia ai).

Fausia galuega

O le faʻatinoga o le DAG o le code i le Python, o lea e iai a matou auala sili ona faigofie e faʻaitiitia ai le aofaʻi o code pe a galue, mo se faʻataʻitaʻiga, faʻatasi ai ma punaoa faʻafefe. Seʻi tatou fai atu e tolu au MySQL shards e fai ma faʻapogai, e tatau ona e aʻe i totonu taʻitasi ma piki ni faʻamatalaga. E le gata i lea, tutoatasi ma tutusa. O le Python code i le DAG atonu e pei o lenei:

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)

O le DAG e pei o lenei:

O le Airflow o se meafaigaluega mo le faʻaogaina ma le vave faʻaleleia ma le tausia o faʻagasologa o faʻamaumauga o faʻamaumauga

I lenei tulaga, e mafai ona e faʻaopoopo pe aveese se shard e ala i le naʻo le fetuunai o tulaga ma faʻafouina le DAG. Fa'amafanafana!

E mafai foi ona e faʻaogaina le faʻaogaina o tulafono faʻapitoa, mo se faʻataʻitaʻiga, galue ma punaoa i le tulaga o se faʻamaumauga poʻo le faʻamatalaina o se fausaga laulau, o se algorithm mo le galue ma se laulau, ma, i le amanaia o foliga o le DWH infrastructure, faʻatupuina se faagasologa mo le utaina o laulau N i lau teuina. Poʻo, mo se faʻataʻitaʻiga, galue ma se API e le lagolagoina le galue ma se parakalafa i le tulaga o se lisi, e mafai ona e gaosia N galuega i se DAG mai lenei lisi, faʻatapulaʻa le tutusa o talosaga i le API i se vaitaele, ma vaʻai. o faʻamatalaga manaʻomia mai le API. Faigofie!

faleteuoloa

O le Airflow o loʻo i ai lona lava fale teu oloa, o se faʻamaumauga (e mafai ona avea MySQL poʻo Postgres, matou te maua Postgres), lea e teu ai setete o galuega, DAGs, fesoʻotaʻiga fesoʻotaʻiga, fesuiaiga o le lalolagi, ma isi, ma isi. fale teu oloa i Airflow e matua faigofie lava (e tusa ma le 20 laulau) ma faigofie pe afai e te manaʻo e fausia soʻo se au lava gaioiga i luga. Ou te manatua le 100500 laulau i le Informatica repository, lea e tatau ona suʻesuʻeina mo se taimi umi aʻo leʻi malamalama i le fausiaina o se fesili.

Mataitu

Ona o le faigofie o le fale teu oloa, e mafai ona e fausia se faiga mataʻituina galuega e faigofie mo oe. Matou te faʻaogaina se notepad i Zeppelin, lea matou te vaʻavaʻai ai i le tulaga o galuega:

O le Airflow o se meafaigaluega mo le faʻaogaina ma le vave faʻaleleia ma le tausia o faʻagasologa o faʻamaumauga o faʻamaumauga

E mafai foi ona avea lea ma upega tafaʻilagi a le Airflow lava ia:

O le Airflow o se meafaigaluega mo le faʻaogaina ma le vave faʻaleleia ma le tausia o faʻagasologa o faʻamaumauga o faʻamaumauga

O le Airflow code o se punaoa tatala, o lea ua matou faʻaopoopoina le mataala i Telegram. O faʻataʻitaʻiga taʻitasi o se galuega, pe a tupu se mea sese, faʻasalalau le vaega i Telegram, lea e aofia ai le atinaʻe atoa ma le au lagolago.

Matou te maua se tali vave e ala i Telegram (pe a manaʻomia), ma e ala i Zeppelin matou te maua ai se ata atoa o galuega i le Airflow.

Aofaʻi

O le Airflow e masani lava ona tatala, ma e le tatau ona e faʻamoemoeina ni vavega mai ai. Ia saunia e faʻaalu le taimi ma taumafaiga e fausia ai se fofo e aoga. O le sini e mafai ona ausia, talitonu mai ia te aʻu, e aoga. Ole saoasaoa ole atinaʻe, fetuutuunai, faigofie ole faʻaopoopoina o faiga fou - e te fiafia i ai. Ioe, e tatau ona e gauai tele atu i le faʻatulagaina o le poloketi, le mautu o le Airflow lava ia: e le tupu ni vavega.

O lea ua maua le Airflow o lo'o galue i aso uma e tusa ma le 6,5 afe galuega. E fai si eseese o latou uiga. O loʻo i ai galuega o le faʻapipiʻiina o faʻamatalaga i totonu o le DWH autu mai le tele o punaoa eseese ma sili ona patino, o loʻo i ai galuega o le fuafuaina o faleoloa i totonu o le DWH autu, o loʻo i ai galuega o le lolomiina o faʻamatalaga i se DWH vave, e tele, tele galuega eseese - ma le Airflow lamu uma i lea aso ma lea aso. I le tautala i numera, o le mea lea 2,3 afe ELT galuega e eseese lavelave i totonu DWH (Hadoop), tusa. 2,5 selau faʻamaumauga puna, o le 'au lenei mai 4 ETL atiaʻe, lea e vaevaeina i le ETL faʻasologa o faʻamatalaga i le DWH ma le ELT faʻamaumauga faʻamaumauga i totonu DWH ma o le mea moni e sili atu tasi le pule, o loʻo feagai ma atinaʻe o le auaunaga.

Fuafuaga mo le lumanaʻi

Ole numera o faʻagasologa o loʻo faʻatupulaia, ma o le mea autu o le a tatou faia i tulaga o le Airflow infrastructure o le faʻateleina. Matou te mananaʻo e fausia se fuifui Airflow, tuʻufaʻatasia se pea vae mo tagata faigaluega Seleri, ma fai se ulu faʻapipiʻi faʻatasi ma faiga faʻatulagaina galuega ma se fale teu oloa.

Epilogue

O lenei, ioe, e le o mea uma ou te manaʻo e taʻu atu e uiga i le Airflow, ae sa ou taumafai e faʻamaonia manatu autu. E sau le mana'o ma le 'ai, taumafai ma e te fiafia i ai :)

puna: www.habr.com

Faaopoopo i ai se faamatalaga