气流+芹菜或dask。为了啥,啥时候?

Posted

技术标签:

【中文标题】气流+芹菜或dask。为了啥,啥时候?【英文标题】:Airflow + celery or dask. For what, when?气流+芹菜或dask。为了什么,什么时候? 【发布时间】:2018-08-24 21:28:21 【问题描述】:

我阅读了 Airflow 官方文档the following:

这到底是什么意思?作者所说的横向扩展是什么意思?也就是说,什么时候使用 Airflow 还不够 ,或者什么时候有人将 Airflow 与 Celery 之类的东西结合使用? (dask 也一样)

【问题讨论】:

【参考方案1】:

根据@mdurant 的回答,这是我用 3 个使用 Dask 的 Airflow DAG 示例编写的教程。希望这能让您了解何时以及如何将 Dask 与 Airflow 一起使用。

https://coiled.io/blog/3-airflow-dag-examples-with-dask/

【讨论】:

【参考方案2】:

您可能会喜欢阅读 dask 与 celery/airflow 任务管理器的比较http://matthewrocklin.com/blog/work/2016/09/13/dask-and-celery

由于您没有提出具体问题,因此像这样的一般性阅读应该会提供丰富的信息,也许您可​​以澄清您的目标。

-编辑-

最近有些人可能希望研究prefect,这是一种重写的气流(带有付费企业功能的开源核心)。

【讨论】:

【参考方案3】:

在 Airflow 术语中,“执行器”是负责运行任务的组件。 LocalExecutor 通过在 Airflow 运行所在的计算机上生成线程并让线程执行任务来做到这一点。

您的容量自然会受到本地计算机上可用资源的限制。 CeleryExecutor 将负载分配给多台机器。执行器本身将执行任务的请求发布到队列中,几个工作节点中的一个接收该请求并执行它。您现在可以扩展工作节点集群以增加整体容量。

最后,还没有准备好,有一个 KubernetesExecutor 正在制作中 (link)。这将在 Kubernetes 集群上运行任务。这不仅可以让您的任务完全隔离,因为它们在容器中运行,您还可以利用 Kubernetes 中的现有功能来自动扩展集群,以便您始终拥有最佳的可用资源量。

【讨论】:

对于LocalExecutor,任务作为子进程执行:...如果恰好是LocalExecutor,任务将作为子进程执行;在 CeleryExecutor 和 MesosExecutor 的情况下,任务是远程执行的…… SO 的一个未被充分传达的特性是它是一个 wiki(至少在某种意义上)。您完全正确,请随时编辑原始答案。

以上是关于气流+芹菜或dask。为了啥,啥时候?的主要内容,如果未能解决你的问题,请参考以下文章

Dask 中的 KilledWorker 异常是啥意思?

在 for 循环中将 Python Dask 系列转换为列表或 Dask DataFrame

与 Dask 共享内存

基于列或函数的 Dask 数据帧拆分分区

compute() 在 dask 中做啥?

将Dask包的Pandas DataFrame转换为单个Dask DataFrame