我正在尝试创建具有以下2个任务的动态气流: 任务1:创建文件,文件中包含生成的UUID 任务2:对这些文件进行检查
因此,我定义了一个变量“ FILE_UUID”,并将其设置为:str(uuid.uuid4())。并且还创建了一个常量文件名: MY_FILE ='{file_uuid} _file.csv'.format(file_uuid = FILE_UUID}
然后-任务1是一个bashOperator,它将MY_FILE作为命令的一部分获取,并且成功创建了一个文件。 我可以看到生成的文件名称中包含一个特定的UUID
任务2失败的是一个将MY_FILE作为op_args的PythonOperator。但无法访问该文件。日志显示它尝试访问具有不同UUID的文件。
为什么我的“常数”在每个任务上都单独运行?有什么方法可以防止这种情况发生?
我正在使用Airflow 1.10,我的执行者是LocalExecutor。
我尝试在“ with DAG”外部和内部设置常量,也尝试使用宏,但是PythonOperator只是使用它们持有的值按字面意义使用宏字符串。
答案 0 :(得分:0)
您必须记住,DAG定义文件是一种“配置脚本”,而不是运行DAG的实际可执行文件。这些任务是在完全不同的环境中执行的,大多数情况下甚至不在同一台计算机上执行。可以将其想象为一种配置XML,它可以设置您的任务,然后在云中的其他计算机上构建和执行任务-但它是Python而不是XML。
总而言之-您的DAG代码是Python,但不是在任务运行时执行的代码。因此,如果您在此处生成一个随机的uuid,它将在未知时间多次评估-针对每个任务,在不同的机器上。
要使其在所有任务中保持一致,您需要找到另一种方法,例如: