簡體   English   中英

將現有的 celery 工作人員用於 Airflow 的 Celeryexecutor 工作人員

[英]Use existing celery workers for Airflow's Celeryexecutor workers

I am trying to introduce dynamic workflows into my landscape that involves multiple steps of different model inference where the output from one model gets fed into another model.Currently we have few Celery workers spread across hosts to manage the inference chain. 隨着復雜性的增加,我們正在嘗試動態構建工作流。 為此,我使用 Celeryexecutor 進行了動態 DAG 設置。 現在,有沒有辦法可以保留當前的 Celery 設置並將 airflow 驅動的任務路由給相同的工作人員? 我確實了解這些工作人員中的設置應該可以訪問與 airflow 服務器相同的 DAG 文件夾和環境。 我想知道如何在這些服務器中啟動 celery 工作程序,以便 airflow 可以路由以前通過 python 應用程序的手動工作流完成的相同任務。 如果我使用命令“airflow celery worker”啟動工作程序,我將無法訪問我的應用程序任務。 如果我以目前的方式啟動 celery,即“celery -A proj”,則 airflow 與它無關。 尋找使其工作的想法。

謝謝@DejanLekic。 我讓它工作了(盡管 DAG 任務調度延遲太大,我放棄了這種方法)。 如果有人想看看這是如何完成的,我做了幾件事來讓它工作。

  1. 更改 airflow.cfg 以更改執行器、隊列和結果后端設置(明顯)
  2. If we have to use Celery worker spawned outside the airflow umbrella, change the celery_app_name setting to celery.execute instead of airflow.executors.celery_execute and change the Executor to "LocalExecutor". 我沒有對此進行測試,但甚至可以通過在項目的 celery 應用程序中注冊氣流的任務來避免切換到 celery 執行器。
  3. 每個任務現在將調用 send_task(),返回的 AsynResult object 然后存儲在 Xcom(隱式或顯式)或 Redis(隱式推送到隊列)中,然后子任務將收集 Asyncresult(這將是一個隱式調用從 Xcom 或 Redis 中獲取值)然后調用 .get() 以獲取上一步的結果。

注意:沒有必要在 DAG 的兩個任務之間拆分 send_task() 和 .get()。 通過將它們分配給父母和孩子,我試圖利用任務之間的滯后。 但在我的例子中,celery 的任務執行完成的速度比氣流在調度相關任務時的固有延遲要快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM