묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Airflow 마스터 클래스
airflow 웹서버 페이지 auto-refresh에 대해서 질문드립니다!
제가 지금 백엔드 프로젝트와 Airflow를 도커 컴포즈로 EC2에 올려서 테스트를 하고 있습니다. 혹시 airflow 웹페이지에서 DAG 목록 위에 Auto-refresh 버튼이 있는데 이 옵션을 끄면 dag이 정해진 스케줄에 작동하지 않는지 궁금합니다.제가 검색해본 결과로는 dag 내용과 목록을 자동으로 최신화하는 옵션인 것 같은데 맞을까요..?? dag 실행에 문제만 없다면 리소스 절약을 위해서 이 옵션은 꺼놓는게 좋을 것 같아서요...
-
미해결Airflow 마스터 클래스
다중 스케줄러 실행 시 확인 방법 문의
강사님, 안녕하세요.다중 스케줄러 실행 시 정상적으로 동작하고 있는지 확인할 수 있는 방법에 대해 문의드립니다.현재 Worker와 Scheduler를 다중으로 실행하여 고가용성 테스트를 진행 중입니다. Worker의 경우 Celery Flower를 통해 정상적으로 Sync가 이뤄지는 것을 확인하였습니다. 다만 Scheduler의 경우 뭔가 정확하게 확인이 안되는 것 같습니다.우선 제가 찾은 방법으로는 메타 테이블 조회와 커맨드가 있습니다.메타 테이블 조회 아래와 같이 조회하면 running인 상태의 host가 Scheduler 수만큼 조회됩니다. hostname도 모두 일치합니다.select * from job where job_type = 'SchedulerJob' and state = 'running';커맨드 아래와 같이 커맨드 실행 시 'Found one alive job.'이 출력됩니다.$ airflow jobs check --job-type SchedulerJob Found one alive job.Scheduler 로그 확인 시 모두 heartbeat은 계속 요청하고 있습니다. 혹시 Worker와 같이 명확하게 다중 스케줄러 환경인지 확인하는 방법이 있을까요?
-
미해결Airflow 마스터 클래스
dag list가 안보이는 이유..
variables 를 추가하는 강의에서variables 추가하고, dags_bash_with_variable.py를 생성후, git push 하고 나중에 봣더니그 많던 dag(examples + 강의때 따라한 dag) 들중에 딸랑 3개만 보이고 안보여요..dags 폴더 하위를 찾아가보니 파일은 그대로 존재하는데.. 왜 3개만보이는건지 ..혹시 확인해볼만한 로그들이나... 이유에 대해서 아실까요..? docker exec -it {스케줄러노드ID} bash 로 들어가서 dags도 확인해봤습니다.
-
미해결Airflow 마스터 클래스
task 실행중 오류
안녕하세요 강사님 강의 잘 보고 있습니다다름이 아니라 특정 조건에서 task가 실행되지 않아 해결방법을 묻고자 글을 남깁니다.task가 실행되지 않고 발생하는 log*** Could not read served logs: Invalid URL 'http://:8793/log/dag_id=dags_get_data_python_operator/run_id=manual__2024-12-20T09:11:57.447383+00:00/task_id=refine_data_/attempt=1.log': No host supplied branch에 따른 dag에 작성한 taskflow는 다음과 같습니다get_data_ >> check_dir_ >> get_yesterday_data_ >> refine_data_ >> delete_dataget_data_ >> check_dir_ >> refine_data_ >> delete_databatch 당일 데이터와 전날 데이터를 이용해서 spark를 이용해 정제하는 작업인데,전날 데이터가 수집되어있지 않다면 수집하고나서 sparksubmit을 하도록 task를 구성했습니다.전날 데이터가 없는 상태로 dag를 실행하면 전체task가 잘 실행이되고전날데이터가 존재한다면 원하는 task 까지 skipped이 되고 해당 log가 나오네요 ㅠㅠtask 플로우를 잘못 작성한 이유일까요 ? 추가)BranchPython task에 찍힌 log 입니다.
-
해결됨Airflow 마스터 클래스
plugins 폴더
안녕하세요.airflow 파일의 폴더 구성에 대해 문의드립니다.airflow 를 사용하다보면 dag 외에 여러 파일이 필요한데 이때 해당 파일을 어떻게 정리하면 좋을지 궁금해서요. plugins 폴더에는 PythonOperator 에서 사용하는 함수 혹은 커스텀 오퍼레이터를 작성하는거 같습니다.궁금한점은 오퍼레이터에 간접적으로 사용되는 함수도 plugins 폴더에 위치하는지 궁금합니다. 예를 들어 SQL 파일을 읽을때 SQL 파일을 읽어주는 함수를 작성한다고 해보면 해당 함수는 오퍼레이터에 간접적으로 사용됩니다. 그러면 해당 함수도 plugins 폴더에 위치하는게 권장되는걸까요 아니면 dags 폴더에 위치하는게 좋을까요?shell 파일은 plugins 폴더에 위치하는게 좋다고 하셨는데 그러면 sql 파일은 어떻게 위치하는게 좋은지 궁금합니다.아래와 같은 방식이면 되는지 확인 부탁드립니다!.dagsplugins......ㄴ sql............ㄴ read_table.sql......ㄴ lib............ㄴ common.py......ㄴ shell............ㄴ file_read.sh......ㄴ custom_operator............ㄴ file_parse.py dags 폴더에는 정말 dag 파일만 위치하는게 좋은지도 궁금합니다.
-
미해결Airflow 마스터 클래스
docker container network 관련 질문
안녕하세요 강사님 강의 잘 보고 있습니다.spark 관련된 질문을 드려도 될까요..?도커에 spark 컨테이너를 띄워서 airflow의 bash operator로 spark-submit을 해보려 하는데 로그가 다음과 같이 나오면서 spark-submit이 안됩니다.compose 파일도 network 설정을 다시했고,docker network inspect 로 확인해보니 잘 연결된 것이 확인됐습니다.spark submit도 master container 내부에서 잘 실행이되는 상황입니다.shell 파일을 이런식으로 작성한다고 해서 airflow dags로 spark-submit을 할 수 있는건 아닌가요 ?#!/bin/bash script=$1 echo "${script}" echo "start spark submit with bash operator" spark-submit \ --master spark://spark-master:7077 \ ${script}
-
미해결Airflow 마스터 클래스
db container connection 에러
안녕하세요! 강사님몇달 전에 듣고 복습중인데요몇달 전에 들었을때, 이렇게 잘 db를 생성했었습니다.그리고 vi docker-compose.yaml 아래와 같이 수정하였지만 적용이 안되네요...ㅠㅠ그리고 이전에 생성했던 게 그대로 실행되고 있습니다...!당연히 dags_python_with_postgres.py 실행하면 아래와 같이 connection 오류가 발생하구요... 혹시 해당 문제 어떻게 해결해야할 지 알 수 있을까요?!
-
미해결Airflow 마스터 클래스
Email Operator: ConnectionRefusedError
안녕하세요,Email Operator 수행 과정에서 실행 버튼을 누르고 나면 다음과 같은 에러가 나타납니다.ConnectionRefusedError: [Errno 111] Connection refused어떻게 해결해야 할까요?
-
미해결Airflow 마스터 클래스
(맥환경) dag 파일 인식 안됨
안녕하세요. 강사님 강의따라 docker-compose.yaml 수정 후 에어플로우 내렸다가 다시 올렸는데 dags_bash_operator가 local hostdp에서 보이지 않습니다. (다시 내렸다가 올려도 그대로네요..) 올리기 위해 어떻게 접근해볼 수 있을까요? 맥환경이고 캡처와 같이 수정까지 완료된 상황입니당.
-
미해결Airflow 마스터 클래스
db 통신 라이브러리 사용에 궁금한 부분이 있습니다.
안녕하세요 강사님! 강의 잘 보고 있습니다! 다름이 아니라 개인적으로 공부를 하면서 db와의 통신 부분에서 궁금한 부분이 생겨서 질문드립니다! 에어플로우를 공부하면서 mysql 컨테이너도 함께 띄워서 db와의 통신을 공부하고 있고, 현재 db에 접속해서 저장된 데이터를 불러오고, 새로운 데이터를 insert하는 실습을 하고 있습니다. 몇몇 소스 코드를 보면 데이터를 불러오기 위해서 db와 연결하거나, db의 데이터를 조회할 때는 psycopg2나 pymysql과 같은 라이브러리를 사용하고, 수집 후 전처리된 데이터를 저장 할 때는 SQLAlchemy를 사용하는 코드들을 많이 봤는데, 이렇게 작업에 따라서 다른 라이브러리를 사용하는 이유를 알 수 있을까요?? 제가 알기로는 psycopg2나 pymysql, SQLAlchemy 모두 데이터 조회, 저장 기능을 전부 사용가능한걸로 아는데 어떤 이유에서 작업별로 다른 라이브러리를 사용하는지 궁금합니다!
-
해결됨Airflow 마스터 클래스
Airflow 데이터 처리
안녕하세요! Airflow Python 오퍼레이터를 공부하다가 궁금한게 있어 질문드립니다!Airflow는 Python 기반이기 때문에 코드 내부에서 데이터 수집, 처리 프로그램을 작성할 수 있습니다.하지만 Airflow는 오케스트레이션 도구입니다. 즉, 데이터 처리를 위한 도구는 아닙니다. 그래서 코드 내에서 저런 데이터 수집, 처리 등 오케스트레이션이 아닌 프로그램을 작성하는것에 대해 지양해야하는것으로 알고 있습니다.궁금한점은 커스텀 Python 오퍼레이터로 데이터 수집, 처리 프로그램을 만들어서 실행할 수 있습니다. Airflow를 동작하는 서버에서 오케스트레이션이 아닌 데이터 수집, 처리를 위한 프로그램이 작동하는것이 괜찮은지 의문이 듭니다.
-
미해결Airflow 마스터 클래스
airflow No host supplied 에러
안녕하세요, 강사님. 자세한 설명 덕분에 열심히 듣고 있습니다. 다름이 아니라 며칠 전만 해도 업로드하고 나서 잘 돌아갔는데 최근에는 에어플로어에 업로드만 되면 위 사진과 같이 동일 내용으로 에러가 납니다. 검색해서 해결해보려 했는데 도저히 해결이 되지 않아서 문의 드립니다! yaml 파일에서 webserver에서 environment 추가도 해 봤는데 전혀 해결되지 않아요. 도와주시면 감사드리겠습니다 ㅠㅠ
-
미해결Airflow 마스터 클래스
Label 설정 질문드립니다.
t1 >> [t2, t3, t3] 의 실행흐름에서 t1 >> Label('description') >> [t2, t3, t3] 으로 설정했을때 그래프에서 모든 분기에 설명이 공통으로 설정되는것을 확인했습니다. 그런데 각각의 실행흐름에 대해 라벨링을 하고싶을때는t1 >> Label('dscritpion') >> t2t1 >> Label('dscritpion') >> t3 이렇게 설정하는방법말고 다른 방법은 없을까요? 예를들어 t1 >> [Label('description'), Label('description')] >> [t2, t3]이렇게는 설정이 안되는것으로 보여서요
-
미해결Airflow 마스터 클래스
relativedelta 실행 결과 문의
now = datetime(year=2023, month=3, day=30) print('현재시간:' + str(now)) print('-----------------월 연산 --------------------') print(now + relativedelta.relativedelta(months=1)) print(now.replace(month=1))위의 코드 실행 결과가 다르게 나오는 것 같은데요..1개월 후면 4월30일이 맞는 것 아닌가요?현재시간:2023-03-30 00:00:00 -----------------월 연산 -------------------- 2023-04-30 00:00:00 2023-01-30 00:00:00감사합니다.
-
미해결
sudo docker compose down 오류
에어플로우 서비스를 내리고 다시 올리려고 합니다.아래와 같이 sudo docker compose down을 하게되면 오류가 뜹니다.오류: (root) Additional property votumes is not allowed이거 어떻게 해야 하나요 ?
-
미해결Airflow 마스터 클래스
Bash Operator & 외부 쉘파일 수행하기 강의 질문
Bash Operator & 외부 쉘파일 수행하기강좌에서 보여주신내용을 따라하던중 쉘스크립트를 파라미터없이 작성했는데 파라미터가 없는경우 airflow에서 위치를 못찾고jinja2.exceptions.TemplateNotFound: /opt/airflow/plugins/shell/select.sh 에러를 발생시키는데 파라미터의 유무로 경로를 찾고/못찾고가 차이나는 원인이 무엇인지 궁금해서 질문드립니다.
-
미해결Airflow 마스터 클래스
task 연결 질문입니다.
t1 >> t3t2 >> t3 이렇게 테스크를 연결했을때 case 1 : t1, t2 둘다 종료되어야 t3가 실행되는지 case 2 : t1이 종료되었을떄, t2가 종료되었을때 각각 t3가 한번씩 실행되는지 궁금합니다. 위의 방법과 [t1, t2] >> t3 가 동등하다고 설명해주셨는데case 1, case2 두가지 방법을 설정하고싶을때는 어떻게 처리하면 될까요?
-
해결됨Airflow 마스터 클래스
DAG 스케줄
with DAG( dag_id="shedule_3_hour", schedule="3 * * * *", start_date=pendulum.datetime(2023, 3, 1), catchup=False ) as dag: def select_fruit(): fruit = ['APPLE','BANANA','ORANGE','AVOCADO'] rand_int = random.randint(0,3) time.sleep(10) print(fruit[rand_int]) py_t1 = PythonOperator( task_id='py_t1', python_callable=select_fruit ) py_t1 처음 DAG을 시작(PAUSE)했을때는 2024-10-06, 06:01:47 UTC입니다. DAG이 2024-10-06, 06:03:00 UTC에 처음 시작될거라 예상했는데 왜 처음 DAG을 시작(PAUSE)한 시간인 2024-10-06, 06:01:47 UTC에 처음 실행하는지 궁금합니다.참고로 처음 실행되었던 작업에서도 오퍼레이터가 정상 실행되었습니다.물론 약 2분 후 2024-10-06, 06:03:00 UTC에 작업도 실행되었습니다.
-
해결됨Airflow 마스터 클래스
Next dagrun 문의드립니다
from airflow import DAG 2import pendulum 3import datetime 4from airflow.operators.python import PythonOperator 5import random 6import time 7 8with DAG( 9 dag_id="shedule_3_hour", 10 schedule="3 * * * *", 11 start_date=pendulum.datetime(2023, 3, 1), 12 catchup=False 13) as dag: 14 def select_fruit(): 15 fruit = ['APPLE','BANANA','ORANGE','AVOCADO'] 16 rand_int = random.randint(0,3) 17 time.sleep(10) 18 print(fruit[rand_int]) 19 20 py_t1 = PythonOperator( 21 task_id='py_t1', 22 python_callable=select_fruit 23 ) 24 25 py_t1Airflow Webserver UI DAG Detail페이지에 있는 내용 중 Next dagrun ~ 관련 항목이 이해가 안돼서 질문드립니다.UTC 기준 10:34입니다. 설명 편의를 위해 현재시간으로 지칭하겠습니다! Next dagrun이 2024-10-06T10:03:00+00:00 값을 가지는 이유가 궁금합니다.Next dagrun이 다음 DAG 실행 예정 시간인거같은데 왜 현재실행 보다 과거인지 모르겠습니다.2024-10-06T11:03:00+00:00이 맞는거 같아서요. 현재 시간이 10:34이고 3분마다 실행.10:03은 실행완료. 이후 11:03에 실행되어야함.Next dagrun create after : 다음 DAG은 11:03에 실행되어야하므로 11:03에 DAG Run 생성(11:03에 실행하는) DAG 기준으로 처리해야하는 데이터 범위는 10:03~11:03이므로 Next dagrun data interval end는 11:03, Next dagrun data interval start는 10:03.(1) Next dagrun 관련 항목의 정확한 의미와 Next dagrun과 Next dagrun create after 차이를 정확히 몰라서 생기는 문제 같기도 합니다.(1-1) Next dagrun 관련 항목의 의미아래 내용이 맞는지 확인 부탁드립니다! - Next dagrun: 다음 DAG 실행 예정 시간Next dagrun create after: 다음 DAG 생성 예정 시간Next dagrun data interval end: 다음 DAG 데이터 간격 종료 시간Next dagrun data interval start: 다음 DAG 데이터 간격 시작 시간 (1-2) Next dagrun과 Next dagrun create after 차이 Next dagrun 과 Next dagrun create after 은 항상 같나요? Next dagrun create after는 정해진 시간에 생성되고(3분 마다) Next dagrun 은 Next dagrun create after이후에 되는데 즉, DAG run이 생성되고 실행되는거 맞나요? (Airflow 공식 문서에 Web UI에 있는 항목별 의미를 알 수 있는 페이지가 있는지 찾아보았는데 없어서 질문드립니다!아래 링크보면 Airflow UI 설명은 간단하게 있는데 항목별 설명은 없네요...)https://airflow.apache.org/docs/apache-airflow/stable/ui.html)
-
미해결Airflow 마스터 클래스
DAG 자동화 문의
안녕하세요!dag 생성 중에 문의가 있어서 질문드립니다.저희가 dag파일을 생성할 때, 스케줄로 DAG 실행 주기를 설정하는데요.매번 공부하고 나서 docker compose down으로 컨테이너를 내리면, 실행 주기에 맞춰서 dag가 실행되지 않는 것 같아서요. 컴퓨터를 off한 상황에서도 postgres DB로 데이터가 적재되도록 만든 dag가 작성한 스케줄에 맞춰서 실행되려면 어떻게 해야하나요? 감사합니다!