0

웹 서버가 하나의 컴퓨터에서 실행되고 스케줄러가 다른 컴퓨터에서 실행되도록 기류를 설정 중입니다. 두 제품 모두 동일한 MySQL 메타 스토어 데이터베이스를 공유합니다. 두 인스턴스 모두 로그에 오류없이 나타나지만 스케줄러는 웹 UI를 통해 DAG를 수동으로 트리거하여 만든 DAG 실행을 선택하지 않습니다. MYSQL의 dag_run 테이블이 몇 가지 항목을 보여줍니다 기류 스케줄러가 DAG 실행을 선택하지 않음

, 실행 상태에있는 모든 :

mysql> select * from dag_run; 
+----+--------------------------------+----------------------------+---------+------------------------------------+------------------+----------------+----------+----------------------------+ 
| id | dag_id       | execution_date    | state | run_id        | external_trigger | conf | end_date | start_date     | 
+----+--------------------------------+----------------------------+---------+------------------------------------+------------------+----------------+----------+----------------------------+ 
| 1 | example_bash_operator   | 2017-12-14 11:33:08.479040 | running | manual__2017-12-14T11:33:08.479040 |    1 | ��  }�. | NULL  | 2017-12-14 11:33:09.000000 | 
| 2 | example_bash_operator   | 2017-12-14 11:38:27.888317 | running | manual__2017-12-14T11:38:27.888317 |    1 | ��  }�. | NULL  | 2017-12-14 11:38:27.000000 | 
| 3 | example_branch_dop_operator_v3 | 2017-12-14 13:47:05.170752 | running | manual__2017-12-14T13:47:05.170752 |    1 | ��  }�. | NULL  | 2017-12-14 13:47:05.000000 | 
| 4 | example_branch_dop_operator_v3 | 2017-12-15 04:26:07.208501 | running | manual__2017-12-15T04:26:07.208501 |    1 | ��  }�. | NULL  | 2017-12-15 04:26:07.000000 | 
| 5 | example_branch_dop_operator_v3 | 2017-12-15 06:12:10.965543 | running | manual__2017-12-15T06:12:10.965543 |    1 | ��  }�. | NULL  | 2017-12-15 06:12:11.000000 | 
| 6 | example_branch_dop_operator_v3 | 2017-12-15 06:28:43.282447 | running | manual__2017-12-15T06:28:43.282447 |    1 | ��  }�. | NULL  | 2017-12-15 06:28:43.000000 | 
+----+--------------------------------+----------------------------+---------+------------------------------------+------------------+----------------+----------+----------------------------+ 
6 rows in set (0.21 sec) 

그러나 다른 컴퓨터에 시동와 같은 MySQL의 DB에 연결 스케줄러는이 DB 이야기에 관심이 없다 실제로 이러한 DAG 실행을 실행하고 작업 인스턴스로 변환합니다.

여기에서 설정에 무엇이 있는지 잘 모릅니다. 따라서 몇 가지 질문이 있습니다.

  1. $ AIRFLOW_HOME/dags에있는 DAGS 폴더에 채워지는 시간 및 방법은 무엇입니까? 웹 서버가 시작될 때 생각합니다. 그런데 다른 컴퓨터에서 스케줄러를 시작하면 그 컴퓨터의 DAGS 폴더는 어떻게 채워 집니까?
  2. 현재 웹 서버를 호스팅하는 컴퓨터에서만 공기 흐름 initdb를하고 있으며 스케줄러에서는 수행하지 않습니다. 희망이 맞습니다.

스케줄러에 대한 디버그 로그를 사용하여 누락 된 항목을 표시 할 수있는 로그를 더 많이 표시 할 수 있습니까? 현재 로그에서 보면 로컬 시스템의 DAGS 폴더를보고 DAGS가 없으며 (예제는 아님) config로 하여금 True로 설정된 예제를로드하도록 유도합니다.

는 중요한 생각하지 마하지만 현재 LocalExecutor

어떤 도움이 감사를 사용하고 있습니다.

편집 : 기류 문서와 같이 컴퓨터에서 DAGS 폴더를 동기화해야한다는 것을 알고 있지만 이것이 스케줄러가 위의 경우에 작업을 선택하지 않는 이유인지는 확실하지 않습니다.

+0

나는 airflow.conf 파일에 지정된대로는 $ AIRFLOW_HOME/DAG를 디렉토리로 DAG를 (평 스크립트)를 배포 할 것으로 예상 생각 -

우리는 이것에 대한 문제를 제기했다. 스케줄러 (Scheduler)는 dags 디렉토리를보고이를 집어 들고 dag bag에 추가하는 서비스입니다. 디버그를 켜려면 settings.py 파일을 편집하여 LOGGING_LEVEL을 1logging.DEBUG1로 설정하고 서비스를 다시 시작하십시오. https://github.com/apache/incubator-airflow/blob/master/airflow/settings.py#L88이 예제의 DAG를 무시하고 튜토리얼을 기반으로 만드는 것이 가장 좋습니다. – Davos

+0

요점은 if airflow.cfg가 예제를로드한다고하면 Dags 폴더에 자체 생성 된 DAG가없는 경우 스케줄러도 작동해야합니다. – Agraj

답변

0

좋아요, 답변을 얻었습니다. 스케줄러가 로컬 DAG 폴더에 DAGS가있을 때까지 DB를 쿼리하지 않는 것처럼 보입니다. 내가 스케줄러를 호스팅하는 컴퓨터에 내 로컬 DAG 폴더에 간단한 DAG를 추가하고 그것뿐만 아니라 다른 DAG 인스턴스를 따기 시작

ti_query = (
     session 
     .query(TI) 
     .filter(TI.dag_id.in_(simple_dag_bag.dag_ids)) 
     .outerjoin(DR, 
      and_(DR.dag_id == TI.dag_id, 
       DR.execution_date == TI.execution_date)) 
     .filter(or_(DR.run_id == None, 
       not_(DR.run_id.like(BackfillJob.ID_PREFIX + '%')))) 
     .outerjoin(DM, DM.dag_id==TI.dag_id) 
     .filter(or_(DM.dag_id == None, 
       not_(DM.is_paused))) 
    ) 

처럼 job.py의 코드는 보인다. https://issues.apache.org/jira/browse/AIRFLOW-1934

+0

DB 항목을 기반으로하는 dag를 실행할 수 없다고 생각합니다. dag는 python 스크립트이므로 dags 디렉토리에 스크립트가 없으면 실행할 수있는 항목이 없습니다. dags에 대한 DB 항목이 있지만 DAG가없는 상황에서는 UI에 오류 아이콘이 표시됩니다. . – Davos

+0

삭제 해 주셔서 감사합니다.피클 주위에있는 의사 한테 좀 가르쳐 주시겠습니까? dag 코드가 아니라면 정확히 직렬화가 진행되고있는 것입니다. – Agraj

+0

잘못된 것입니다. 노동자가 절인 dags에서 실행될 수 있으며, 피클을 사용할지 여부를 알려주는 설정이있는 것 같습니다. dag의 사본을 사용하십시오. 이것은 대부분 스케줄러 서비스에 의해 내부적으로 사용되는 것으로 믿어지는 cli에서 제어됩니다. https://github.com/apache/incubator-airflow/blob/master/airflow/bin/cli.py와' donot_pickle' conf 설정. 또한 Mesos 클러스터에 사용됩니다 : https://github.com/apache/incubator-airflow/blob/master/docs/configuration.rst dags의 산세 처리를 허용하기 위해'-p' 스위치로 스케줄러를 실행합니다. – Davos