从luigi切换到airflow
我有一个相对简单的任务,从运行120万个文件开始,每个文件都有一个管道(中间产品保存的多个步骤)。我已经在luigi中实现了这一点:。我喜欢Luigi使用文件系统查看任务是否完成。 我还发现了一个实现,在这个实现中,我可以删除一个中间产品,管道将重新创建所有依赖的产品(因此我可以更改管道)。从luigi切换到airflow,airflow,luigi,Airflow,Luigi,我有一个相对简单的任务,从运行120万个文件开始,每个文件都有一个管道(中间产品保存的多个步骤)。我已经在luigi中实现了这一点:。我喜欢Luigi使用文件系统查看任务是否完成。 我还发现了一个实现,在这个实现中,我可以删除一个中间产品,管道将重新创建所有依赖的产品(因此我可以更改管道)。 我该如何在气流中做到这一点(或者我应该坚持使用Luigi?)我真的不知道Luigi是如何工作的。我主要使用Apache气流。气流是一个工作流管理系统。这意味着它不会传输数据、转换数据或生成一些数据(尽管它会
我该如何在气流中做到这一点(或者我应该坚持使用Luigi?)我真的不知道Luigi是如何工作的。我主要使用Apache气流。气流是一个工作流管理系统。这意味着它不会传输数据、转换数据或生成一些数据(尽管它会生成日志,并且有一个称为
Xcom
的概念,它允许在任务之间交换消息,允许更细微的控制形式和共享状态),例如Apache Nifi。但是它定义了您使用操作符
实例化的每个任务的依赖项,例如操作符
。为了知道任务是否完成,它检查同一任务返回的信号
下面是一个在气流中实现的示例
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator
import glob
import gzip
import shutil
args = {
'owner': 'airflow',
'start_date': airflow.utils.dates.days_ago(2)
}
dag = DAG(
dag_id='example_dag', default_args=args,
schedule_interval='0 0 * * *',
dagrun_timeout=timedelta(minutes=60))
def extract_gzs():
for filename in glob.glob('/1002/*.gz')
with gzip.open(filename, 'rb') as f_in, open(filename[:-3], 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
extractGZ = PythonOperator(
task_id='extract_gz',
provide_context=True,
python_callable=extract_gzs(),
dag=dag)
cmd_cmd="""
your sed script!
"""
sed_script = BashOperator(
task_id='sed_script',
bash_command=cmd_cmd,
dag=dag)
extractGZ.set_downstream(sed_script)
args
中,我定义了owner
和start\u date
参数PythonOperator
,在这里我调用python函数PS:有一些Apache Airflow的例子也许,我误解了整个管道的事情。我假设您构建一个管道,然后向它提供一个数据集,然后沿着管道的线路进行转换。这意味着一条管道可以处理120万个文件。这不是思考这个问题的正确方式吗。制作一个在文件上运行sed的气流管道,然后将其应用于120万个文件,这应该很简单,不是吗?@WolfgangKerzendorf检查我修改的答案。谢谢,我会尝试一下。这还不完全是我想象的那样。我想为一个文件构建一个管道,然后以某种方式使每个文件通过这个东西。