Python 远程执行时dag bash任务延迟
我正在尝试用气流来取代我们现有的cron编排,一切看起来都很有希望。我已经成功地安装并获得了一个dag来计划和执行,但我注意到它们在我指定的每个任务之间都有很大的延迟(至少15分钟到60分钟) 我的dag定义如下 我是不是错过了让他们一个接一个地跑的东西 我没有用芹菜 调度器和Web服务器都在同一台主机上运行 是的-需要调用远程执行(在此之前使用某种形式的本地操作) 并且,无法在远程服务器上安装airflow Dag应该每天在UTC凌晨1点运行一次,按照我给它设置的任务路径运行 注意:我没有执行气流回填(这很重要吗?发现问题 我没有在airflow.cfg文件中将配置从sequential更改为localExecutor 我通过电话找到了答案Python 远程执行时dag bash任务延迟,python,scheduling,directed-acyclic-graphs,airflow,Python,Scheduling,Directed Acyclic Graphs,Airflow,我正在尝试用气流来取代我们现有的cron编排,一切看起来都很有希望。我已经成功地安装并获得了一个dag来计划和执行,但我注意到它们在我指定的每个任务之间都有很大的延迟(至少15分钟到60分钟) 我的dag定义如下 我是不是错过了让他们一个接一个地跑的东西 我没有用芹菜 调度器和Web服务器都在同一台主机上运行 是的-需要调用远程执行(在此之前使用某种形式的本地操作) 并且,无法在远程服务器上安装airflow Dag应该每天在UTC凌晨1点运行一次,按照我给它设置的任务路径运行 注意:我没有执行
观看中的详细视频,我不确定有向无环图标签在这里是否合适——图论中的主题专业知识无法帮助人们回答这个问题,因此,在订阅源中跟踪该标记的人可能会发现这个问题对他们不感兴趣,除非他们也在跟踪
气流
。顺便问一下,您确定任务在预期完成时确实正在退出吗?你检查过进程表了吗?我检查过了,任务监视器上捕获的日志/标准输出显示得很好。我很好奇,我是否需要多个工作进程来让调度器对后续任务排队。很好,stdout看起来是完整的,但是,您是否验证了进程实际上已退出?SSH进程有时会在操作结束时挂起,例如,如果它们留下的任何子进程持有连接的stdin/stdout/stderr上打开的文件描述符。
import airflow
from builtins import range
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.models import DAG
from datetime import datetime, timedelta
args = {
'owner': 'user1',
'depends_on_past': False,
'start_date': airflow.utils.dates.days_ago(2),
'email': ['data-etl-errors@user1.com'],
'email_on_failure': True,
'email_on_retry': False,
'wait_for_downstream': True,
'schedule_interval': None,
'depends_on_past': True,
'retries': 1,
'retry_delay': timedelta(minutes=5)
}
dag = DAG(
dag_id='airflow_pt1'
, default_args=args
, schedule_interval='0 1 * * *'
, dagrun_timeout=timedelta(hours=8))
task1 = BashOperator(
task_id='task1'
, bash_command='ssh user1@remoteserver /path/to/remote/execution/script_task1.sh'
, dag=dag,env=None, output_encoding='utf-8')
task2 = BashOperator(
task_id='task2'
, bash_command='ssh user1@remoteserver /path/to/remote/execution/script_task2.sh'
, dag=dag,env=None, output_encoding='utf-8')
task3 = BashOperator(
task_id='task3'
, bash_command='ssh user1@remoteserver /path/to/remote/execution/script_task3.sh'
, dag=dag,env=None, output_encoding='utf-8')
task4 = BashOperator(
task_id='task4'
, bash_command='ssh user1@remoteserver /path/to/remote/execution/script_task4.sh'
, dag=dag,env=None, output_encoding='utf-8')
task2.set_upstream(task1)
task3.set_upstream(task1)
task4.set_upstream(task2)