繁体   English   中英

如何在Airflow中成功完成另一个AWS-glue任务的基础上,在气流中启动python运算符boto3 AWS-glue任务?

[英]How to start a python operator boto3 AWS-glue task in airflow based on another AWS-glue task successful completion in Airflow?

我的Ariflow脚本使用python运算符执行了多个任务,以使用boto3启动粘合作业。 即使流程取决于Ariflow中的每个任务。 连续的任务不会等到前一个任务成功完成。

一旦调用上一个胶水作业任务,就会调用下一个胶水作业任务。 最后,即使Airflow看起来成功完成了,粘合作业仍在运行几分钟。

    from airflow import DAG
    from airflow.operators.python_operator import PythonOperator
    from datetime import datetime, timedelta
    from airflow.operators.sensors import TimeDeltaSensor
    import boto3
    import json

    default_args = {
    'owner': 'SAM',
    'start_date': datetime(2019, 5, 27)
     }


    glue_client = boto3.client('glue', region_name='us-east-1')

    def run_customer_job():
        glue_client.start_job_run(JobName='customer')  


    def run_product_job():
        glue_client.start_job_run(JobName='product')



    with DAG('dataload', default_args=default_args, schedule_interval="0 15 * * *") as dag:
        task1 = PythonOperator(task_id='task1',                                              
                               python_callable=run_customer_job)
        task2 = PythonOperator(task_id='task2',                                                          
                               python_callable=run_product_job)



    task1 >> task2 

我将在调用start_job_run之后创建一个状态循环,以便您的任务直到完成Glue作业后start_job_run完成。

快速简单的示例(您将需要处理失败的任务等):

job = glue_client.start_job_run(JobName='customer')

while True:
  status = glue.get_job_run(JobName=job['Name'], RunId=job['JobRunId'])
  if status['JobRun']['JobRunState'] == 'SUCCEEDED':
    break

  time.sleep(10)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM