如何在Apache Airflow中配置DaskExecuter

时间:2018-10-10 16:05:55

标签: python airflow dask

我想配置Dask以在Airflow中分发DAG。 我已经读过https://airflow.apache.org/howto/executor/use-dask.htmlhttps://distributed.readthedocs.io/en/latest/,但是我不明白它是如何工作的。 我有两台Apache Aiflow服务器,分别在哪里运行das-shedulers和dask-worker,在第一台服务器崩溃时,第二台服务器会自动工作? 据我了解,Airflow将任务放在了轻巧的剥离器中。我不理解如何在两台服务器上结识轻巧的朋友。我不明白为什么需要精打细算的人以及它的作用,我认为这是某种不必要的组成部分。

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

3 个答案:

答案 0 :(得分:0)

您在一台服务器上而不是在两台服务器上运行调度程序。我在一台机器上只有气流调度程序和dask调度程序。在dask调度程序的气流配置中,我有localhost:8786。然后在其他机器上启动dask worker,并为其提供IP地址和调度程序的端口。通过气流提交任务,如果您做对的话,工作人员会捡起来。

答案 1 :(得分:0)

您可以找到两个更好的描述来启动并运行Airflow + Dask:https://www.alibabacloud.com/blog/schedule-data-lake-analytics-tasks-by-using-airflow_594183https://tech.marksblogg.com/install-and-configure-apache-airflow.html。特别是,第一个链接对我有很大帮助。而且,运行Airflow Scheduler + Web服务器+ Dask-Scheduler很好。 但是,当我启动Airflow worker + dask-worker时,Airflow worker退出并抱怨没有激活Celery:

import csv
import random

def dictTest():
    with open ("/Users/richard/Desktop/python testing/test.csv", 'r') as csvfile:
        output = csv.reader(csvfile)
        dictionary = {}
        for row in output:
            rNum = random.randrange(1,11)
            row[0] += " "+ str(rNum)
            list_ints =[]
            for element in row[1:]:
                list_ints.append(int(element))
            dictionary[row[0]] = list_ints


        print(dictionary)

dictTest()

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

ModuleNotFoundError: No module named 'celery'

有任何修复建议吗?

答案 2 :(得分:0)

经过大量研究,我发现了这一点。事实证明,Dask执行器(https://issues.apache.org/jira/browse/AIRFLOW-4494)是一个问题。我将修复程序应用于用于运行气流的docker映像并对其进行了修复!该修复程序计划在下一个版本中发布。

RUN cd /usr/local/lib/python3.6/site-packages/airflow/executors && \
    sed -i "s@return subprocess.check_call(command, shell=True, close_fds=True)@return subprocess.check_call(command, close_fds=True)@g" dask_executor.py