Ko te Rererangi he taputapu mo te wawari me te tere te whakawhanake me te pupuri i nga tukanga tukatuka raraunga puranga

Ko te Rererangi he taputapu mo te wawari me te tere te whakawhanake me te pupuri i nga tukanga tukatuka raraunga puranga

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 huinga whare pukapuka) ki te whakawhanake, ki te whakamahere me te aroturuki i nga tukanga mahi. Ko te ahuatanga matua o Airflow: Ka whakamahia te waehere Python ki te whakaahua (whakawhanake) i nga tukanga. He maha nga painga mo te whakarite i to kaupapa me to whanaketanga: ko te tikanga, ko to kaupapa (hei tauira) ko te kaupapa ETL he kaupapa Python anake, a ka taea e koe te whakarite kia rite ki to hiahia, me te whakaaro ki nga waahanga o te hanganga, te rahi o te roopu me etahi atu whakaritenga. Ma te taputapu he ngawari nga mea katoa. Whakamahia hei tauira PyCharm + Git. He mea whakamiharo me te tino watea!

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:

Ko te Rererangi he taputapu mo te wawari me te tere te whakawhanake me te pupuri i nga tukanga tukatuka raraunga puranga

Ka penei pea te ahua o te DAG:

Ko te Rererangi he taputapu mo te wawari me te tere te whakawhanake me te pupuri i nga tukanga tukatuka raraunga puranga

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. Ko te rere o te hau mai i GitHub kei roto kē he huinga kaiwhakahaere kua reri ki te whakamahi. Tauira:

  • 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 PaateneToko: CHLoadFromHiveOperator me CHTableLoaderOperator. Ko te mea nui, ina whakamahia e tetahi kaupapa te waehere i hangaia i runga i nga korero taketake, ka taea e koe te whakaaro ki te hanga hei korero hou. Ma tenei ka ngawari ake te whakawhanaketanga, ka whakawhānuihia e koe to whare pukapuka o nga kaiwhakahaere i roto i te kaupapa.

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 Herea. Ko te herewi he whare pukapuka Python e taea ai e koe te whakarite i tetahi rarangi me te mahi tukutahi me te tohatoha o nga mahi. I te taha Rererangi, ka wehewehea nga mahi katoa ki nga puna. Ko nga puna ka hangaia ma te ringa. I te nuinga o te waa, ko ta raatau kaupapa ko te whakawhāiti i te taumahatanga o te mahi me te puna, ki te tohu mahi ranei i roto i te DWH. Ka taea te whakahaere i nga puna ma te atanga tukutuku:

Ko te Rererangi he taputapu mo te wawari me te tere te whakawhanake me te pupuri i nga tukanga tukatuka raraunga puranga

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:

  1. Ko nga mahi o mua kua oti i roto i te DAG; he mea hou ka taea te rarangi.
  2. 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.
  3. 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:

Ko te Rererangi he taputapu mo te wawari me te tere te whakawhanake me te pupuri i nga tukanga tukatuka raraunga puranga

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:

Ko te Rererangi he taputapu mo te wawari me te tere te whakawhanake me te pupuri i nga tukanga tukatuka raraunga puranga

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:

Ko te Rererangi he taputapu mo te wawari me te tere te whakawhanake me te pupuri i nga tukanga tukatuka raraunga puranga

Koinei pea te atanga tukutuku o Airflow ake:

Ko te Rererangi he taputapu mo te wawari me te tere te whakawhanake me te pupuri i nga tukanga tukatuka raraunga puranga

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

Tāpiri i te kōrero