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
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 DAG atonu e pei o lenei:
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.
- 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.
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
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:
- O galuega muamua ua maeʻa i le DAG; e mafai ona tuʻuina se mea fou.
- 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.
- 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:
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:
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:
E mafai foi ona avea lea ma upega tafaʻilagi a le Airflow lava ia:
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