2016-10-19 2 views
0

Airflow v1.7.1.3이 airflow.cfg에 액세스하여 코드에 포함되지 않고 일부 구성 값을 배치 할 수 있다는 장점을 이용하고 있습니다. 나는 다음과 같은 않는 DAG를 나타내는 foobarDAG.py 클래스에서DAG airflow.cfg에서 값을 찾지 못했습니다.

[foo] 
bar = foo 
     bar 

:

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) 

시험이 수동으로 파이썬 프롬프트에서 쉽게 우리하여 먼저 airflow.cfg 파일의 선으로 다음을 추가 :

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

위의 정보는 위의 airflow.cfg에 대한 정보입니다.

airflow test foobarDAG fooBar 10-19-2016 

문제를보고하지 않습니다

우리는 또한 직접 DAG에서 테스트를 수행했습니다.

: 웹 UI에서

airflow scheduler -d foobarDAG >& foobar_log.txt 

, 우리는은 "DAG를"섹션의 상단에있는 다음을 참조하십시오 : 우리는 하나 DAG을 예약 스케줄러를 사용하려고하면

문제는 돌발 그것은 appea 그래서 이상한

[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' 

:

그리고 foobar_log.txt에서

Broken DAG: [/path/to/…/foobarDAG.py] 'foo' 
, 여기에 오류 메시지입니다 rs는 ['foo'] 섹션을 airflow.cfg에서 검색하지 않고 DAG에 제공합니다. 왜 그런가?

답변

0

모든 것이 제대로 작동하고 있지만 스케줄러가 다시 시작되지 않은 것으로 나타났습니다. 스케줄러는 분명히 추가 된 섹션이없는 이전 airflow.cfg을 여전히 사용하고있었습니다.

관련 문제