Airflow(GCP Composer) 에서 KubernetesPodOperator 사용
2023. 4. 23. 13:27
Data/Data Engineering
Airflow(Google Composer2) 를 활용해 워크플로우 오케스트레이션을 하고 있습니다. 최근 사내 파이프라인에 DBT 를 도입하다보니 composer 2의 기본 패키지 의존성과 DBT의 패키지 의존성간에 충돌이 있기에 컨테이너 기반으로 DBT 를 활용하도록 KubernetesPodOperator를 고려하였습니다. 본 문서는 비공개 환경의 k8s(GKE) 기반 airflow(GCP Composer)에서 KubernetesPodOperator를 사용하는 방법에 대해 안내합니다. 참고로 composer 1 과 composer2 에서 사용 설정이 일부 상이합니다. 본 문서는 autopilot 으로 관리되는 composer2 환경에서 KubernetesPodOperator 사용법을 설명합니다. 환경 ..
좋은 에러메세지 작성 방법
2023. 1. 25. 23:52
Programming
이 글은 구글에서 작성된 Writing Helpful Error Messages 을 정리한 내용입니다. 에러 메세지는 왜 중요한가? 여러 상황에서 오류 메세지는 사용자의 잘못된 입력 또는 의도하지 않은 활용에 대한 경고와 예외처리 또는 제품의 결함 등으로 발생하기 때문에 사용자가 직접 해결할 수 있도록 돕는 역할을 한다. 때문에 에러 메세지는 예상하지 못한 작동 상황에서 사용자로 하여금 문제를 해결할 수 있는 가장 첫번째 이정표이자 개발자와의 상호작용 역할을 수행한다고 볼 수 있다. 좋은 오류메세지는 다음과 같은 특징을 갖는다. 긍정적인 사용자 경험 제공 쉽게 접근하여 실제로 실행 가능하다 문제 해결을 위한 지원 작업을 줄이고 사용자가 직접 해결할 수 있도록 함 공통 오류 처리 규칙 실패 상황을 넘어가선..
Airflow 사용 시 AssertionError: daemonic processes are not allowed to have children 의 해결
2022. 10. 10. 23:37
Data/Data Engineering
현상 파악 Airflow 2.0 버전 대에서 concurrent.futures.ProcessPoolExecutor 사용 시 AssertionError: daemonic processes are not allowed to have children 에러를 경험하였다. (local , celery, kubernates 모두 같은 현상을 재현할 수 있었음 ) 리서치 결과 정확히는 multiprocessing 패키지에서 발생하는 문제라는 것을 알 수 있었다. concurrent.futures python 작업 시 multiprocessing이나 multithread 작업을 위해 자주 사용하는 패키지로 사진의 에러를 발생시킨 것은 ProcessPoolExecutor 사용 시 경험했다. 이 ProcessPoolExe..
[RL] 마로코프 의사 결정 과정
2022. 9. 9. 22:27
Data/ML
강화 학습이란 인공지능 학습의 방법론인 머신러닝(ML)의 한 계통으로 일반적인 지도 학습과 비지도 학습과는 다른 계통의 학문으로 DP(dymamic programming), MDP(markov decison process)와 같은 개념에 뿌리를 두고 있다. 일반적으로 AI 의 발전은 단순한 계산(computing) 이 아니라 판단(estimation), 의사결정(decison), 창작(creation)을 기계가 행하도록 기대하는 행위인데, 강화 학습은 특히 의사결정(decison)에 집중한다. 지도 학습 데이터와 레이블의 쌍이 주어지면 기계가 새로운 데이터에 레이블을 붙이는 방법을 학습하는 것 즉 문제와 정답을 제공하고, 새로운 문제가 등장하면 "판단"하게 만들고자 함 대부분의 회귀모델 CNN과 같은 방..
Snowflake 가 준비하고 있는 새로운 패러다임. Unistore
2022. 9. 4. 18:15
Cloud&Tools
금번 snowflake에서 주관한 Data cloud world tour에 참가했다가 인상 깊은 세션을 보게 되어 해당 세션 내용을 기록한다. unistore는 snowflake와 adobe 가 함께 개발 중인 idea로 작성하는 현재는 priviate test 가 진행 중이며 한국에는 2023년 상반기 beta , GA는 2023년 후반기에 예정되어 있다. 현재까지 일궈낸 성과는 아래와 같다고 한다. 분석 워크로드에 대한 고성능을 유지 높은 동시성(100 ~ 1000 QPS)과 응답 시간(50~100ms) GDPR 규정 준수 지원 시스템의 확장성과 손쉬운 관리 및 사용기능 제공 현세대 데이터 베이스 운영 전략과 문제 대부분의 회사는 자사 서비스와 데이터의 특징과 환경에 맞게 cloud 환경을 사용하거나..
[Airflow] 자주 쓰는 Branch Task
2022. 7. 21. 13:05
Data/Data Engineering
I. 개요 일련의 작업 진행 시 상황에 따라 다른 작업으로 이어져야 하는 경우는 굉장히 빈번하게 발생한다. Airflow 는 기본적으로 DAG 으로 작업을 구조화해서 작업을 진행하기 때문에, 자동화할 때 이러한 조건부 작업을 구현하지 못한다면 매번 실패 후 재처리하는 작업이 필요하다. 기본적이지만 자주 사용되는 Branch task 인 BranchPythonOperator 와 BranchSQLOperator 의 사용법과 예제를 기록해둔다. II. Branch Task 1. BranchPythonOperator PythonOperator 기반으로 구성되어 task_id(s) 를 output 으로 하는 Python callable 을 통해 바로 다음에 이어지는 작업 요소를 결정한다. BranchPythonO..
우리는 PK 에 왜 int 형 데이터를 고집할까
2022. 4. 21. 19:43
Data/Data Engineering
우리는 PK 에 왜 int 형 데이터를 고집할까 최근에는 분석용 DB는 Bigquery 나 Snowflake, Redshift 등을 많이 쓰는 것으로 보이나 운영용 DB(원천 DB)는 여전히 Aurora, RDS 또는 자체 서버를 구축하여 사용하는 경우가 많다고 생각한다. 데이터 인프라나 DB 관련 얘기를 나누다 보면 “Server 에서 생성하는 unique ID(nchar) 값을 PK로 잡아 저장하는 게 데이터 분석가 입장에선 훨씬 편할 텐데 굳이 운영 DB에 int type id(idx) 컬럼을 만들어 PK를 따로 잡아야 할까요?”라는 질문을 받곤 한다. 이러한 주제가 나올 때마다 int 형을 추천했지만 정작 완벽하게 이유를 설명하지는 못했던 것 같다. 차후에 이러한 대화가 다시 생길 땐 적어도 더 ..