如何在虚拟环境中使用Apache气流?

时间:2019-07-04 15:26:46

标签: python apache virtualenv airflow directed-acyclic-graphs

我对使用apache气流很陌生。我使用pycharm作为我的IDE。我创建一个项目(anaconda环境),创建一个包含DAG定义和Bash运算符的python脚本。当我打开气流网络服务器时,未显示我的DAGS。仅显示默认示例DAG。我的AIRFLOW_HOME变量包含~/airflow。所以我在这里存储了我的python脚本,现在显示了。

如何在项目环境中使用它?

是否在每个项目开始时更改环境变量?

是否可以为每个项目添加特定的气流主目录?

我不想将DAG存储在默认气流目录中,因为我想将其添加到git存储库中。请帮我。

2 个答案:

答案 0 :(得分:0)

编辑airflow.cfg文件并设置:

load_examples = False
dags_folder = /path/to/your/dag/files

如果您的气流目录未设置为默认目录,则应设置此env变量。如果每次都要更改它很烦人,只需在pycharm项目配置或本地操作系统(〜/ .bashrc)中进行设置即可。

我的建议是编写一个小脚本以本地模式执行气流。 您应该分别执行气流webserver&scheduler&workers。

对我来说,在小型开发计算机上运行气流服务要方便得多,请考虑这样做。

答案 1 :(得分:0)

您可以使用以下格式使用环境变量设置/替代${AIRFLOW_HOME}/airflow.cfg中指定的气流选项:$ AIRFLOW __ {SECTION} __ {KEY}(请注意双下划线)。这是link气流文档。因此,您只需完成

export AIRFLOW__CORE__DAGS_FOLDER=/path/to/dags/folder

但是,对不同的项目执行此操作既繁琐又容易出错。或者,您可以考虑使用pipenv代替anaconda来管理虚拟环境。这是关于nice guide的pipenv及其解决的问题。 pipenvdefault features之一是,当您在激活virtualenv的情况下生成shell时,它将自动加载.env文件中定义的变量。因此,pipenv的工作流程如下所示:

cd /path/to/my_project

# Creates venv with python 3.7 
pipenv install --python=3.7 Flask==1.0.3 apache-airflow==1.10.3

# Set home for airflow in a root of your project (specified in .env file)
echo "AIRFLOW_HOME=${PWD}/airflow" >> .env

# Enters created venv and loads content of .env file 
pipenv shell

# Initialise airflow
airflow initdb
mkdir -p ${AIRFLOW_HOME}/dags/
  

注意:Flask==1.03的用法我将在最后解释,但这是因为pipenv检查子依赖性是否兼容,以确保可重复性。

因此,在完成这些步骤之后,您将获得以下项目结构

my_project
├── airflow
│   ├── airflow.cfg
│   ├── airflow.db
│   ├── dags
│   ├── logs
│   │   └── scheduler
│   │       ├── 2019-07-07
│   │       └── latest -> /path/to/my_project/airflow/logs/scheduler/2019-07-07
│   └── unittests.cfg
├── .env
├── Pipfile
└── Pipfile.lock

现在,当您首次初始化气流时,它将创建${AIRFLOW_HOME}/airflow.cfg文件,并将使用/扩展${AIRFLOW_HOME}/dags作为dags_folder的值。如果您仍然需要dags_folder使用其他位置,则可以再次使用.env文件

echo "AIRFLOW__CORE__DAGS_FOLDER=/different/path/to/dags/folder" >> .env

因此,您的.env文件将如下所示:

AIRFLOW_HOME=/path/to/my_project/airflow
AIRFLOW__CORE__DAGS_FOLDER=/different/path/to/dags/folder

我们取得了什么成就以及为什么它可以正常工作

  1. 由于您在虚拟环境中安装了airflow,因此需要激活它才能使用airflow
  2. 自从您使用pipenv以来,您将需要使用pipenv shell来激活venv
  3. 由于您使用pipenv shell,因此始终会将.env中定义的变量导出到venv中。在pipenv之上仍然是一个子shell,因此,当您退出它时,所有其他环境变量也将被清除。
  4. 使用气流的不同项目的日志文件等将具有不同的位置。

关于pipenv的其他说明

  1. 为了使用通过pipenv创建的venv作为IDE的项目解释器,请使用pipenv --py提供的路径。
  2. 默认情况下,pipenv与conda一样,在同一全局位置创建所有venv,但是您可以通过将.venv添加到{ {1}}(或其他export PIPENV_VENV_IN_PROJECT=1)。然后,当您进入项目解释器的设置时,PyCharm将能够自动将其拾取。

使用.bashrc

的注意事项

PyPi的气流1.10.3取决于rcFlask==1.0.3。今天,当我测试代码片段时,最新可用的flask>=1.0, <2.0 1.1.0 ,具体取决于jinja2>=2.7.3, <=2.10.0。这意味着,尽管pipenv可以安装所有必需的软件,但是它无法锁定依赖项。因此,为了干净地使用代码示例,我必须指定flask的版本,该版本要求jinja2>=2.10.1的版本与气流要求兼容。但是没有什么可担心的。 GitHub上flask的最新版本已修复。