我对使用apache气流很陌生。我使用pycharm作为我的IDE。我创建一个项目(anaconda环境),创建一个包含DAG定义和Bash运算符的python脚本。当我打开气流网络服务器时,未显示我的DAGS。仅显示默认示例DAG。我的AIRFLOW_HOME
变量包含~/airflow
。所以我在这里存储了我的python脚本,现在显示了。
如何在项目环境中使用它?
是否在每个项目开始时更改环境变量?
是否可以为每个项目添加特定的气流主目录?
我不想将DAG存储在默认气流目录中,因为我想将其添加到git存储库中。请帮我。
答案 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及其解决的问题。 pipenv
中default 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
airflow
,因此需要激活它才能使用airflow
pipenv
以来,您将需要使用pipenv shell
来激活venv pipenv shell
,因此始终会将.env
中定义的变量导出到venv中。在pipenv
之上仍然是一个子shell,因此,当您退出它时,所有其他环境变量也将被清除。pipenv --py
提供的路径。 pipenv
与conda一样,在同一全局位置创建所有venv,但是您可以通过将.venv
添加到{ {1}}(或其他export PIPENV_VENV_IN_PROJECT=1
)。然后,当您进入项目解释器的设置时,PyCharm将能够自动将其拾取。.bashrc
PyPi的气流1.10.3取决于rc
和Flask==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
的最新版本已修复。