我有一个DAG,每天3:00运行,过去几周运行正常
我已将日期更新为现在7:00运行,但显然在过去的两天中它没有运行。我可以看到这两天的任务状态为“正在运行”(绿色),但没有触发任何命令
需要做更多的事情来改变DAG的去运行时间吗
我知道在过去解决这个问题的一种方法是在元数据库中清理这个DAG的任务,并更新开始日期,但我宁愿避免再次这样做
有人有什么建议吗?要安排dag,Airflow只需查找最后一个执行日期,并对计划间隔进行求和。如果此时间已过期,它将运行dag。不能简单地更新开始日期。
一种
我在气流中遇到了一个恼人的问题,它让UI中的许多任务排队,为了让它们继续运行,我必须重新启动调度程序和工作程序。我的气流配置是使用CeleryExecutor,在Reddis的帮助下在2名工人中运行
我查看了《工人》的日志,它向我展示了:
Feb 05 06:53:37 ip-172-31-46-75 airflow[3656]: airflow.exceptions.AirflowException: dag_id could not be found: dc2_phd_nw_5225_pro
我需要在我的一个DAG中从Google Cloud SQL数据库检索数据
我尝试使用CloudSqlQueryOperator(),但我的SELECT查询不起作用。有没有办法从Airflow上的Google Cloud SQL选择查询中检索数据?不会“从数据库返回任何数据,因此传递DQL查询是没有用的”
您可能想使用,也可能不想使用,这取决于您所说的不工作是什么意思?你有什么错误吗?什么错误?您需要共享发生此错误的代码。
标签: Airflow
apache-airflowairflow-scheduler
我想传递执行日期,它在变量{{ds}中。但是,我通过一个函数传递了它,它没有得到执行日期
def get_spark_step_2(date):
#logic in here
return step
exec_date = '{{ ds }}'
step_adder2 = EmrAddStepsOperator(
task_id='create_parquets',
job_flow_id="{{ task_instance.xcom_pull('cr
我有一个dag,其中包含使用芹菜执行器在不同工作节点上运行的任务列表。但是,我希望在主节点上运行其中一个任务。可能吗 是的,这是可能的。您可以设置特定的任务来收听特定的节目。气流文档对其进行了很好的介绍,但其要点是:
在表示要在特定节点上运行的任务的操作员上,将队列属性设置为不同于sclery->default\u queue值的值,该值位于afflow.cfg
在主节点上运行工作进程,方法是指定它需要侦听的队列worker-q queue\u name。如果您想让工作人员侦听多个队列,可以使用
我有一个没有时间表的DAG(根据需要手动运行)。它有许多任务。有时我想通过手动将任务状态更改为成功来“跳过”一些初始任务。更改手动执行的DAG的任务状态失败,似乎是因为解析执行日期时出现错误
是否有其他方法可以单独设置手动执行的DAG的任务状态
下面是一个例子。任务的执行日期是01-13T17:27:13.130427,我认为毫秒的解析不正确
回溯
回溯(最近一次呼叫最后一次):
文件“/opt/conda/envs/jumpman\u prod/lib/python3.6/site packa
我试图回填一个工作,要求日期调整到上个月的第一天
我可以使用:
from datetime import datetime, timedelta, date
date = (date.today().replace(day=1) - timedelta(days=1)).replace(day=1)
但我不确定气流中的回填是否会将date.today()返回为运行日期。气流对date.today()函数没有影响
事实上,如果您使用这种方法,您将删除最重要的功能之一—在任何给定日期的可重启性
我有一个DAG,每天按特定的计划间隔运行,它从API获取数据,处理数据并将其传输到Google云
现在,由于API的授权令牌不断过期,我需要自动化获取身份验证令牌(使用API)的任务,并更新API中的连接。为此,我在DAG中又添加了一个任务,用于更新我的连接中的身份验证令牌
但我想每月只安排一次,而不是每天
这是我在DAG中的默认参数
default_args = {
"owner": "airflow_admin",
"start_date": datetime(2017, 8, 29),
"
标签: Airflow
airflow-schedulerapache-airflow-xcomairflow-operator
在Airflow Web UI中,您可以从DAG中单击任务实例,并查看任务实例的详细信息。在那个页面上,我可以看到一个“任务属性”部分,其中包括bql和其他有用的信息。我正试图找出一种自动提取这些信息的方法
我发现,虽然我可以通过使用Airflow REST API获得上述信息,但我必须传入特定的DAG id和任务id,以便REST API能够工作,并且我必须从某处(例如Airflow元数据数据库)查询以获得DAG id和任务id的列表。不知何故,我觉得同时使用元数据数据库和RESTAPI既麻烦
是否有方法(最好通过配置)更改Web服务器的默认url上下文路径根
i:e而不是像这样部署服务器
本地主机:8080/admin/
我希望根路径是
localhost:8080/mywebserver/admin/
我希望避免在airflow前面使用反向代理来重写根路径。我检查了airflow.cfg中的[webserver]部分,并能够找到有助于更改默认url上下文路径的基本url配置
更新airflow.cfg并重新启动Web服务器
[webserver]
base_url = http:/
希望将气流日志写入s3。下面是我们需要根据单据设置的参数-
remote_logging = True
remote_base_log_folder =
remote_log_conn_id =
如果气流在AWS中运行,为什么我必须通过AWS键?如果对附加到实例的IAM角色设置了正确的权限,boto3 API是否应该能够写入/读取s3?公平点,但我认为,如果AWS上没有运行Airflow,或者如果您希望使用一组特定的凭据,而不是授予整个实例访问权限,则boto3 API可以提供更大的灵活性
我正在任务级别测试end\u date参数,但似乎一旦一个任务的end\u date得到满足,其他任务也会停止。下面是一个代码示例:
default_args = {'owner': 'xyz', 'depends_on_past': False,}
with DAG('dag', default_args=default_args, schedule_interval='@daily', catchup=True) as dag:
bash_end = BashOperator(
我正试图找出如何通过GoogleCloudComposer节省成本。在没有DAG运行的情况下,是否仍需要关闭服务器?然后在dag需要运行时再次旋转它
它的成本太高了,因为我相信即使我的DAG没有运行,服务器仍然在运行,我们正在收取费用
谢谢,目前,无法启用/禁用Composer环境。为了在未使用的服务器上节省资金,需要一种类似于自动缩放的功能,该功能已经提交了一份申请。
在网站上,您可以找到许多关于节约成本的有用信息
在CloudComposer中控制成本的一种方法是使用自动缩放。在GKE集群中
我所在的团队使用一家大型云提供商来托管我们所做的事情。每天早上上班前,我都有一份安排好的工作,可以在云中搭建一个开发环境,每天晚上,我都有一份安排好的工作,可以让它再次崩溃。该开发环境包括一个Apache Airflow实例,job所做的另一件事是运行包含一个任务的Airflow DAG。
我有一个间歇性的DAG问题,DAG将运行,但偶尔该任务的任务实例无法安排。它发生在今天早上,下面是任务实例的详细信息:
在这种情况下:
调度程序正在运行,并且肯定没有在重载下运行(没有其他运行)
据我所知,
我对气流是全新的。我刚安装好。我正在运行调度程序和服务器。数据库已启动。当我触发手动运行任何示例DAG时,它们将无限期地保持“运行”状态。你可以在这里看到,我在22:03开始跑步,现在是22:06-这仅仅是3分钟,但这个DAG应该在几秒钟内跑完。我之前已经等了一个小时,但它从未成功完成
这是一个常见的错误,有人可以帮我诊断吗
所以。。事实证明,您需要打开DAG才能运行,即使您已手动安排DAG
所以我试图在docker上设置airflow,我遇到了一个问题,每当我重新启动airflow容器时,它都会重新创建postgres数据库并将所有数据放在那里
我在环境变量中为SQL\u ALCHEMY\u CONN设置了一个到postgres的连接字符串,但它似乎没有帮助
有没有办法让它保留所有数据?现在报告问题的解决方案:
我用docker图像来表示Puckel维持的气流,因为它似乎很受欢迎。它似乎不再被维护,因为有100多个问题和相当多的请求等待,在过去的6个月里什么也没有发生
如果您决定使
标签: Airflow
airflow-schedulerairflow-operator
我有一个这样的dag(这是一个半伪代码),我希望根据不同的分支的输出执行任务
#This is a method that return a or b
def dosth():
.....
return a or b
t1 = PythonOperator(
't1',
python_callable = dosth
)
branchA = BashOperator(
'branchA',....
)
branchB = BashOperator(
实际上,我正在尝试使用Data Composer在气流上的DAG中设置电子邮件通知。要发送电子邮件,我使用Sendgrid电子邮件服务器
我遵循以下指南:
我遵循了所有步骤,但当我启动dag时,我在日志中看到:
{sendgrid.py:121}警告-无法发送主题为气流警报成功的电子邮件,错误:HTTP错误400:错误请求
有什么问题吗?它可能在我的环境设置中吗?我遇到了完全相同的问题,解决这个问题的方法(至少对我来说!)是在设置SENDGRID\u MAIL\u FROM时添加域
所以不是“诺
我已经配置了一个dag,如果当前实例失败,下一个实例将不会运行。然而,问题是
问题
假设任务的过去实例失败,当前实例处于等待状态。一旦我解决了如何运行当前实例而不使过去的运行成功的问题。我想查看任务(dag)失败时的历史记录
DAG
dag=dag(
dag_id='test_气流',
默认值_args=args,
标记=['wealth','python','ml'],
附表5 13***',
最大有效运行次数=1,
)
运行\u this=bash操作符(
task_id='run_afte
我是气流新手,缺乏关于配置的一些知识。我目前正在EKS上安装通过头盔的气流。当我向web服务器进行身份验证时,我找不到任何DAG
当我在本地运行容器时,我可以看到示例DAG。这是我用于为气流容器创建的Docker文件:
FROM python:3.6.3
# supervisord setup
RUN apt-get update && apt-get install -y supervisor
COPY supervisord.conf /etc/supervisor/co
我正在尝试向在Airflow UI中的变量中定义的某些人发送电子邮件。我在这里看到了一个类似的问题,但我的问题略有不同。我怀疑当我使用Jinja模板时我不能这么做
我的变量:
{ "config1" : "abc", "config2":500000, "email_on_failure_list": ["jorge@gmail.com","maria@gmail.com"]
我注意到,在气流中,日常工作的执行日期似乎令人困惑。通过阅读文档,我理解了为什么会发生这种情况。然而,这令人困惑。我想知道是否有什么最佳实践可以避免这种令人困惑的行为
执行日期定义为该期间的开始日期。
但是,如果用户手动启动DAG运行,则此手动DAG运行的执行时间正好是触发DAG运行的时间
这意味着,如果我有一个每日作业,它今天自动触发,执行日期实际上是昨天。
如果我手动触发,执行日期是今天
但是,在GUI上,作业是根据执行日期排序的。比如说我昨晚手动触发了一个作业,今天早上,同一个作业被自动
我们正在升级到Airflow 2,因此我将挂钩导入更改为:
from airflow.hooks.base_hook import BaseHook
到
现在我得到了这个错误:
{plugins_manager.py:225}错误-没有名为'afflow.hooks.base'的模块
以下是此更改的文档,但我看不到任何其他使airflow.hooks.base正常工作所需的更改:确保您在airflow 2.0上运行
您可以检查正在运行的版本
气流版本
感谢您的回复。我正在做气流1.10.15,
问题:我想在Github上使用最新版本的apache airflow及其所有依赖项安装apache airflow
如何使用pip
在生产环境中使用它是否安全?使用pip:
$ pip install git+https://github.com/apache/incubator-airflow.git@v1-10-stable
是的,它是安全的
您将需要gcc。我发现这更有用:
pip install git+git://github.com/apache/incubator-airflow
问题:气流的执行日期定义为两次运行之间周期的开始。例如,按周计划运行的DAG将在2018-01-08 T11:00:00运行,但执行日期将为2018-01-01 T11:01:00
目标:我每周收到一份文件,文件名中有文件日期。要识别文件,我想使用Airflow的执行日期。但我似乎找不到使用运行日期的方法,而不是在一段时间内使用尽可能早的执行日期
可能的解决方案:
动态修改执行日期。类似于:context['execution\u date']+timedelta(days=7)。这似乎有点骇
标签: Airflow
directed-acyclic-graphs
我已经在airflow中为python脚本中的函数编写了Dag脚本。例如,在Dag脚本中,我将python脚本作为“从数据提取器导入*”导入。我已经为气流dag脚本中的数据提取程序.py中的功能构建了工作流。但是,当我在数据提取程序.py中进行任何代码更改时,气流dag数据提取程序.py无法加载。在这种情况下,气流UI页面也不可用已加载。如何在这种情况下更好地使用气流。据我所知,您在data\u extractor.py中有一些库代码,在data\u extractor\u dag.py中有da
我有一个DAG,每天每4小时运行一次。每天,一天中的第一次运行都会失败,而其余的运行都会成功通过。最近任务的“将所有任务都传递给我”。但是当我单击DAG时,我可以从树状视图中看到第一天的运行失败
如何从数据分析中获取特定DAG的所有失败运行/任务的列表,因为我不想修改生产环境中的任何内容 转到数据分析->临时查询->气流\u Db,然后执行以下查询:
Select * from task_instance where state="failed" && dag_id="your
我希望为集群中的一些管道创建一个依赖关系图。我试图显示我的数据的起点和终点,以及这两点之间的所有数据流。我希望使用ApacheAirflow或ApacheFalcon来完成这项任务。请让我知道,如果你有什么工具使用和如何开始这个项目的任何建议。还请链接与apache falcon相关的任何文档。谢谢。Apache Airflow有一个很好的UI,允许您以树、图形甚至甘特图的形式查看DAG。了解更多信息 Apache Airflow有一个很好的UI,允许您以树、图形甚至甘特图的形式查看DAG。了解
我有这样的代码。所以在我看来,这个dag将每一小时执行一次。
但在气流网络中,我在计划部分得到了很多跑步日。这一天一直在执行。
特别是,在树状视图部分,我可以看到所有的区块在一小时内被填满!!!
我对时间间隔函数感到困惑。有没有办法解决这个问题。我知道,问题在于实际时间和开始日期之间的时间设置不一致。如果开始日期晚于实际时间,系统将回填过去的时间。在第一次运行时,它将从您在开始日期定义的日期开始。从那时起,计划程序将根据计划时间间隔创建新的DAG运行,并在满足依赖项时运行相应的任务实例。
你可以
在这一点上,我已经非常彻底地测试过了。我已经将自己的工作人员数量扩大到了一个荒谬的数字,减少到了一个更小的工作人员数量,拥有更多的RAM和CPU,将不同的配置设置回默认值,等等。唯一阻止安排任务的方法是将max\u active\u runs\u per\u dag设置为64以上的值,然后调度同一DAG的64次执行。这也发生在一个相当健壮的调度程序实例上。4芯,16GB内存,使用2个线程
谢谢
我试图了解如何通过气流xcom功能传递值。我试图构建的特定用例是编写一个文件,然后移动它,然后运行另一个命令。我的想法是将文件名从一个操作符传递到下一个操作符
以下是我所拥有的:
from airflow.models import DAG
from airflow.operators.python_operator import PythonOperator
import datetime as dt
DAG = DAG(
dag_id='xcom_test_dag',
start_
我不了解如何使用MySQL操作符来调用和使用ApacheAirflow的MySQL脚本
当我运行此任务时
MySQLTest = MySqlOperator(
task_id='MySQLTest',
sql = '/home/user/DBScripts/MySQLScript/SampleMySQLScript.sql',
我已经为我的airflow 1.10.10创建了两个新用户,使用
rbac=true
在airflow.cfg中,并在entrypoint.sh文件中使用以下命令创建了两个用户:
$CMD create_user -u admin -l admin -f admin -e admin@gmail.com -r Admin -p admin
$CMD create_user -u read_only_user -l read_only_user -f read_only_u
我知道我们可以使用bigquery_to_gcs操作符将bigquery表复制到gcs,但这也会复制列名。我有一个用例,它应该只包含列值,而不包含名称。可能吗
水果|任何|价值|
梨|
苹果梨|
香蕉苹果|
我希望我的csv文件是这样的
梨,梨
苹果、梨
苹果、梨
而如果我使用bigquery_to_gcs,则输出是
水果,任何价值
梨,梨
苹果、梨
apple,pear您应该能够在任务实例上设置print\u header=False
请参见此处的详细信息您知道如何在bigquery中执行此操
刚刚开始了解气流,想知道构建大型DAG的最佳实践是什么。对于我们的ETL,我们有许多任务属于逻辑分组,但这些分组是相互依赖的。以下哪项将被视为最佳实践
一个大型DAG文件,其中包含该文件中的所有任务
在多个文件中拆分DAG定义(如何执行此操作?)
定义多个DAG,每组任务一个,并使用ExternalTaskSensor设置它们之间的依赖关系
还有其他建议。DAG只是python文件。因此,可以将单个dag定义拆分为多个文件。不同的文件应该只具有接收dag对象并使用该dag对象创建任务的方法
我有一个气流DAG,对它来说回填是没有意义的。我计算出,对于气流1.8,可以为DAG提供参数catchup=False,因此它只会启动最近的作业。
也就是说,我想让DAG在午夜启动,并每天运行。
但是现在的问题是:DAG立即启动,而不是在午夜。此外,当我清除所有DAG运行时,它将立即再次启动。然后,DAG将每天运行,但将安排在错误的时间开始+1天
如何使DAG只开始运行最近的作业,并且在特定时间(午夜)开始运行
以下是我使用的代码:
from datetime import datetime,
DAG A具有计划“0 6***”
DAG B有附表“*/5****”
但是,DAG B应仅在DAG A完成当天的运行后才开始当天的运行
我已经尝试过subdag和ExternalTaskSensor,但还没有找到一个令人满意的解决方案,我确信我错过了一些好的东西。推荐
编辑:假设DAG A是我的ETL。DAG B有一些任务查询我的数据库,并要求数据是最新的。DAG B一整天都在运行,但只有在ETL完成后才运行
例如,我可以看到使用ShortCircuitOperator,条件是“今天运行的DA
我们在AWS ECS上运行气流,并将所有DAG捆绑在Docker映像中。我们不时地更新DAG,并部署新版本的Docker映像。当我们这样做时,ECS将杀死正在运行的webserver/scheduler/workers,并启动新的webserver/scheduler/workers。我们遇到了一些问题,一些在部署之前启动的DAG在部署之后仍然被标记为“正在运行”,即使它们的任务已被部署终止,并且一些externalSensor任务被挂起
有没有办法优雅地关闭气流?理想情况下,它可以将所有正在运
我读了这篇文章,虽然它有一个类似的标题,但它并没有真正解决我的问题
我有以下代码:
def branch_func_is_new_records(**kwargs):
ti = kwargs['ti']
xcom = ti.xcom_pull(task_ids='query_get_max_order_id')
string_to_print = 'Value in xcom is: {}'.format(xcom)
logging.info(string_to_
根据文档,“如果xcom\u push为True,则写入stdout的最后一行也将在bash命令完成时推送到xcom。”
但是,我需要返回一个多行字符串,该字符串是从终端执行的python脚本所产生的。我希望随后在EmailOperator中使用此字符串
所以我的问题是:是否有可能通过xcom\u push推送超过最后一行?理想情况下,它将是任意长的。我非常感谢你的帮助,谢谢
编辑:我通过使用PythonOperator并调用脚本解决了这个问题,但我仍然很好奇是否可以从bash操作符将多行数据推
我正试图建立一个气流DAG,它可以从一些谷歌电子表格中读取(或写入)数据。
在Airflow中的连接中,我保存了一个类型为“Google Cloud Platform”的连接,其中包括project_id、scopes和“Keyfile JSON”,这是一个带有
“类型”、“项目id”、“私钥id”、“私钥”、“客户电子邮件”、“客户id”,
“身份验证uri”、“令牌uri”、“身份验证提供者\u x509\u证书\u url”、“客户端\u x509\u证书\u url”
我可以使用
cre
我想在气流传感器超时时调用一个方法。气流库是否提供了挂钩来执行此类操作?我研究了源代码,一旦超时发生,它就会抛出AirflowSensorTimeoutException
是否有方法捕获上述异常或传感器为超时后的某个操作提供的某种钩子?虽然对于特定类型的异常(在您的例子中为超时异常)没有简单的选项,但您可以通过添加另一个执行X的任务并向其传递触发器规则='all\u failed'参数来实现这一点,因此,仅当父级失败时,此任务才会运行
例如:
sensor = FileSensor(
t
我使用的是气流,我有一个dag,它是由一个文件传感器开始的,它工作得很好,但我需要一个条件,就是匹配文件的特定模式。我看到了OmegaFileSensor,但我无法导入它(可能已弃用?)。有人已经在用我想要的东西了吗
我的达格:
import datetime as dt
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_op
我正在注册一个新的DAG,如下所示:
从气流导入DAG
从afflow.operators.python_operator导入PythonOperator
从afflow.operators.bash_operator导入bash operator
从airflow.utils.dates导入天\u
从afflow.hooks.base\u hook导入BaseHook
从datetime导入datetime、timedelta、时区
进口摆
本地_tz=钟摆。时区eutc
默认参数={
“所有
我有以下代码:
file_name = gcs_export_uri_template + '/' + TABLE_PREFIX + '_' + TABLE_NAME + '{}.json' #{} is required for the operator. if file is big it breakes it to more files as 1.json 2.json etc
import_orders_op = MySqlToGoogleCloudStorageOperator(
我需要获取气流作业的最后两个成功执行日期,以便在当前运行中使用。
例子:
执行日期作业状态
2020-05-03成功
2020-05-04失败
2020-05-05成功
问题:
当我在5月6日运行作业时,我应该将5月3日和5日的值放入变量中。可能吗 您可以利用SQLAlchemymagic来检索上次成功运行的execution\u dates
from pendulum import Pendulum
from typing import List, Dict, Any, Optional
fr
我正在尝试创建我的第一个自定义运算符
我有一个aiffair文件夹,一个dags文件夹和一个plugins文件夹
在plugins文件夹中,我有operators文件夹
我的操作员位于operators文件夹中
在我的operators文件夹中,我有以下\uuuu init\uuuu.py文件:
from operators.my_operator import MyOperator
__all__ = [
'MyOperator',
]
from airflow.plugins_m
我想测试一个端到端的dag。我有一些固定的输入数据和一些预期的结果。
我试着用谷歌搜索,不幸的是我只能找到与单元测试相关的信息
是否有一些好的做法可以遵循
我知道我可以通过终端触发DAG运行,但是如果DAG的持续时间不固定,那么检查结果是否令人满意的推荐方法是什么?一般来说,在编写ETL时,应该有验证输入和输出正确性的阶段。从气流的角度来看,这将是一个任务或任务中的一个过程,它断言有关您的数据的一些“事情”。a返回一些结果,看起来很有希望。您看到气流微风了吗?也许这对你的目的有好处
怎么了?
当任何DAG被触发然后熄灭时,airflow scheduler似乎抛出IO错误。心跳会无限期地将其标记为不健康
堆栈跟踪
Process ForkProcess-1:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/
我创建了自己的自定义操作符,正在执行logger.info(),self.log.info(),以及print(),但我看不到这些操作符的记录位置。如果我查看http://localhost:8080/log/list/...我什么也没看到。我做错了什么?浏览->日志(或http://localhost:8080/log/list/...)是一个事件日志。这不是任务日志
self.log.info()
它显示在任务实例日志中。
图形视图->单击任务->单击查看日志它将引导您进入此日志选项卡:
上一页 1 2 ...
5 6 7 8 9 10 11 ...
下一页 最后一页 共 41 页