Kia ora, Habr! I roto i tenei tuhinga e hiahia ana ahau ki te korero mo tetahi taputapu nui mo te whakawhanake i nga tukanga tukatuka raraunga puranga, hei tauira, i roto i te hanganga o te DWH rangatōpū, to DataLake ranei. Ka korero tatou mo Apache Airflow (i muri nei ka kiia ko Airflow). Kaore i tika te aro ki a Habré, a ko te waahanga nui ka ngana ahau ki te whakatenatena i a koe ko te Airflow he pai ki te tirotiro i te wa e whiriwhiri ana koe i te raarangi mo o mahi ETL/ELT.
I mua, i tuhia e ahau he raupapa o nga tuhinga mo te kaupapa o DWH i taku mahi i Tinkoff Bank. Inaianei kua uru ahau ki te roopu Mail.Ru Group me te whakawhanake i tetahi papa mo te tātari raraunga i te waahi petipeti. Inaa, ka puta nga korero me nga otinga whakamere, ka korero matou ko taku roopu i konei mo to maatau papa mo te tātari raraunga.
Prologue
Na, me timata. He aha te Rererangi? He whare pukapuka tenei (ranei
Inaianei me titiro ki nga hinonga matua o Airflow. Ma te mohio ki o raatau kaupapa me o raatau kaupapa, ka taea e koe te whakarite i to hoahoanga tukanga. Akene ko te hinonga matua ko te Directed Acyclic Graph (ka kiia i muri nei ko DAG).
DAG
Ko te DAG tetahi hononga whai kiko o o mahi e hiahia ana koe ki te whakaoti i roto i te raupapa kua tino tautuhia e ai ki tetahi waarangi motuhake. Ka whakaratohia e Airflow he atanga tukutuku pai mo te mahi tahi me nga DAG me etahi atu hinonga:
Ka penei pea te ahua o te DAG:
Ko te kaiwhakawhanake, i te wa e hoahoa ana i te DAG, ka whakatakotohia e ia he huinga o nga kaiwhakahaere hei mahi i roto i te DAG. I konei ka tae mai ki tetahi atu hinonga nui: Airflow Operator.
Kaiwhakahaere
Ko te kaiwhakahaere he hinonga i runga i te kaupapa i hangaia ai nga tauira mahi, e whakaatu ana i nga mea ka puta i te wa e mahia ana he tauira mahi.
- BashOperator - kaiwhakahaere mo te whakahaere i te whakahau bash.
- PythonOperator - kaiwhakahaere mo te waea waehere Python.
- EmailOperator — kaiwhakahaere mo te tuku imeera.
- HTTPOperator - kaiwhakahaere mo te mahi me nga tono http.
- SqlOperator - kaiwhakahaere mo te whakahaere i te waehere SQL.
- Ko te Sensor he kaiwhakahaere mo te tatari mo tetahi huihuinga (te taenga mai o te wa e hiahiatia ana, te ahua o te konae e hiahiatia ana, he raina i roto i te papaarangi, he whakautu mai i te API, me etahi atu, me etahi atu).
He maha atu nga kaiwhakahaere motuhake: DockerOperator, HiveOperator, S3FileTransferOperator, PrestoToMysqlOperator, SlackOperator.
Ka taea hoki e koe te whakawhanake i nga kaiwhakahaere i runga i ou ake ahuatanga me te whakamahi i roto i to kaupapa. Hei tauira, i hanga e matou a MongoDBToHiveViaHdfsTransfer, he kaiwhakahaere mo te kaweake tuhinga mai i MongoDB ki Hive, me etahi o nga kaiwhakahaere mo te mahi me
I muri mai, ko enei waahanga katoa o nga mahi me mahi, a inaianei ka korero tatou mo te kaihoroi.
Kaihōtaka
Kua hangahia te kaihōtaka mahi a Airflow
He rohe kei ia puna mo te maha o nga waahi. I te wa e hanga ana he DAG, ka hoatu he puna:
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__
Ko te puna kua tautuhia ki te taumata DAG ka taea te whakakore i te taumata mahi.
He tukanga motuhake, Kaihōtaka, te kawenga mo te whakarite i nga mahi katoa i roto i te Rererangi. Inaa, ko te Kaihōtaka e mahi ana i nga tikanga katoa o te whakarite mahi mo te mahi. He maha nga waahanga o te mahi i mua i te mahi:
- Ko nga mahi o mua kua oti i roto i te DAG; he mea hou ka taea te rarangi.
- Ka tohua te rarangi i runga i te kaupapa matua o nga mahi (ka taea hoki te whakahaere i nga kaupapa matua), a mena he waahi kore utu kei roto i te puna, ka taea te mahi.
- Mena he herewi kaimahi kore utu, ka tukuna te mahi ki a ia; ka timata te mahi i whakamaherehia e koe i roto i te raru, ma te whakamahi i tetahi, tetahi atu ranei.
He maamaa noa.
Ka haere te Kaihōtaka i te huinga o nga DAG katoa me nga mahi katoa i roto i nga DAG.
Kia timata te Kaihōtaka ki te mahi me te DAG, me whakarite e te DAG he raarangi:
dag = DAG(DAG_NAME, default_args=default_args, schedule_interval='@hourly')
He huinga tatūkē kua rite: @once
, @hourly
, @daily
, @weekly
, @monthly
, @yearly
.
Ka taea hoki e koe te whakamahi i nga kupu cron:
dag = DAG(DAG_NAME, default_args=default_args, schedule_interval='*/10 * * * *')
Te Ra Whakamahinga
Kia mohio ai koe ki te mahi a Airflow, he mea nui kia mohio koe he aha te Ra Whakamahinga mo te DAG. I roto i te Rererangi, he inenga te Ra Whakamahinga a DAG, ara, i runga i te raarangi mahi a te DAG, ka hangaia nga waahi mahi mo ia Ra Whakamahinga. A, mo ia Ra Whakamahinga, ka taea te mahi ano - hei tauira, ka taea e te DAG te mahi i te wa kotahi i roto i nga Ra Whakamahinga maha. Ka tino whakaatuhia tenei i konei:
Kia aroha mai (he waimarie pea: kei runga i te ahuatanga), mena ka whakatikahia te whakatinanatanga o te mahi i roto i te DAG, katahi ka haere tonu te mahi i te Ra Whakamahinga o mua me te whakaaro ki nga whakatikatika. He pai tenei ki te hiahia koe ki te tatau ano i nga raraunga i nga wa o mua ma te whakamahi i te algorithm hou, engari he kino na te mea kua ngaro te whakahoki o te hua (ko te tikanga, kaore tetahi e whakararuraru i a koe ki te whakahoki i te putanga e hiahiatia ana o te waehere puna mai i a Git me te tatau he aha kotahi te wa e hiahia ana koe, te huarahi e hiahia ana koe).
Te whakaputa mahi
Ko te whakatinanatanga o te DAG he waehere i roto i te Python, no reira he huarahi tino watea ki te whakaiti i te nui o te waehere i te wa e mahi ana, hei tauira, me nga puna marau. Me kii kei a koe e toru nga maramara MySQL hei puna, me piki koe ki ia waahanga ka kohia etahi raraunga. Ano, motuhake me te whakarara. Ko te waehere Python i roto i te DAG ka penei pea te ahua:
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)
Ko te ahua o te DAG penei:
I tenei keehi, ka taea e koe te taapiri, te tango ranei i tetahi mahanga ma te whakatika noa i nga tautuhinga me te whakahou i te DAG. Te whakamarie!
Ka taea hoki e koe te whakamahi i te whakangao waehere uaua ake, hei tauira, mahi me nga puna i roto i te ahua o te putunga korero, te whakaahua ranei i te hanganga ripanga, te algorithm mo te mahi me te tepu, a, me te whakaaro ki nga ahuatanga o te hanganga DWH, ka whakaputa i tetahi tukanga. mo te uta i nga ripanga N ki to rokiroki. Hei tauira, te mahi tahi me te API kaore e tautoko i te mahi me te tawhā i te ahua o te rarangi, ka taea e koe te whakaputa N nga mahi i roto i te DAG mai i tenei rarangi, whakawhāitihia te whakarara o nga tono i roto i te API ki te puna, ka waruhia. nga raraunga e tika ana mai i te API. He ngawari!
putunga
Kei a Airflow tana ake putunga o muri, he putunga korero (ka taea te MySQL, Postgres ranei, kei a matou nga Postgres), e pupuri ana i nga ahuatanga o nga mahi, nga DAG, nga hononga hononga, nga taurangi o te ao, me era atu, me era atu. He tino ngawari te putunga i Airflow (mo te 20 nga tepu) me te watea ki te hiahia koe ki te hanga i etahi o au ake mahi ki runga ake. Kei te maumahara ahau ki nga ripanga 100500 i roto i te putunga Informatica, me ako mo te wa roa i mua i te mohio ki te hanga patai.
Aroturuki
I runga i te ngawari o te putunga, ka taea e koe te hanga i tetahi tukanga aroturuki mahi e pai ana ki a koe. Ka whakamahi matou i tetahi papa tuhipoka i Zeppelin, ka tirohia te ahuatanga o nga mahi:
Koinei pea te atanga tukutuku o Airflow ake:
Ko te waehere Airflow he puna tuwhera, no reira kua taapirihia e matou te matohi ki Telegram. Ia tauira mahi o te mahi, ki te puta he hapa, ka paopao ki te roopu i Telegram, kei reira te roopu whanaketanga me te roopu tautoko.
Ka whiwhi matou i te whakautu tere ma Telegram (mehemea e hiahiatia ana), a na Zeppelin ka whiwhi matou i te pikitia katoa o nga mahi i roto i te Airflow.
Te tapeke
Ko te rere o te hau he puna tuwhera tuatahi, a kaua koe e tumanako he tohu mai i a koe. Kia rite ki te whakapau i te wa me te whakapau kaha ki te hanga otinga e whai hua ana. Ka tutuki te whainga, whakapono mai ki ahau, he pai. Te tere o te whakawhanaketanga, te ngawari, te ngawari ki te taapiri i nga tikanga hou - ka pai ki a koe. Ko te tikanga, me tino aro koe ki te whakahaere o te kaupapa, te pumau o te Airflow ake: kaore nga merekara e puta.
Inaianei kei te mahi Airflow ia ra e 6,5 mano nga mahi. He rereke te ahua o ratou. He mahi ki te uta raraunga ki roto i te DWH matua mai i te maha o nga punaa rereke me te tino motuhake, he mahi ki te tatau i nga toa toa kei roto i te DWH matua, he mahi whakaputa raraunga ki te DWH tere, he maha, he maha nga mahi rereke - me te Rererangi. ka ngaungau ratou katoa i ia ra. Ko te korero i roto i nga tau, koinei 2,3 mano Ko nga mahi ELT he rereke te uaua i roto i te DWH (Hadoop), tata. 2,5 rau nga papaa raraunga puna, he kapa tenei no 4 Kaiwhakawhanake ETL, ka wehewehea ki te tukatuka raraunga ETL i roto i te DWH me te tukatuka raraunga ELT i roto i te DWH me te akoranga atu kotahi te kaiwhakahaere, e mahi ana i nga hanganga o te ratonga.
Mahere mo te heke mai
Kei te tipu haere te maha o nga tikanga, a ko te mea nui ka mahia e matou mo te hanganga Airflow ko te whakaheke. Kei te pirangi matou ki te hanga kapoi Rererangi, ka toha i nga waewae e rua mo nga kaimahi Herewi, me te hanga i te mahunga taarua ki a ia ano me nga tikanga whakarite mahi me tetahi putunga.
Epilogue
Ae ra, ehara tenei i nga mea katoa e hiahia ana ahau ki te korero mo te Airflow, engari i ngana ahau ki te whakanui i nga kaupapa matua. Ka tae mai te hiahia ki te kai, whakamatauria ka pai koe :)
Source: will.com