DAG从气流调度程序开始,未在airflow.cfg

时间:2016-10-19 22:09:17

标签: airflow

我利用Airflow v1.7.1.3提供对airflow.cfg的访问权限,以便在那里放置一些配置值而不是嵌入代码中。我们将以下内容添加为airflow.cfg文件的第一行:

[foo]
bar = foo
      bar

在代表DAG的foobarDAG.py类中,我执行以下操作:

from airflow.configuration import conf
…
def fooBar():
    pass

foobarList = conf['foo']['bar'].split('\n')

foobarOperator = PythonOperator(
    task_id='fooBar',
    provide_context=True,
    python_callable=fooBar,
    op_args=[foobarList],
    dag=dag)

从Python提示手动测试这个很容易:

>>> from foobarDAG import foobarList
…
>>> foobarList
['foo', 'bar']

这正是我对上述airflow.cfg中信息的期望。

我们还直接对DAG进行了测试:

airflow test foobarDAG fooBar 10-19-2016

这并没有报告任何问题。

当我们尝试使用调度程序来安排一个DAG时,问题就出现了:

airflow scheduler -d foobarDAG >& foobar_log.txt

在网络用户界面中,我们在" DAGS"的顶部看到以下内容:部分:

Broken DAG: [/path/to/…/foobarDAG.py] 'foo'

foobar_log.txt中,这是错误消息:

[2016-10-19 14:56:09,028] {models.py:250} ERROR - Failed to import: /path/to/foobarDAG.py
Traceback (most recent call last):
  File "/path/to/airflow/models.py", line 247, in process_file
    m = imp.load_source(mod_name, filepath)
  File "/path/to/anaconda3/envs/foobarenv/lib/python3.5/imp.py", line 172, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 693, in _load
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 662, in exec_module
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "/path/to/foobarDAG.py", line 67, in <module>
    foobarList = conf['foo']['bar'].split('\n')
  File "/path/to/anaconda3/envs/foobarenv/lib/python3.5/configparser.py", line 956, in __getitem__
    raise KeyError(key)
KeyError: 'foo'

奇怪的是,调度程序似乎没有从['foo']检索airflow.cfg部分并将其提供给DAG。知道为什么吗?

1 个答案:

答案 0 :(得分:0)

事实证明一切正常,但调度程序尚未重启。调度程序显然仍在使用没有添加部分的旧airflow.cfg