Airflow 在多个s3键上执行任务,然后执行下一个任务

Airflow 在多个s3键上执行任务,然后执行下一个任务,airflow,airflow-scheduler,airflow-operator,apache-airflow-xcom,Airflow,Airflow Scheduler,Airflow Operator,Apache Airflow Xcom,我有一个用例,我们在s3目录中有一组10个文件(比方说)。我们正在尝试将这些文件重命名为第二个目录中对应的映射重命名文件名模式。我通过传递文件名动态创建了任务id唯一性 for file in rename_list: rename_tak = RenameOperator( task_id="file_rename_task_{}".format(str(file.split(":")[0])), s3_conn

我有一个用例,我们在s3目录中有一组10个文件(比方说)。我们正在尝试将这些文件重命名为第二个目录中对应的映射重命名文件名模式。我通过传递文件名动态创建了任务id唯一性

 for file in rename_list:
    rename_tak = RenameOperator(
        task_id="file_rename_task_{}".format(str(file.split(":")[0])),
        s3_conn_id=s3_CONN_ID,
        source_s3_bucket=source_bucket,
        destination_s3_bucket=destination_bucket,
        s3_key = source_prefix + source_key,
        rename_key = destination_key,
        output_prefix = output_prefix,
        dag=dag))
然后我再次需要对它执行另一个操作,最后将它移动到最终的s3目录。这也将在for循环中运行,因为我们有多个文件

现在,问题是没有调用第二个运算符/任务执行,没有错误,但气流日志显示“任务处于“已删除”状态,这不是执行的有效状态。必须清除该任务才能运行。”重命名运算符的第一个任务都成功,但第二个运算符只是被删除,没有输出,没有日志


任何反馈此处可能出现问题。

气流工作流是静态的,不建议使用动态任务ID。据我所知,动态DAG可以通过一些技术实现,但不直接由气流支持

现在,问题是没有调用第二个运算符/任务执行,没有错误,但气流日志显示“任务处于“已删除”状态,这不是执行的有效状态。必须清除该任务才能运行。”重命名运算符的第一个任务都成功,但第二个运算符只是被删除,没有输出,没有日志

如果不知道如何在任务之间添加依赖项,则很难确定问题

我对这个问题的理解是:

  • 您有一个s3存储桶,其中包含路径(源)中的一些文件
  • 您需要对每个文件应用一些操作
  • 将完成的文件移动到新的s3路径(目标)
  • 如果我的理解是正确的,我设计工作流的方法是:

    download_files_from_source >> apply_some_operation_on_downloaded_files >> move_files_to_destination
    
    如果您有一个跨工作人员的共享文件系统,这将起作用。DAG的每次运行都应该有自己的暂存目录,以便属于不同DAG运行的文件不会重叠


    否则,您还可以编写一个自定义操作符,完成前一个解决方案中的所有三项任务,即从源代码下载文件,对下载的文件应用一些操作,并将文件移动到目标。

    假设我们需要在源S3前缀中列出当前N个文件,然后将该列表保存在气流变量中,并将其发送到所有其他下游任务。我目前看到,由于调度器在重新加载的间隔中解析DAG,变量被清除,下游操作员无法获取文件。任务1:列出s3中所有当前文件并存储在文件中\u list=[]任务2:复制并移动到下一个s3前缀。。。任务N:由于scjheduler正在分析介于两者之间的DAG,正在清除文件\u list=[],因此无法获取文件。变量不能用于维护任务实例之间的状态,因为它们的作用域大于此范围。你要找的是。XCOM用于在任务实例之间交换消息。