如何使用Airflow

时间:2017-08-24 21:07:42

标签: python airflow apache-airflow airflow-scheduler

我在2015年初的MacBook Pro上运行带有+400任务的Airflow流程,配备3.1 GHz Intel Core i7处理器和16GB或RAM。

我正在运行的脚本看起来非常像this,不同之处在于我将DAG定义为

default_args = {
  'start_date': datetime.now(),
  'max_active_runs': 2
}

试图避免并行发射太多任务。以下是我执行此操作的一系列屏幕截图。我的问题是:

  1. 此操作会生成大量的python进程。是否有必要以这种方式在RAM中定义整个任务队列,或者气流可以随时生成任务"生成任务。避免启动这么多进程的方法。
  2. 我认为max_active_runs可以控制在任何给定时间实际执行的进程数。不过,回顾一下我的任务,我会有几十个占用CPU资源的任务,而其余的则是空闲的。这真的很低效,我该如何控制这种行为?
  3. 以下是一些截图:

    事情已经开始了,并没有比我预期的更多并行运行的流程: enter image description here

    一切都陷入困境,并且有很多闲置的过程。事情似乎停滞不前: enter image description here

    终端开始吐出大量错误消息,并且有很多进程失败: enter image description here

    该过程基本上循环完成这些阶段,直到完成。最终任务细分如下:

    [2017-08-24 16:26:20,171] {jobs.py:2066} INFO - [backfill progress] | finished run 1 of 1 | tasks waiting: 0 | succeeded: 213 | kicked_off: 0 | failed: 200 | skipped: 0 | deadlocked: 0 | not ready: 0
    

    有什么想法?

1 个答案:

答案 0 :(得分:1)

max_active_runs定义Airflow每个DAG将安排的运行次数。根据您使用的执行程序,执行程序具有特定容量。例如,对于最受欢迎的LocalExecutor,这是由并行性设置的。这是LocalExecutor应运行的并发任务数。 如果要约束并行运行的数量,则应使用pool