气流-在本地写入文件(GCS)的任务

时间:2019-12-23 20:49:50

标签: airflow amazon-data-pipeline google-cloud-composer aws-data-pipeline

在过去几年中使用AWS DataPipeline之后,我正在用Airflow构建一些管道。我有几个我很迷惑的问题,希望能有所澄清。对于上下文,我使用的是Google Cloud Composer。

在DataPipeline中,我经常用一些任务来创建DAG,这些任务可能是这样的:

  1. 获取数据
  2. 转换数据
  3. 在某处写入数据

在此过程的每个步骤中,我都可以定义一个inputNode和/或一个outputNode。这些outputNodes将在本地安装到任务运行程序,并且一旦任务完成到定义为outputNode的s3存储桶,任何本地写入的文件都将被上载。

现在,在Airflow中,我认为没有相同的概念,对吗?

问:如果我在气流任务中本地写入文件,文件会去哪里?我假设它们只是驻留在任务运行器上,假设它在任务完成后不会自行销毁?

似乎在AWS DP中我可以挂载outputNode,执行类似的操作:

f = open("hello.txt", "a")
f.write("world")
f.close()

,任务完成后,文件hello.txt将被上载到s3存储桶。但是在Airflow中,如果我做同样的事情,文件只会放在执行任务的运行程序上?

问:我是否应该考虑以不同的方式编写任务?好像我的文件是否需要放在某个地方,我必须在任务中明确地执行它。跟进:如果是这种情况,在将本地创建的文件上传到存储中或监视这些文件在运行器上占用的空间量之后,我应该删除这些文件吗?

任何建议从AWS DP迁移到Airflow的人阅读的书,都会对您发现有帮助的材料表示赞赏。

谢谢!

编辑

在我继续研究的过程中,基于this documentation,似乎GCS和Composer做了类似的事情。看来您的作曲家环境中的/ data目录已安装在群集中/home/airflow/gcs/data的所有节点上。

测试我能够确认是这种情况。

1 个答案:

答案 0 :(得分:0)

考虑将任务之间的数据写入数据湖(GCS),以便将来可以重新运行这些任务...图片,如果您想更改算法并重新运行一年的最后一步值得的历史数据。