전체 글 15

[Airflow] Dataset을 파헤쳐헤쳐모여여엿

와.. 정말정말 오랜만에 글 쓰는 것 같다.우아한스터디도 했고.. 이직도 했고.. 벌써 일년 가까이 되어버렸다.새 회사에 잘 적응했고, 엔지니어링 관련 늘 새로운 문제가 날 기다림 ㅇ0ㅇ 짜릿해. >ㅇ이 글은 현재 겪고 있는 문제를 Dataset으로 풀 수 없을까? 라는 고민에 의해 시작되었다. 풀 수 없을까를 고민하기 전에 Dataset을 완벽히 이해하고 있는지도 모르겠고 생각 차원으로 정리하고자한다.이 글은 Airflow 공식 Docs인 https://airflow.apache.org/docs/apache-airflow/stable/authoring-and-scheduling/datasets.html 를 기반으로 한다.적기 전에 궁금한 거Dataset을 or, and 조건으로 여러개 묶을 수 있다...

Python 2025.04.16

[Python] Memory allocate & Garbage Collection

part 1. 메모리 할당 방법 모든 프로세스들은 운영체제에 의해 자원을 할당받는데, 파이썬도 마찬가지이다. 파이썬도 운영체제에서 메모리 자원을 할당받는다. 파이썬 인터프리터는 메모리 할당을 파이썬 버전이나 환경 세팅에 따라서 운영체제로부터 받지만, 이 부분은 걱정하지 않아도 된다. (=엄청 딥하게 할거아니면 세팅할 일이 없나보다) 하드디스크에 있는 프로그램을 실행하기 위해 운영체제에 필요한 자원을 요청하고 프로그램을 메모리에 올린다. 그리고 CPU가 실행한다. 이 때 할당받는 메모리 구조는 아래와 같다. 위를 상기하면서, 파이썬을 들여다보자. Everything is object in Python 파이썬에서 모든 것은 객체라고 한다. 이 말을 이해해보자. x=10 x라는 변수에 10이라는 값을 할당했을..

Python 2023.12.05

[Dask] 개념 및 Scheduler

Dask 란? Dask is a flexible library for parallel computing in Python. Anaconda 에서 파이썬 병렬 컴퓨팅을 위해 만든 라이브러리로 Pandas, Numpy 데이터 처리가 병렬처리 환경에서 동작하는 것을 지원. Lazy 연산을 지원 (Spark랑 비슷) Task(Dask Array, Dask DataFrame 등) 객체를 만들면→ Task Graph: Task들을 어떻게 처리할 것인지 로직 생성 → Scheduler (프로세스, 스레드, 동기, 분산 등) 자원 할당한 방식으로 실행 Spark 처럼 실행 계획을 세우고 Action을 취할 때 Lazy 연산이 실행되는 점에서 비슷 로컬에서 개발하고 Scheduler만 갈아끼워서 클러스터 환경에서 기동가..

Python 2023.11.29

[일기] 우아한 스터디 2023 겨울시즌에 참여하게 되었습니다!

7월 이후로 엄청 오랜만에 블로그 글을 쓰는 것 같습니다.. ^_ㅠ 변명이지만 정말 정신 없이 후다닥 지나갔는데요 (주르륵 이러다 한살 더 먹겠.,,왜 곧 11월인건데요 ㅜㅜ) 블로그 적어야지~~ 적어야지~~ 하면서 아래 이미지처럼 노션에 마구잡이로 초안만 써놓고,, 올리지 못한.....(그 사이에 회사 기술 블로그 글을 하나 발행했지만,, 반성하자 나자신,,게을러 게을러 ㅠㅠ) 아무튼 이런 삶을 살고 있을 때쯔음......... 회사 동료가 우아한 스터디 모집 중인 것을 공유해주었고, 평소에 Python GC 전략, GIL 정책, 병렬 처리 등에 관심이 있었던 저는 마침 Ray, Dask 관련 스터디가 있어 신청하게 되었는데요 : ) 스터디원으로 선발되었습니다 ㅎㅎ 하지만 이제 시작일뿐.....!11 ..

카테고리 없음 2023.10.27

[Glue Job] File already exists

💫 개요 Glue Job 사용, 데이터 Transform 완료 후 Redshift에 Load Connection을 사용해서 특정 VPC, subnet 안에서 실행되도록 설정 Schedule 관리는 MWAA(Managed Airflow)의 GlueJobOperator을 사용 👀 이슈 An error occurred while calling o436.pyWriteDynamicFrame. File already exists:s3:///folder1/sample.csv 실행하다가 이런 에러가 반복적으로 발생했다. 물론, retry도 설정하지 않았다. ▶ 세부 설정 fail 시 retry 지정하지 않음. glueContext.write_dynamic_frame.from_options 메서드를 사용하여 redshi..

Spark 2023.07.02

[MWAA] GlueJobOperator 트러블슈팅기 (with. v2.2.2 -> v2.5.1 마이그레이션)

MWAA 를 2.2.2 에서 2.5.1로 업그레이드하는 중에, 기존의 GlueJobOperator 사용 시 기존 구성된 값을 모두 초기화 시키는 이슈 발생했다. 이슈 MWAA를 2.5.1로 업그레이드하고 나서 stage 환경에서 테스트를 진행하는데.... 이전에 구성해두었던 glue job config가 완전히 초기화되었다. 심지어 spark 로 설정해둔 것들이 python으로 변경되면서 정상적으로 실행되던 코드들이 아예 실행되지 않았다. 의심 boto3 버전의 문제 amazon providers 버전 문제 (기존 3.x.x -> 7.x.x) 원인 파악 우선, boto3 버전은 많이 변경되지 않았기 때문에 (해봤자 버그 픽스 정도.. ), 2번 amazon providers 의 문제일 거라 판단했다. M..

AWS 2023.06.14

[Airflow] Task Group

Airflow DAG 중 한 TASK에 for문으로 테이블들을 Redshift에 적재하는 로직이 있었다. 그런데, 운영하다보니 다음과 같은 문제가 생겼다. 한 테이블에서 Error 발생할 경우 해당 테이블 이후 loop는 실행되지 않는 문제 테이블마다 커스텀하게 전처리를 할 수 없는 문제 1번의 경우 exception 처리로도 핸들링이 가능하고, 2번의 경우 if 문으로 어느정도 문제를 해결할 수 있다. 그런데, 그럴 경우 코드가 exception 정도는 괜찮지만 if 가 덕지덕지 붙어 코드가 지저분해지는 문제가 발생한다 ㅠ ( 만약 커스텀할 테이블이 100개라면? ㅗㅜㅑ.. ) 다 무시하고 exception 처리를 하더라도, table 마다 task가 분할되어있지 않아서 멱등성을 보장해주기 어렵고, 실..

카테고리 없음 2023.01.04

[Airflow] DAG dependency - ExternalTaskSensor

겪은 문제점 Quicksight 대시보드 업데이트, 통계 데이터 마트 테이블 적재는 모든 데이터들이 데이터웨어하우스에 적재된 이후에 실행이되어야함 DB 테이블 적재 DAG와 LOG 적재 DAG가 분리되어있음 두 DAG를 합친다?=> 추후 병렬로 처리할 DB DAG 때문에 상당히 복잡해지는 문제점 발생 ㅠ 해결책 해결책은 DAG 끼리 Dependency를 적용하는 것으로 크게 세가지가 방법이 존재한다. 1. ExternalTaskSensor 하위 DAG에서 상위 DAG를 호출 2. TriggerDagRunOperator 상위 DAG에서 하위 DAG를 호출 3. Airflow API REST API 날려서 다른 DAG를 호출 여기서, 나는 ExternalTaskSensor을 채택하게 되었는데, 채택 이유는 ..

카테고리 없음 2022.09.19

[Docker] 이미지 캐시, 레이어 (image layer)

이미지 캐시 ( image cache ) 이미지를 빌드할 때마다 도커는 모든 명령 결과를 캐시 레이어 아키텍쳐 : 이전에 build 했던 Dockerfile을 rebuild할 때 이전 실행과 대비하여 새파일 및 수정 내역이 없으면 이전 빌드때 실행했던 캐시를 그대로 사용 Layer Dockerfile에서 모든 명령 FROM .. WORKDIR ... COPY등은 각각 하나의 레이어로, FROM 레이어를 맨 밑으로 위로 층층이 레이어를 쌓는다. 그리고 이런 레이어들을 층층마다 캐시한다. FROM => Layer 1 WORKDIR /app => Layer 2 COPY . /app => Layer 3 RUN npm install => Layer 4 EXPOSE 80 => Layer 5 CMD ["node", ..

Docker 2022.05.12

[Docker] image 생성 및 컨테이너 실행

Build image Using Dockerfile docker build . docker build : dockerfile을 기반으로 새 커스텀 이미지를 빌드하도록 도커에게 지시 : . 일 경우는 터미널 실행 경로와 dockerfile이 같은 폴더에 있음을 나타냄 image 는 읽기전용 스냅샷이다. image 를 한번 빌드한 이후 소스 코드를 변경하여도 이전 build할 시점의 코드가 반영됨. Starting Container 마지막 떨어진 image id를 사용하여 컨테이너 실행 docker run Expose Port 그런데 Dockerfile에 EXPOSE 80으로 80 번 port를 노출하였음에도 불구하고, localhost 80번으로 들어가면 아무것도 표시가 되지 않는다. docker ps로 ..

Docker 2022.05.02