작성
·
167
0
안녕하세요, 강의 잘 듣고 있습니다.
제목 그대로 task를 실행하는 주체가 헷갈려 질문 드립니다.
airflow document를 읽어본 결과 scheduler는 DAG의 시작 시간을 확인한 후에 Executor에게 시작을 지시하는 것으로 보였습니다.
Executor의 종류 중 locally하게 실행하는 task의 경우 executor가 직접 실행하고, remotely하게 실행하는 task의 경우 (특히 분산 환경에서 사용되는 Executor; ex. CeleryExecutor)에는 worker 풀을 활용한다고 이해했습니다.
Airflow의 경우 default executor가 SequentialExecutor로 설정된다고 하는데, 이는 local executor이므로 worker가 존재하지 않는다고 이해했습니다.
그래서 local executor에도 따로 worker가 존재하는지 궁금하여 질문 남깁니다!
감사합니다.
답변 1
0
안녕하세요. 김민서님
우선 용어부터 정리해봐야 할 것 같습니다.
Worker 란 Job이 실행되는 노드입니다. (or 컨테이너)
따라서 local Executor 는 단일 노드에서 실행되는 것이므로 Worker노드와 Scheduler 노드가 동일한 것입니다. 우리가 실습한 Celery Executor 또한 단일 노드에서 실행되기는 했지만 컨테이너로써 Scheduler와 Worker가 명확히 분리되어 있습니다. 그리고 이 컨테이너들을 확장하거나 다른 노드에 띄우는 것이 가능하구요.
(Celery Executor의 핵심은 한 개 또는 다수의 스케줄러와 다수의 Worker가 큐를 바라보고 동작한다는 것이 핵심입니다. 꼭 컨테이너가 아니더라도 물리적인 서버로도 구성 가능합니다)
반면에 local Executor는 Worker 노드가 존재하지만 Scheduler 노드와 동일한 노드에 국한되고 여러 노드 또는 컨테이너로 확장이 불가능하다로 이해하시면 될 것 같습니다.
그리고 Task가 실행될 때마다 프로세스가 떠서 task가 처리되는 구조입니다. (프로세스 개수를 Fix해서 미리 띄어놓을수도 있음)
결론적으로 Local Executor 에도 Worker는 존재한다 이고 단일 노드에 Scheduler, Worker가 같이 있는 구조라고 이해하시면 되겠습니다.
참고로 아키텍처에 관련해서는 후반부에서 설명합니다 ^^