如何在Windows上运行Airflow

51

在 Windows 环境下,运行 Airflow 的常规说明不适用:

# airflow needs a home, ~/airflow is the default,
# but you can lay foundation somewhere else if you prefer
# (optional)
export AIRFLOW_HOME=~/airflow

# install from pypi using pip
pip install airflow

# initialize the database
airflow initdb

# start the web server, default port is 8080
airflow webserver -p 8080

Airflow 工具在命令行中不可用,我找不到其他地方可以手动添加它。 Airflow 如何在 Windows 上运行?

6个回答

49

三种基本选择

我尝试了几个版本的解决方案,并在过程中记录了下来。我尝试的三件事情是:

  1. 直接在Windows 10中安装Airflow - 这次尝试失败了。
  2. 在安装了Ubuntu的Windows 10 WSL中安装Airflow - 这个方法很好用。请注意,WSL是Windows Subsystem for Linux,您可以在Windows商店免费获取它。
  3. 通过Docker + Centos在Windows 10上安装Airflow - 这个方法也非常好用。

请注意,如果您想将其作为Linux服务运行,则选项2不可能实现。选项3是可能的,但由于需要在docker中激活特权容器(当我开始时我不知道),所以我没有这样做。此外,在Docker中运行服务有点违背范例,因为每个容器都应该是单个进程/责任单位。

选项2-WSL的详细描述

如果你选择第二个选项,则基本步骤如下:

  • 获取安装了WSL Ubuntu并打开的环境。
  • 确认系统自带 Python 3.6.5 或类似版本 (python3 -version).
  • 如果有的话,添加以下软件包以便于安装 PIP:
    • sudo apt-get install software-properties-common
    • sudo apt-add-repository universe
    • sudo apt-get update
  • 使用以下命令安装 pip:
    • sudo apt-get install python-pip (对于 Python 3,请使用 python3-pip)
  • 运行以下 2 条命令来安装 airflow:
    • export SLUGIFY_USES_TEXT_UNIDECODE=yes
    • pip install apache-airflow (对于 Python 3,请使用 pip3)
  • 打开一个新的终端 (我很惊讶,但好像这是必需的)。
  • 初始化 airflow 数据库:
    • airflow initdb

完成以上步骤后,您就可以开始了!此博客还提供了更多详细信息,包括设置 WSL 所需的时间等 - 如果您遇到困难,请深入了解。


1
嗨John,你可以通过下载预先准备好的依赖项轮子(https://www.lfd.uci.edu/~gohlke/pythonlibs/)来解决在Windows下直接安装时遇到的C++编译问题,然后执行pip install <wheel file>。 - Robert
@Robert 谢谢你提供的好信息!我本来就有点怀疑它最终会起作用,只是最后失去了继续推进的意愿(考虑到我将在生产环境中运行Linux)。我很高兴你为人们找到了一个真正的解决方案;我会尝试记得将我的博客链接到这个评论中,以便人们能够找到它 :)。 - John Humphreys
1
你好John,不幸的是,尽管可以解决编译问题,但在Windows(本机、cygwin和WSL1)下缺少一个Python包,这最终导致我的努力失败(请参见我对@Ayush K Singh答案的评论)。我现在期待Windows 10的WSL2,理论上应该能够编译pwd包,因为它基于真正的Linux内核。 - Robert
对于选项2,必须使用https://dev59.com/x7Tna4cB1Zd3GeqPCvJl#56923277作为最后一步。 - arun
1
@JohnHumphreys-w00te 感谢您的回答,我也阅读了您关于安装airflow的博客文章。我有一件事要补充。如果在Ubuntu中安装了python3,则建议使用sudo apt-get install python3-pip安装pip,否则默认情况下它将安装在python 2.7中。 - mockash
从2.2.2版本开始,需要使用“airflow db init”而不是“airflow initdb”。 - surya ambati

23

我在Windows 10上使用Docker运行Airflow。

1)首先需要在Windows上安装Docker。

2)从命令提示符中运行命令docker version,如果得到输出,则说明Docker已成功安装。

3)然后需要使用命令docker pull puckel/docker-airflow拉取Airflow镜像。

4)下一步是运行镜像docker run -d -p 8080:8080 puckel/docker-airflow webserver

5)这将运行Airflow,您可以在localhost:8080上访问WebUI。

6)要复制dags,请使用此命令docker cp sample_dag.py containerName:/usr/local/airflow/dags

要访问Airflow实用程序,您需要访问容器的bash shell。您可以使用docker exec -it containerName bash来执行此操作。 进入bash shell后,您可以运行命令行工具,例如**airflow list_dags**

希望对您有所帮助。


1
这是目前为止最好的更新答案。您还可以创建一个 Dockerfile,将工作区文件夹复制到镜像中。 - Bruno
@Bruno,你能详细说明一下你的评论吗?我已经苦苦挣扎了好几天,试图让airflow运行起来,而这个答案最终解决了我的问题。现在我想知道如何将其操作化,并在每次加载所有dag时保持容器始终运行。有什么建议吗? - vsx99
我尝试了 docker cp sample_dag.py containerName:/usr/local/airflow/dags 并将 containxName 更改为我的容器名称,但为什么无法将本地 DAG 复制到容器的 dags/ 文件夹中?(我正在使用 Windows) - Cherry Wu

16

与其通过pip安装Airflow,不如在Airflow项目的GitHub页面上下载zip文件,解压缩后,在文件夹中运行命令行python setup.py install来安装。出现ERROR - 'module' object has no attribute 'SIGALRM'错误是正常的,但至今对Airflow功能没有影响。

使用这种方法,airflow util将无法作为一个命令使用。作为解决方法,可以使用[当前文件夹]\build\scripts-2.7\airflow 文件,它是用于airflow util的Python脚本。

另一种解决方法是将指向运行airflow的批处理文件(airflow.bat)的链接追加到系统PATH变量中:

python C:\path\to\airflow %*

从这一点开始,教程可以正常跟进:

airflow init
airflow webserver -p 8080

我没有测试过Airflow的DAG在Windows上运行的情况,也不知道它是否能够良好运行。


16
由于缺少仅适用于UNIX系统的模块"pwd",此方法不再可用。该模块在airflow\bin\cli.py的第16行间接引用,在daemon\daemon.py的第25行直接引用。 - Marcus Ottosson

6

您可以使用Cygwin来完成此操作。Cygwin是在Windows上运行并模拟Linux的命令行shell。因此,您将能够运行命令。

# airflow needs a home, ~/airflow is the default,
# but you can lay foundation somewhere else if you prefer
# (optional)
export AIRFLOW_HOME=~/airflow

# install from pypi using pip
pip install apache-airflow

# initialize the database
airflow initdb

# start the web server, default port is 8080
airflow webserver -p 8080

注意1:如果你在公司提供的电脑上运行Cygwin,你可能需要以管理员身份运行Cygwin应用程序。你可以使用Microsoft的以下教程来实现。

注意2:如果你和我一样在代理后面(在工作中或其他代理),你需要为pip在命令行上设置两个环境变量;在这种情况下是Cygwin。你可以按照此StackOverflow答案获取更多详细信息。所以我在我的Windows机器上设置了以下两个环境变量:

// Note this first entry has an S in HTTPS and the other entry is just regular HTTP. Don't forget that distinction in the key name and in the url of the value.
HTTPS_PROXY=https://myUsernameGoesHere:myPasswordGoesHere@yourProxyHostNameGoesHere:yourProxyPortNumberGoesHere

HTTP_PROXY=http://myUsernameGoesHere:myPasswordGoesHere@yourProxyHostNameGoesHere:yourProxyPortNumberGoesHere
不再适用:显然,所有上述工作都是徒劳的,因为Airflow在Windows上无法工作。请参阅此StackOverflow帖子。但是,上述步骤将允许您使用Pip。 或者,我知道这可能被视为在Windows上运行,但您可以安装虚拟机客户端,例如Oracle的VirtualboxVMware的Workstation,然后设置您想要的任何Linux版本,例如Ubuntu桌面版,然后您可以正常运行Linux。如果您需要更详细的步骤,请按照Stack Exchange社区答案这里的AskUbuntu进行操作。 或者(2),您可以创建AWS帐户,然后设置运行Linux的简单ec2实例,然后ssh到该ec2实例,然后运行您想要的所有命令。AWS提供免费层,因此您应该可以免费使用它。此外,AWS有非常完善的文档,因此启动简单的Linux服务器不应该太难;我估计初学者大约需要一个小时就能完成。

我想知道最近更新的Windows 10 Ubuntu Linux子系统会对所有这些内容产生何种变化。 - Kyle Bridenstine

6

5
你可以在Windows中激活bash,并按照教程进行操作。我成功地按照上述步骤启动了应用程序。
安装完成后,请编辑airflow.cfg,将所有配置指向Windows系统中的某个位置,而不是lxss(ubuntu),因为Ubuntu存在无法显示由Windows系统编写的文件的错误。

5
嗨 Ayush,这在当前版本的 Airflow 中已经不起作用了。它总是以“ModuleNotFoundError: No module named 'pwd'”失败,原因是该模块由于技术原因在 Windows 上无法使用。 - Robert
在Git Bash中运行命令时,出现了ModuleNotFoundError: No module named 'termios'的错误。 - FireFuro99

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接