- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我们已经使用 LocalExecutor
为我们的 ETL 设置了 Airbnb/Apache Airflow,并且随着我们开始构建更复杂的 DAG,我们注意到 Airflow 已经开始使用大量的系统资源。这让我们感到惊讶,因为我们主要使用 Airflow 来编排发生在其他服务器上的任务,因此 Airflow DAG 大部分时间都在等待它们完成——并没有在本地发生实际执行。
最大的问题是 Airflow 似乎总是用完 100% 的 CPU(在 AWS t2.medium 上),并且使用默认的 airflow.cfg 设置使用超过 2GB 的内存。
如果相关,我们使用 docker-compose 运行 Airflow,运行容器两次;一次作为 scheduler
一次作为 webserver
。
我们在这里做错了什么?这正常吗?
编辑:这是 htop
的输出,按使用的内存百分比排序(因为这似乎是现在的主要问题,我让 CPU 停机):
我想理论上我可以减少 gunicorn worker 的数量(默认为 4),但我不确定所有 /usr/bin/dockerd
进程是什么。如果 Docker 让事情变得复杂,我可以删除它,但它使更改的部署非常容易,如果可能的话我宁愿不删除它。
最佳答案
我还尽我所能降低 CPU 使用率,而 Matthew Housley 关于 MIN_FILE_PROCESS_INTERVAL 的建议起到了作用。
至少在 Airflow 1.10 出现之前...然后 CPU 使用率再次飙升。
因此,为了让 Airflow 在具有 2gb 内存和 1 个 vcpu 的标准 digital ocean 液滴上正常工作,我必须做的所有事情:
防止 Airflow 一直重新加载 dag 并设置: AIRFLOW__SCHEDULER__MIN_FILE_PROCESS_INTERVAL=60
AIRFLOW-2895 Airflow 1.10 中的错误,导致 CPU 负载高,因为调度程序不停地循环。
它已经在 master 中修复,并有望包含在 Airflow 1.10.1 中,但它可能需要数周或数月才能发布。同时这个补丁解决了这个问题:
--- jobs.py.orig 2018-09-08 15:55:03.448834310 +0000
+++ jobs.py 2018-09-08 15:57:02.847751035 +0000
@@ -564,6 +564,7 @@
self.num_runs = num_runs
self.run_duration = run_duration
+ self._processor_poll_interval = 1.0
self.do_pickle = do_pickle
super(SchedulerJob, self).__init__(*args, **kwargs)
@@ -1724,6 +1725,8 @@
loop_end_time = time.time()
self.log.debug("Ran scheduling loop in %.2f seconds",
loop_end_time - loop_start_time)
+ self.log.debug("Sleeping for %.2f seconds", self._processor_poll_interval)
+ time.sleep(self._processor_poll_interval)
# Exit early for a test mode
if processor_manager.max_runs_reached():
使用 patch -d /usr/local/lib/python3.6/site-packages/airflow/ < af_1.10_high_cpu.patch;
应用它
如果您升级为使用新的 RBAC 网络服务器 UI,您可能还会注意到网络服务器持续使用大量 CPU。
由于某种原因,RBAC 接口(interface)在启动时会占用大量 CPU。如果您在低功率服务器上运行,这可能会导致网络服务器启动速度非常慢,并且 CPU 使用率会一直居高不下。
我已将此错误记录为 AIRFLOW-3037 .要解决它,您可以调整配置:
AIRFLOW__WEBSERVER__WORKERS=2 # 2 * NUM_CPU_CORES + 1
AIRFLOW__WEBSERVER__WORKER_REFRESH_INTERVAL=1800 # Restart workers every 30min instead of 30seconds
AIRFLOW__WEBSERVER__WEB_SERVER_WORKER_TIMEOUT=300 #Kill workers if they don't start within 5min instead of 2min
通过所有这些调整,在具有 1 个 vcpu 和 2gb 内存的 digital ocean 标准液滴上,我的 Airflow 在空闲时间仅使用了百分之几的 CPU。
关于docker - Airbnb Airflow 使用所有系统资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42419834/
在Airflow中,我一直在使用“airflow run”和“airflow test”,但不完全理解它们有何不同。他们有什么区别? 最佳答案 我自己通读了文档,发现它是多么令人困惑。 Airflow
我使用 Airflow 已经有一段时间了,它是由一位同事创建的。最近我遇到了一些错误,这需要我更深入地了解如何修复 Airflow 中的某些问题。 我确实理解这三个进程是什么,但我只是不明白运行它们时
AIRFLOW_HOME=/path/to/my/airflow_home 我收到这个警告... >airflow trigger_dag python_dag3 /Users/alexryan/mi
有没有人报告过他们在他们的公司中让 Airflow 扩展了多少?我正在考虑实现 Airflow 来执行 5,000 多个任务,每个任务每小时运行一次,有一天可以将其扩展到 20,000 多个任务。在检
问题 :我想使用 Github 上最新版本的 Apache-Airflow 安装 apache-airflow 以及所有依赖项? 我怎样才能使用 pip 做到这一点? 在生产环境中使用它是否安全? 最
我们在 AWS ECS 上运行 Airflow,并将所有 DAG 捆绑在一个 Docker 镜像中。我们不时更新 DAGS,并部署新版本的 Docker Image。当我们这样做时,ECS 将终止正在
问题很简单。我需要限制 Airflow 网络用户仅查看和执行某些 DAG 和任务。 如果可能,我宁愿不使用 Kerberos也不是 OAuth . Multi-tenancy option 似乎是一个
我们正在使用 Airflow 2.00。我正在尝试实现一个做两件事的 DAG: 通过 API 触发报告 从源到目标下载报告。 任务 1 和任务 2 之间至少需要 2-3 小时的间隔。根据我的研究,我有
对于一项任务,有许多辅助任务 - 从文件/数据库中获取/保存属性、验证、审计。这些辅助方法并不耗时。 一个示例 DAG 流, fetch_data >> actual_processing >> va
有什么方法可以重新加载作业而不必重新启动服务器吗? 最佳答案 在airflow.cfg中,您具有以下两种配置来控制此行为: # after how much time a new DAGs shoul
我们可以通过将任务/dag 超时设置为 None 并手动触发其运行来使用 Airflow dag 来定义永无止境的作业(即具有无条件循环以消耗流数据的任务)吗?让 Airflow 监测永无止境的任务会
我是 Airflow 的新手,最近开始探索这个工具。我在 18.4 版本的 ubuntu 机器上安装了 1.10.10 版。从设置和安装的角度来看,一切正常,但是我在任何 DAG 中的任务都没有运行,
我主要看到Airflow被用于ETL / Bid数据相关的工作。我正在尝试将其用于业务工作流,其中用户操作将来会触发一组相关任务。其中某些任务可能需要根据某些其他用户操作来清除(删除)。 我认为最好的
我有一个 DAG,只要 FileSensor 检测到文件,它就会使用它,为每个文件生成任务,以 (1) 将文件移动到暂存区域,(2) 触发单独的 DAG 来处理文件。 FileSensor -> Mo
我需要手动或以编程方式执行的管道,可以使用 Airflow 吗?看起来现在每个工作流程都必须与时间表绑定(bind)。 最佳答案 只需在创建 DAG 时将 schedule_interval 设置为
所以这是一个愚蠢的想法...... 我在 Airflow 中创建了(许多)DAG...并且它有效...但是,我想以某种方式将其打包,以便我可以在不安装 Airflow 的情况下运行单个 DAG 运行;
我使用“pip install 'apache-airflow[statsd]' 安装了 airflow[statsd] 并安装了 statsd_exporter。现在我可以看到来自 Promethe
我们正在尝试将 MongoHook 和 GCSToLocalFilesystemOperator 导入到我们的 Airflow 项目中: docs for MongoHook docs for GCS
启动 Airflow 网络服务器时出现以下错误 balajee@Balajees-MacBook-Air.local:~$ Airflow 网络服务器 -p 8080 [2018-12-03 00:2
运行pip install airflow[postgres]命令后出现以下错误: > raise RuntimeError("By default one of Airflow's dependen
我是一名优秀的程序员,十分优秀!