Skip to main content
 首页 » 编程设计

python之如何在 Apache Airflow 中配置 DaskExecuter

2024年12月31日31jackei

我想配置 Dask 以在 Airflow 中分发 DAG。 我读过https://airflow.apache.org/howto/executor/use-dask.html和 https://distributed.readthedocs.io/en/latest/ ,但我不明白它是如何工作的。 我有两台 Apache Aiflow 服务器,在哪里运行 dask-shedulers 和 dask-workers,当第一台服务器掉线时,第二台服务器自动运行? 据我了解,Airflow 将任务放在 dask-sheduler 中。我不明白如何在两台服务器上交 friend 。我不明白为什么需要 dask-workers 以及它的作用,我认为这是某种不必要的组件。

我不想使用 CeleryExecutor 并为 Celery 配置 RabbitMQ 或 Redis

请您参考如下方法:

您可以在此处找到两个更好的描述来启动和运行 Airflow + Dask:https://www.alibabacloud.com/blog/schedule-data-lake-analytics-tasks-by-using-airflow_594183或 https://tech.marksblogg.com/install-and-configure-apache-airflow.html .特别是第一个链接对我帮助很大。而且,运行 Airflow scheduler + webserver + dask-scheduler 就可以了。 但是,一旦我启动 Airflow worker + dask-worker,Airflow worker 就会退出并提示没有激活 Celery:

ModuleNotFoundError: No module named 'celery' 

当我在没有 Airflow worker 的情况下运行 dask-worker 时,一切似乎都正常,直到我触发 DAG:

worker_1     | [2019-05-12 20:47:05,527] {__init__.py:51} INFO - Using executor DaskExecutor 
worker_1     | usage: airflow [-h] 
worker_1     |                {backfill,list_dag_runs,list_tasks,clear,pause,unpause,trigger_dag,delete_dag,pool,variables,kerberos,render,run,initdb,list_dags,dag_state,task_failed_deps,task_state,serve_logs,test,webserver,resetdb,upgradedb,scheduler,worker,flower,version,connections,create_user,delete_user,list_users,sync_perm,next_execution,rotate_fernet_key} 
worker_1     |                ... 
worker_1     | airflow: error: the following arguments are required: subcommand 
worker_1     | distributed.worker - WARNING -  Compute Failed 
worker_1     | Function:  airflow_run 
worker_1     | args:      () 
worker_1     | kwargs:    {} 
worker_1     | Exception: CalledProcessError(2, ['airflow', 'run', 'example_python_operator', 'print_the_context', '2019-05-12T20:47:02.111022+00:00', '--pickle', '13', '--local', '-sd', '/opt/airflow/dags/python_exec.py']) 
worker_1     | 
webserver_1  | [2019-05-12 20:47:06 +0000] [37] [INFO] Handling signal: ttin 
webserver_1  | [2019-05-12 20:47:06 +0000] [744] [INFO] Booting worker with pid: 744 
webserver_1  | [2019-05-12 20:47:06,299] {dask_executor.py:77} ERROR - Failed to execute task: CalledProcessError(2, ['airflow', 'run', 'example_python_operator', 'print_the_context', '2019-05-12T20:47:02.111022+00:00', '--pickle', '13', '--local', '-sd', '/opt/airflow/dags/python_exec.py']) 

有什么提示可以解决这个问题吗?