게시글
질문&답변
docker desktop
안녕하세요 kosa 님도커 데스크탑도 내부적으로는 WSL을 필요로 합니다. 그래서 어차피 WSL을 필요로 한다면, 그냥 WSL에서 작업하는게 나을 듯하여 그렇게 진행을 했습니다. 현업에서 Airflow를 셋업한다면 100% 리눅스 환경을 사용합니다. (그리고 제가 윈도우 도커 데스크탑에 익숙하진 않았습니다 ^^)어쨌든 도커 데스크탑을 이용해 컨테이너가 잘 올라오기만 하면 실습하는데 상관은 없습니다. 그리고 컴퓨터 2대로 진행하려면... 각종 컴포넌트를 어떻게 배치할 것인지는 설계하기 나름입니다. Celery Executor를 사용할 경우 필요한 컴포넌트는 아래 5개 입니다. (1) Scheduler(2) Worker(3) Web server(4) DB(Postgres or Mysql)(5) Redis (Queue)(6) Triggerer(7) Flower※ (6), (7)은 필수는 아니어서 안올려도 됩니다. 필수로 올려야 할 요소는 1부터 5까지 5개의 컴포넌트인데, 현재 실습환경에서는 모두 하나의 노드에 올라오는 구조입니다. 만약 Kosa님께서 (1), (2),(3) 은 컴퓨터 1에 올리고(4), (5)는 컴퓨터2에 올렸을 때 상호간에 접근할 수 있도록 설정만 하실 수 있다면 분산해서 올려도 상관없습니다. 중요한 것은 동일한 airflow.cfg (Airflow 설정파일)을 바라보고 올라오도록 하고 다른 노드에 있는 컨테이너에 상호 접속할 수 있도록 하는 것입니다. 그것만 되면 어떤 구성이든 상관없어요. (1)(3)(5)는 컴퓨터1에, (2)(4)는 컴퓨터2에 있어도 상관없다는 말입니다. 강의 섹션 16부분에 해당 내용을 조금 다루긴 했습니다. 이 부분을 먼저 보셔도 좋긴한데, 이런 구성은 Airflow를 이해하지 않으면 조금 어려울거에요. 그럼 새해복 많이 받으시고, 궁금한건 또 물어보세요 ^^
- 0
- 3
- 26
질문&답변
airflow 웹서버 페이지 auto-refresh에 대해서 질문드립니다!
안녕하세요 이한희님!네 auto refresh는 말씀하신대로 dag 목록과 job 수행현황을 최신화하는 기능이고 dag 의 스케줄 수행과는 상관없습니다. 리소스 절약을 위해선 꺼놓는것도 괜찮은 방법일듯 합니다. 아무래도 dag 리스트나 수행현황을 최신화하려면 db를 계속 조회할테니까요. 아니면 파라미터 중 refresh interval를 조절할 수 있는 파라미터도 있습니다. (auto_refresh_interval, 기본: 3초) 이 파라미터 값을 좀 늘려도 괜찮을 듯 합니다. 새해복 많이 받으세요 ^^
- 0
- 2
- 22
질문&답변
dag list가 안보이는 이유..
안녕하세요 임주아님 !Dag 이 안 보이는거는 Variable 등록한거와는 관련이 없습니다. 혹시... 도커 내린 후 재기동을 해도 그런가요? 대부분 재기동했더니 잘 보인다고 하시는 경우가 많아서 한번 해보시겠어요?
- 0
- 1
- 44
질문&답변
다중 스케줄러 실행 시 확인 방법 문의
안녕하세요 kyou 님!강의 내용에 없던 scheduler 고가용성 테스트도 해보시고 좋습니다 ^^일단 airflow web에서도 scheduler 현황을 파악할 수 있는 메뉴는 없고, flower 웹에서는 worker 현황만 보이기 때문에 멀티 스케줄러 현황을 보기가 좀 여려울 거에요.우선 kyou 님 질문에 답변 드리자면 DB를 통해서 확인하셔도 되고 CLI 사용하실 때 --allow-multiple --limit 100 옵션을 넣어서 해보실래요? 그럼 scheduler 노드 개수가 나올꺼에요. airflow jobs check --job-type SchedulerJob --allow-multiple --limit 100 일반적으로 scheduler alive 등의 모니터링은 Grafana 를 통해서 쉽게 확인할 수 있습니다. 참고로 airflow는 여러 metric 정보를 내보낼 수 있는 기능이 있는데 statsD 라는 Metric 수집기를 사용해서 Metric 정보를 내보내고 이를 prometheus 에 저장, Grafana dashboard 로 구성하는게 가능합니다.Airflow statsD 전송 --> stateD exporter --> prometheus --> Grafana 이런 흐름으로 metric 정보 전송이 가능한데 exporter, prometheus, Grafana 3개 모두 docker 컨테이너로 띄울 수 있어서 한번 해보시는것도 좋을 것 같아요. 참고로 airflow statsD 로 metric 을 내보내기 위해 파라미터 설정을 몇 가지 해줘야 합니다. 아래 문서를 참고해보세요. https://airflow.apache.org/docs/apache-airflow/stable/administration-and-deployment/logging-monitoring/metrics.html Grafana Dashboard에 따라서 scheduler의 상태를 그래프로 볼 수 있습니다. 한번 구성해보는것도 나쁘지 않을 것 같아요. ^^그럼 새해복 많이 받으시고 화이팅입니다!
- 0
- 1
- 74
질문&답변
task 실행중 오류
앗 brianbok97님 원인을 찾으셨군요. 제가 답글이 늦었습니다.일단 원인은 trigger rule이 맞습니다. 기본이 all_success이기 때문에 refine_data_ 입장에서는 상위가 get_yesterday_data_ task도 상위 중 하나이므로 이 task도 success 해야 수행됩니다. trigger_rule을 변경하셨다면 one_success 로 바꾸셨을 것 같네요. 정 trigger_rule을 사용하기 꺼려진다면 get_yesterday_data_ task를 수정해서 어제 날짜가 존재한다면 그냥 빠져나오도록 수정하는 것도 괜찮은 방법일 듯 합니다. 그럼 success 로 보이긴 하니깐요. 그리고 spark plugin 도 설치하셨나요? 강의에 없던 내용인데 훌륭하십니다 ^^
- 0
- 3
- 58
질문&답변
plugins 폴더
안녕하세요 가보자고님오랜만에 질문글 올려주셨네요!sql 파일을 담은 디렉토리는 굳이 plugins 아래에 있을 필요는 없습니다.dagspluginssqls이런식으로 sqls 를 $AIRFLOW_HOME 바로 아래에 위치시켜도 좋습니다.어차피 plugins 내 오퍼레이터들이 sqls 를 바라볼 수만 있으면 되니까요. 그리고 sh 파일도 dags, plugins 외 다른 디렉토리에 두어도 상관은 없습니다.airflow worker가 실행할 수 있도록 절대경로로 shell 위치를 지정해주면어느 위치에 있어도 실행은 가능하니 plugins 아래에 있지 않아도 상관은 없습니다. 프로젝트 수행시 아래처럼 폴더 구조를 잡기도 합니다. dags/plugins/|- operators/|- sensors/config/files/|- sqls/|- ingest/ 아 그리고 dags 폴더에는 가급적 dag 파일만 있는게 좋긴합니다. dag 파일이 많다면 dags 폴더 안에 폴더를 두는것도 가능해서, 폴더를 구분해서라도 가급적이면 dag 파일만 있는게 깔끔하죠.. 참고하세요 ^^
- 0
- 1
- 38
질문&답변
docker container network 관련 질문
안녕하세요 brianbok97님!해결되었다니 다행입니다. 그런데 저도 궁금한 게 있는데spark 컨테이너 서비스를 추가로 정의해준거에요? 아니면 기존 airflow 이미지에 pip install apache-airflow-providers-apache-spark 라이브러리 추가 설치해주고 그 이미지로 올리신거에요? 참고로 airflow + spark 조합은 아주 좋은 조합중에 하나입니다. airflow가 직접 파이썬으로 Extract 나 Transform 로직을 airflow worker가 처리하기는 것보다는 Spark에게 처리를 지시하도록 구성하는게 좋습니다. Spark은 병렬 처리가 가능해서 전처리를 훨씬 빠르게 수행할 수도 있어서 컴퓨팅 프레임워크로 Spark을 쓰면 좋습니다. 참고로 위 파이썬 패키지를 설치하면 spark_submit operator도 사용 가능합니다. 하지만 굳이 패키지 설치하기 번거롭다면 spark_submit 오퍼레이터를 사용하지 않아도 됩니다. spark-submit 명령이 수행되도록 하는 오퍼레이터를 직접 만들던가 ssh operator로 spark-submit 명령을 전송하는 것도 좋은 방법입니다. 직접 spark도 사용해서 테스트해보시는 것을 보니 실력이 금방 느시겠네요. 화이팅입니다!
- 0
- 3
- 60
질문&답변
db container connection 에러
안녕하세요 rosy 님!일단 sudo docker ps 명령을 했을 때 postgres_custom 컨테이너가 정상 상태인지 확인해보시구요.음 아마도 srkim 이라고 이전에 만들었던 DB의 내용이 그대로 인식된게 아닌가 합니다.컨테이너 DB에 연결되는 볼륨은 로컬 디렉토리와 연결되는데, 기존에 만들었던 DB볼륨의 내용이 새로 만드신 custom_srkim 과 연결되면서 문제가 될 수도 있어요.우선 volume을 새로 하나 지정하고 만들어 보시겠어요? docker-compose.yaml 파일 하단에 보시면 volume 항목이 정의되어 있습니다.volumes: postgres-db-volume: postgres-custom-db-volume:저기에 새로운 볼륨을 하나 추가하신 다음에 custom_srkim 의 volume 항목 지정시 새로 만든 volume을 연결해보세요. volumes: postgres-db-volume: postgres-custom-db-volume: postgres-custom-srkim-volume:그리고 postgres_custom 컨테이너 서비스 항목에는 아래처럼 지정하시면 됩니다. services: postgres_custom: image: postgres:13 environment: ... volumes: - postgres-custom-srkim-volume:/var/lib/postgresql/data ports: - 5431:5432 networks: network_custom: ipv4_address: 172.28.0.3 이렇게 만든 후 docker compose up 해보시고 접속해보시겠어요?
- 0
- 2
- 22
질문&답변
(맥환경) dag 파일 인식 안됨
안녕하세요 five 님우선 맥북 로컬 디렉토리 airflow/dags 내 dags_bash_operator.py 파일은 그대로 있죠?그러면 docker-compose up 하고 스케줄러가 올라왔을 때 스케줄러 노드로 들어가서 해당 파일이 보이는지 확인해봐야 합니다. docker ps 명령을 통해 스케줄러 노드의 ID를 확인한 후 아래 처럼 명령해주면 스케줄러 노드 안으로 진입할 수 있어요.docker exec -it {스케줄러노드ID} bash 이 상태에서 cd /opt/airflow/dags 로 이동해서 dags_bash_operator.py 파일이 보이는지 확인해보실래요?
- 0
- 2
- 68
질문&답변
db 통신 라이브러리 사용에 궁금한 부분이 있습니다.
안녕하세요 이한희님!먼저 강의를 잘 듣고 추가적인 실습환경도 만들어서 하신다니 잘 하고 계신 듯 합니다!질문주신 라이브러리 같은 경우 테이블 형식의 데이터를 다루는 경우 파이썬에서는 pandas 라이브러리를 많이 사용하는데, pandas 그 자체를 받아서 DB에 넣을 수 있는 라이브러리는 SQLAlchemy만 가능하빈다. psycopg2나 pymysql같은 경우 pandas 데이터프레임 그 자체를 파라미터로 받아서 넣을 수는 없어요. (row 하나씩 분해해서 데이터를 만든 후 insert 하는 방법을 사용해야 함) 저 같은 경우 pandas 데이터프레임을 쉽게 넣고, 조회하고자 할 경우 주로 SQLAlchemy를 사용하고 그 외에는 대체로 psycopg2 같은 라이브러리를 사용하곤 합니다. 참고로 psycopg2, pymysql 같은 경우 각각 postgres, mysql 전용 라이브러리이고, 해당 데이터베이스에 대해서는 SQLAlchemy 보다는 많은 기능을 지원하는 걸로 알아요. 그래서 postgres나 mysql 전용으로 좀 더 전문적으로 다루고자 할 경우 psycopg2, pymysqlDB 범용적으로 좀 더 쉽게 사용하고자 할 경우 SQLAlchemy 를 사용한다고 보심 될 것 같습니다.
- 0
- 1
- 35