소개
안녕하세요
LG CNS 데이터 엔지니어 김현진 입니다.
정보관리기술사를 취득한 이후 지금까지 얻은 지식을 많은 사람들에게 공유하고,
특히 데이터 엔지니어를 희망하고 공부하고 싶은 분 들에게 도움이 되고자 컨텐츠를 제작하고 있습니다.
첫 컨텐츠는 Airflow 마스터 클래스로써
데이터 파이프라인을 만들고 관리할 수 있는 핵심 도구를 초보자도 이해하기 쉽게 만들었습니다.
만나서 반갑습니다 ^^
Contact: hjkim_sun@naver.com
강의
수강평
- Airflow 마스터 클래스
- Airflow 마스터 클래스
게시글
질문&답변
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
- 16
질문&답변
(맥환경) 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
- 37
질문&답변
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
- 20
질문&답변
Airflow 데이터 처리
안녕하세요 가보자고님!가보자고님께서 말씀하신게 맞습니다. Airflow에 대해서 정확히 이해하신거구요.Airflow에서 파이썬 오퍼레이터로 만들어서 데이터 수집/처리를 진행하면 Worker 프로세스가 그 일을 모두 담당하게 됩니다. 따라서 데이터 양이 증가함에 따라 Worker 프로세스가 해당 Job에 점유당하게 되고 메모리/CPU 등의 자원 부족 현상이 발생할 수도 있죠. 그래서 보통은 ETL, Processing Framework을 따로 두고, Airflow는 ETL, Processing Framework에게 수집/처리를 지시하는 용도로 사용하는게 맞습니다. 질문주신 마지막 부분에 대한 답변은, 소규모 데이터 용량일 때는 Airflow로 직접 처리해도 괜찮을 수도 있습니다. 예를 들어 실습에서 진행했던 서울시 공공데이터를 받는 것은 다른 도구로 처리하기가 애매하기도 하고 소규모 데이터이기 때문에 Airflow 워커가 직접 처리해도 괜찮습니다. 하지만 몇 GB ~ 수십 GB 데이터를 수집하거나 처리하는 경우 반드시 분리해야 합니다. 또 궁금하신 점은 질문 남겨주세요 ^^
- 0
- 2
- 42
질문&답변
스케줄링, dag removed원인 질문입니다.
안녕하세요 백미정님!질문주신 내용의 dag 을 모두 첨부해주실 수 있나요?dag 내용을 봐야 자세히 답변이 가능할 것 같습니다. 그리고 질문 내용 중 궁금한게 있습니다. 첫 번째 질문은 당일 날짜를 11월 17일이라 했을 때, 11월 1일부터 17일까지 일괄 수행하고, 18일부터는 스케줄이 도달함에 따라 돌게끔 하고 싶은거지요?
- 0
- 2
- 65
질문&답변
airflow No host supplied 에러
안녕하세요 Min님주로 저런 증상인 Job 자체가 시작되지 못할 때 로그조차 남기지 못한 현상입니다. 왜 Job 이 시작조차 못했는지는 여러 방법으로 원인을 찾으셔야 해요. 일단 현상은 worker 상태가 정상이 아닌 것 같습니다. 혹시 sudo docker compose up 했을 때 나오는 여러 메시지 중 ERROR 라고 나오는 메시지 없나요?그리고 sudo docker ps 했을 때 컨테이너들의 상태 확인 한번 해주세요. 아래처럼 Healthy로 나와야 합니다. (사진)
- 0
- 2
- 138
질문&답변
Label 설정 질문드립니다.
안녕하세요 cluelin 님!음.. 내용이 다른 Label을 적용할 때 한 줄로 쉽게 쓰는걸 원하시는거죠?아쉽게도 그런 방법은 없는 것 같습니다. cluelin님께서 쓰신대로 각각 쓰셔야 할 듯 합니다. t1 >> Label('description1') >> t2t1 >> Label('description2') >> t3비슷한 코드를 여러 줄 작성해야 하기에 좀 불편할 수 있지만 유지보수를 생각하자면 보기 편한대로 작성하는 것도 나쁘지는 않습니다 ^^
- 0
- 1
- 43
질문&답변
Bash Operator & 외부 쉘파일 수행하기 강의 질문
안녕하세요 clulin 님!Base operator를 사용할 때 bash_command 파라미터의 값이 .sh 로 끝나는 경우 스크립트 자체를 Jinja 템플릿으로 해석하려고 시도합니다. 그런데 조건이 있습니다. 쉘 파일을 dags 디렉토리 아래에 두어야 한다는 조건이 있습니다. dags 아래 여러 디렉토리를 계층으로 두더라도 꼭 dags 디렉토리 아래에 쉘 파일이 있어야 인식이 가능합니다. 에러를 안나게 하는 방법은 2가지인데, 1) 쉘 파일을 dags 디렉토리 아래에 두고, bash_command 파라미터를 dags 아래 상대 경로로 작성해주세요. 예를 들어 dags/shells/select.sh 이렇게 두었다면 bash_command를 아래처럼 작성해보세요.bash_command=shells/select.sh이 방법은 select.sh 파일 안에 {{ data_inverval_end }} 와 같이 Template 변수가 작성되어 있을 때 적용할 수 있습니다. 2) bash_command 파라미터 작성시 띄어쓰기를 하나 포함해주는 방법이 있습니다.그럼 .sh 로 끝나지 않고 띄어쓰기가 하나 있으므로 Jinja 템플릿으로 해석하려는 시도를 하지 않습니다.쉘 파일 안에 Template 변수가 없고 단순히 그냥 실행만 하고자 하면 이 방법을 사용하면 됩니다. 이에 대한 설명은 Airflow 가이드 문서 참고해보세요 ^^(사진) https://airflow.apache.org/docs/apache-airflow/stable/howto/operator/bash.html#jinja-template-not-found 답변이 되었을까요?궁금한건 언제든 물어보세요 ^^
- 0
- 2
- 58
질문&답변
relativedelta 실행 결과 문의
안녕하세요 Byung-ryul kim 님 네 s 붙은것과 안붙은거 모두 가능합니다. months & monthdays & day hours & hourminutes & minute 등등 s가 붙은건 상대적 연산(더하거나 뺄 때), s가 붙지 않은 건 값을 치환해버리는 것으로 원리는 year ~ second 까지 동일합니다.또 궁금하신건 언제든 문의주세요 ^^화이팅입니다!
- 0
- 2
- 44
질문&답변
DAG 스케줄
안녕하세요 가보자고님!Airflow DAG이 처음 parsing되어 올라올 때나 pause 후 unpause했을 때 Airflow는 마지막으로 돌았어어야 할 run을 수행합니다. 아래 그림을 보시면 pause --> unpause 했을 때 마지막으로 수행되었어야 할 RUN은 빨간색으로 표시한 RUN3 입니다. (사진) 다시 가보자고님의 상황을 보면 6시 1분에 DAG을 재개한 것 같은데, 그러면 가장 마지막으로 수행되었어야 할 RUN은5시 3분에 수행되었어야 할 job입니다.그 Job의 data_interval_start 는 4시 3분입니다. 그래서 두 번째 캡처하신 그림에서 RUN ID가 scheduled__2024-10-06T04:03:00+00:00으로 표시된 겁니다.(RUN ID는 시간 부분을 data_interval_start 값으로 표현합니다) 그리고 2분이 지나 6시 3분이 되자 본 스케줄이 작동한 것이고 이 RUN의 data_interval_start의 시간은 5시 3분이 됩니다. 그래서 마지막 캡처하신 그림의 RUN ID가 scheduled__2024-10-06T05:03:00+00:00으로 표시된 겁니다. 제가 그린 그림에서 RUN4에 해당하는 스케줄이 동작한 겁니다. 이해되셨는지요?
- 0
- 3
- 70