728x90
지금까지의 데이터 파이프라인 경험은 배치(Batch) 기반의 ETL이었다. Airflow, Hive, Spark 등을 활용해 정해진 주기로 데이터를 처리하는 방식에 익숙했다.상대적으로 실시간 데이터 처리는 깊게 다뤄볼 기회가 없었다. 하지만 데이터 엔지니어의 역량은 배치 처리뿐 아니라 스트리밍 처리도 필수적이고, 요즘은 실시간 처리가 중요하다고 느껴서 관련 스택을 제대로 공부해야겠다는 생각이 들었다.Kafka, 스트리밍 엔진, 스토리지 및 OLAP 엔진 등에 대해서도 공부한 내용들도 포스팅해야하지만, 로컬에서 간단하게 올려봐야겠다 생각되어 Claude & Gemini CLI 두 시니어 엔지니어분들와 함께 간단한 유즈케이스로 로컬에서 (다행히) 돌아가는 스트리밍 파이프라인을 만들어 금번 포스팅에는 해당 내..
대용량 데이터 처리 과정에서 Spark BufferHolder 메모리 초과 이슈를 잡고 있었는데, 몇시간 전에 다행히 해결할 수 있었다. 금번 포스팅에선 특정 Time Slot에서 반복적으로 발생했던 Spark BufferHolder 메모리 초과 문제 상황과 해결 과정을 공유하고자 한다. 일반적인 Spark 튜닝으로는 해결할 수 없었고, udf & explode() 기반 처리를 RDD 스트리밍 처리 구조로 변경하여 문제를 해결할 수 있었다. 해당 변경을 통해 수백 ~ 수천만건 데이터도 처리할 수 있는 구조로 개선하여 Data Engineering의 성취를 느낄 수 있었다. 향후 전체 프로세스를 오픈하여 실제 검증을 진행할 예정이다. 환경spark 3.4.1pysparkhive(json) -> iceber..
최근 백만건 단위의 데이터를 처리하는 상황을 맞이하면서, 단순한 조건이 포함된 조회부터 성능이 안나오며, 분석 쿼리 조회 시에는 몇분 이상 기다려야하는 상황이 잦았다.단순히 데이터의 양이 많아져서 발생하는 문제일 수 있지만, 빅 데이터 처리 솔루션들이 천만건 데이터 수준에 지연이 발생하는 건 기술의 문제가 아니라 유즈 케이스가 잘못된 경우 것이라 생각된다. 해당 포스팅에선 기존 환경의 문제점을 확인하며 개선할 수 있는지에 대해 확인해보려 한다.기존 환경AWS EMR 환경에서 Hive Metastore를 중심으로 S3에 저장된 데이터를 Hive, Trino, Spark에서 조회/처리Raw Layer 데이터는 모두 `json.gz` 형식으로 저장되어 있으며, JSON Serde를 활용한 External Ta..
해당 포스팅에선, 데이터 수집 단일 프로세스의 한계점을 확인하고 큐와 상태를 도입해 병렬 처리 및 안정성을 확보하는 과정을 작성하고자 한다.단일 수집 프로세스 예시 및 한계데이터 수집 과정에서 여러 단계를 거쳐야 할 때, 각 단계에서 다음 단계 정보를 얻어가는 방식은 가장 직관적인 방법이다.예를 들어, 블로그의 모든 포스팅의 내용을 수집하는 상황이라면 수집 플로우를 다음 처럼 표현할 수 있다.메인 페이지목록 페이지포스팅이 과정을 단일 스크립트로 표현하게 된다면, 플로우의 Input은 블로그의 메인 페이지가 되고, Output은 모든 포스팅이 된다.가장 직관적이고 간단한 플로우이지만, 이를 정기적으로 운영하는 관점에선 크게 3가지의 문제점이 존재한다.1. 종료 시점을 예측할 수 없다. - 블로그마다 페..
# 서론최근 개발한 데이터 파이프라인을 운영 환경에 적용하기 전 요구사항을 반영하는 과정에서, Airflow 스케줄링을 걸 때 catchup 값을 잘못 설정해서, 과거부터 현재 시점 사이에서 실행되지 않았던 DAG가 모두 실행되는 상황이 발생했다.catchup 설정 자체는 알고 있었지만, 버전업이 되면서 바뀐 설정 방법을 사용하지 않아 DAG Backfill이 발생해 특정 파티션 데이터를 Hive 테이블에 중복으로 인입시켰다.해당 Hive 테이블을 복원하면서 사용한 방법과 Airflow의 Backfiil 발생 원인을 정리하여 앞으로 이런 일을 반복하지 않도록 반성의 시간을 갖고 혹시 비슷한 이슈를 겪으신 분들에게 도움이 되고자 이를 공유한다.# 상황최근 구축했던 Data Pipeline를 최종 운영하기 ..
# 목적RDB 테이블에 담긴 데이터 중 특정 칼럼의 중복 제거 후 전체 칼럼을 조회하는 방법을 공유하고자 한다. 엑셀로는 간단하게 "중복된 항목 제거"라는 기능을 사용할 수 있는데, 데이터가 너무 많아 엑셀에서 편집이 불가능한 경우에는 SQL에서 중복 제거를 수행해야한다.SQL 이를 수행하려고 하니 DISTINCT로는 할 수 없었고, 조금 복잡한 로직을 타야했다. DISTINCT로 해결하는 방법은 이번 포스팅에 작성되어있지 않다. 해당 방식에 대해서 아래의 포스팅을 참고했다. [ SQL ] 중복 제거하고 조회하기중복을 제거하고 조회(SELETE)하는 방법은 다양하다. 그 중에서 알고 있는 3가지 방법에 대해서 적어볼려고 한다. 사용한 DBMS : ORACLE SQL 클라이언트 : DBeaver 빠른 이해..