- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我主要看到Airflow被用于ETL / Bid数据相关的工作。我正在尝试将其用于业务工作流,其中用户操作将来会触发一组相关任务。其中某些任务可能需要根据某些其他用户操作来清除(删除)。
我认为最好的方法是通过动态任务ID。我读到Airflow支持动态dag ID。因此,我创建了一个简单的python脚本,该脚本以DAG id和task id作为命令行参数。但是,我遇到了使其无法正常工作的问题。它给出了dag_id not found错误。有人尝试过吗?这是脚本的代码(称为tmp.py),我在命令行上以python(python tmp.py 820 2016-08-24T22:50:00)执行:
from __future__ import print_function
import os
import sys
import shutil
from datetime import date, datetime, timedelta
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
execution = '2016-08-24T22:20:00'
if len(sys.argv) > 2 :
dagid = sys.argv[1]
taskid = 'Activate' + sys.argv[1]
execution = sys.argv[2]
else:
dagid = 'DAGObjectId'
taskid = 'Activate'
default_args = {'owner' : 'airflow', 'depends_on_past': False, 'start_date':date.today(), 'email': ['fake@fake.com'], 'email_on_failure': False, 'email_on_retry': False, 'retries': 1}
dag = DAG(dag_id = dagid,
default_args=default_args,
schedule_interval='@once',
)
globals()[dagid] = dag
task1 = BashOperator(
task_id = taskid,
bash_command='ls -l',
dag=dag)
fakeTask = BashOperator(
task_id = 'fakeTask',
bash_command='sleep 5',
retries = 3,
dag=dag)
task1.set_upstream(fakeTask)
airflowcmd = "airflow run " + dagid + " " + taskid + " " + execution
print("airflowcmd = " + airflowcmd)
os.system(airflowcmd)
最佳答案
经过无数次的尝试和错误,我得以弄清楚。希望它将对某人有所帮助。它的工作方式如下:您需要具有迭代器或外部源(文件/数据库表),才能通过模板动态生成dag /任务。您可以将dag和任务名称保持静态,仅动态分配它们的ID,以区分一个dag和另一个dag。您将此python脚本放在dags文件夹中。启动气流调度程序时,它将在每个心跳上运行此脚本,并将DAG写入数据库中的dag表。如果已经写入了一个dag(唯一的dag id),它将简单地跳过它。调度程序还会查看各个DAG的调度,以确定哪些DAG已准备好执行。如果DAG准备好执行,则将其执行并更新其状态。
这是一个示例代码:
from airflow.operators import PythonOperator
from airflow.operators import BashOperator
from airflow.models import DAG
from datetime import datetime, timedelta
import sys
import time
dagid = 'DA' + str(int(time.time()))
taskid = 'TA' + str(int(time.time()))
input_file = '/home/directory/airflow/textfile_for_dagids_and_schedule'
def my_sleeping_function(random_base):
'''This is a function that will run within the DAG execution'''
time.sleep(random_base)
def_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime.now(), 'email_on_failure': False,
'retries': 1, 'retry_delay': timedelta(minutes=2)
}
with open(input_file,'r') as f:
for line in f:
args = line.strip().split(',')
if len(args) < 6:
continue
dagid = 'DAA' + args[0]
taskid = 'TAA' + args[0]
yyyy = int(args[1])
mm = int(args[2])
dd = int(args[3])
hh = int(args[4])
mins = int(args[5])
ss = int(args[6])
dag = DAG(
dag_id=dagid, default_args=def_args,
schedule_interval='@once', start_date=datetime(yyyy,mm,dd,hh,mins,ss)
)
myBashTask = BashOperator(
task_id=taskid,
bash_command='python /home/directory/airflow/sendemail.py',
dag=dag)
task2id = taskid + '-X'
task_sleep = PythonOperator(
task_id=task2id,
python_callable=my_sleeping_function,
op_kwargs={'random_base': 10},
dag=dag)
task_sleep.set_upstream(myBashTask)
f.close()
关于airflow - Airflow 动态DAG和任务ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39133376/
我按如下方式创建我的 Airflow DAG: dag = DAG(...) 但在多个教程和类(class)中,我看到他们像这样使用 with ... as 子句: with DAG(...) as
我对 DAG、Airflow 和 Python 语法有点陌生(我从 Java 学习编码),但我有一个 DAG,其中包含大约 10 个相互独立的任务,而我有另一个 DAG,只有在所有 10 个任务都运行
下面是 Airflow DAG 代码。当 Airflow 在本地托管和在云 Composer 上托管时,它都能完美运行。但是,DAG 本身在 Composer UI 中不可单击。我发现了一个类似的问题
我有兴趣在使用 https://airflow.apache.org/docs/apache-airflow/stable/dag-run.html#passing-parameters-when-t
我有一个 DAG(有向无环图),其顶点具有黑色或白色两种颜色中的任何一种。我需要将尽可能多的黑色顶点与图形应保持非循环的约束合并在一起。因此最终的 DAG 应该有最小值。的黑色顶点。这个问题的最佳算法
我正在尝试根据用户输入在 Airflow 中生成动态工作流。我知道可以根据文件和数据库中的数据选择它,但在所有这些情况下,工作流不会直接依赖于用户输入,如果多个用户使用相同的 dag,那么在这种情况下
我正在尝试拥有一个主 dag,它将根据我的需要创建更多 dags。我在 airflow.cfg 的 dags_folder 中有以下 python 文件。此代码在数据库中创建主 dag。该主 dag
我根据教程在 dags 文件夹中放置了一个 dag 文件,稍作修改,但它没有显示在 GUI 中或运行 airflow dags list 时。 最佳答案 回答我自己的问题:通过直接运行来检查 pyth
我根据教程在 dags 文件夹中放置了一个 dag 文件,稍作修改,但它没有显示在 GUI 中或运行 airflow dags list 时。 最佳答案 回答我自己的问题:通过直接运行来检查 pyth
有调用主 dag 中不同 dags 的任务列表。我正在使用 TriggerDagrunoperator 来完成此操作。但面临一些问题。 TriggerDagrunoperator 不会等待外部 dag
我设置了 Airflow 并运行一些 DAG,计划每天一次“0 0 * * *”。 我想检查下一次安排运行特定 dag 的时间,但我看不到我可以在管理员中的什么地方执行此操作。 最佳答案 如果你想使用
我通过包管理器在我的计算机上安装了 llc 程序(当然我已经安装了 LLVM,6.0.0 版本)。另外,我从源代码构建了它。我想要的是查看由 llvm 生成的 DAG。但是,不幸的是,我在 llc-d
我在 spark 中有一个操作,应该对数据框中的几列执行。通常,有 2 种可能性来指定此类操作 硬编码 handleBias("bar", df) .join(handleBias("baz",
Airflow 似乎跳过了我添加到/usr/local/airflow/dags 的 dags。 当我跑 airflow list_dags 输出显示 [2017-08-06 17:03:47,220
非常喜欢 Airflow 工作流调度程序,但在运行一个简单的 DAG 时遇到错误:“{jobs.py:538} 错误 - DAG 运行因 DAG 陷入僵局:TEST_SCHEDULER_DAG”。 这
我使用“pip install 'apache-airflow[statsd]' 安装了 airflow[statsd] 并安装了 statsd_exporter。现在我可以看到来自 Promethe
我想查找特定执行日期的特定 dag 的所有 dag 运行。 当我阅读文档时,有这个功能:dag_runs = DagRun.find(dag_id=self.dag_name, execution_d
我有一个 python DAG Parent Job和 DAG Child Job . Child Job中的任务应该在成功完成 Parent Job 时触发每天运行的任务。如何添加外部作业触发器?
我有一个由 TriggerDagRunOperator 触发的 DAG。它似乎运行良好,除非我尝试从 Airflow GUI 中“标记失败”或“标记成功”。当我这样做时,它总是尝试将更改应用到所有以前
Airflow 正在将所有 dags 加载到数据库中,但不会触发它们。 日志文件显示以下错误 [2020-01-05 02:55:06,226] {{dagbag.py:436}} [2020-0
我是一名优秀的程序员,十分优秀!