首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Airflow中成功完成python operator boto3 AWS-glue任务的基础上启动该任务?

如何在Airflow中成功完成python operator boto3 AWS-glue任务的基础上启动该任务?
EN

Stack Overflow用户
提问于 2019-05-28 09:03:52
回答 2查看 3.2K关注 0票数 6

我的Ariflow脚本有几个任务,使用python操作符启动一个使用boto3的粘合作业。即使流程依赖于Ariflow中的每个任务。连续的任务不会等到前一个任务成功完成。

一旦调用了前一个粘合作业任务,就会调用下一个粘合作业任务。最后,尽管气流看起来成功完成,但胶水作业仍然运行了几分钟。

代码语言:javascript
复制
    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 
EN

回答 2

Stack Overflow用户

发布于 2019-05-29 08:42:51

Stack Overflow用户

发布于 2019-05-28 22:49:49

我会在调用start_job_run之后创建一个状态循环,这样直到胶水作业完成后,你的任务才会结束。

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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56333896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档