학습 주제
- 데이터 웨어하우스와 데이터 레이크와 ETL / ELT
- 데이터 웨어하우스 옵션들
- 실리콘밸리 회사들의 데이터 스택 트렌드
- 데이터 파이프라인이란?
- 데이터 파이프라인을 만들 때 고려할 점
- 간단한 ETL 작성하기
주요 학습 내용
- 데이터 웨어하우스 옵션별 장단점
- 데이터 웨어하우스는 기본적으로 클라우드가 대세
- AWS의 Redshift, 구글 클라우드의 BigQuery, Snowflake
- Redshift는 고정비용 옵션이며 BigQuery와 Snowflake는 가변비용 - 데이터가 작다면 굳이 빅데이터 기반 데이터베이스를 사용할 필요가 없다.
- 오픈소스 기반 (Presto, Hive)을 사용하는 경우도 클라우드 버전 존재
- 크게 고정비용 옵션과 가변비용 옵션이 존재, 후자가 좀더 확장 가능한 옵션
- 데이터가 커져도 문제가 없는 확장가능성(Scalable)과 적정한 비용이 중요
- 데이터 레이크
- 구조와 데이터 + 비구조화 데이터(로그 파일)
- 보존 기한이 없는 모든 데이터를 원래 형태대로 보존하는 스토리지에 가깝다.
- 보통은 데이터 웨어하우스보다 몇 배는 더 크고 더 경제적인 스토리지
- 보통 클라우드 스토리지가 된다.
- AWS 라면 S3가 대표적인 데이터 레이크라 볼 수 있다. - 데이터 레이크가 있는 환경에서 ETL과 ELT
- 데이터 레이크와 데이터 웨어하우스 바깥에서 안으로 데이터를 가져오는 것 : ETL
- 데이터 레이크와 데이터 웨어하우스 안에 있는 데이터를 처리하는 것 : ELT
- ETL(Extract, Transform, Load) -> ELT
- ETL의 수는 회사의 성장에 따라 쉽게 100+ 개 이상으로 발전한다.
- 중요한 데이터를 다루는 ETL이 실패했을 경우 이를 빨리 고쳐서 다시 실행하는 것이 중요 - 이를 적절하게 스케줄하고 관리하는 것이 중요해지며 그래서 ETL 스케줄러 혹은 프레임웍이 필요하다
- Ariflow가 대표적 프레임워크 - 데이터 요약을 위한 ETL도 필요하다 -> ELT 라고 부른다.
- 앞에서 설명한 ETL은 다양한 데이터 소스에 있는 데이터를 읽어오는 일은 수행한다.
- 이를 모두 이해하면서 조인 후 사용하는 것은 데이터가 다양해지고 커지면서 불가능에 가깝다.
- 주기적으로 요약 데이터를 만들어 사용하는 것이 더 효율적이다. ex) 고객 매출 요약 테이블 , ...
- ETL의 수는 회사의 성장에 따라 쉽게 100+ 개 이상으로 발전한다.
- Airflow (ETL 스케줄러) 소개
- ETL 관리 및 운영 프레임웍의 필요성
- 다수의 ETL이 존재할 경우 이를 스케줄해주고 이들간의 의존관계를 정의 해주는 기능이 필요하다.
- 특정 ETL이 실패할 경우 이에 관한 에러 메세지를 받고 재실행해주는 기능도 중요하다(Backfill) - 가장 많이 사용되는 프레임웍 = Airflow
- 오픈소스 프로젝트로 파이썬 3 기반, 에어비앤비, 우버, 리프트, 쿠팡등에서 사용한다.
- AWS와 구글클라우드와 Azure에서도 지원 - ETL을 DAG라 부르며 웹 인터페이스를 통한 관리 기능을 제공
- 스케줄러, 웹서버, 워커로 구성
- ETL 관리 및 운영 프레임웍의 필요성
- ELT
- ETL : 데이터를 데이터 웨어하우스 외부에서 내부로 가져오는 프로세스
- 보통 데이터 엔지니어가 수행 - ELT : 데이터 웨어 하우스 내부 데이터를 조작해서 새로운 데이터를 만드는 프로세스
- 전용기술들이 있으며 dbt가 가장 유명하다 : Analyics Engineering
- 데이터분석가가 수행
- 데이터 레이크를 쓰기도 한다. - 데이터 레이크에서 데이터 웨어하우스 넘어가는 부분에서 빅데이터 처리 기술이 필요해진다.(Spark 등)
- ETL : 데이터를 데이터 웨어하우스 외부에서 내부로 가져오는 프로세스
- 빅데이터 처리 프레임웍
- 분산 환경 기반(1대 혹은 그 이상의 서버로 구성)
- 분산 파일 시스템과 분산 컴퓨팅 시스템이 필요 - Fault Tolerance
- 소수의 서버가 고장나도 동작해야한다. - 확장이 용이해야한다.
- Scale Out이 되어야한다.
- 용량을 증대하기 위해서 서버 추가
- 분산 환경 기반(1대 혹은 그 이상의 서버로 구성)
- 대표적인 빅데이터 프로세싱 시스템
- 1세대 : 하둡기반의 Mapreduce, Hive / Presto
- 2세대 : Spark (SQL, DataFrame, Streaming, ML, Graph)
- AWS Redshift
- 2012년에 시작된 AWS기반의 데이터웨어하우스, PB 스케일 데이터 분산 처리 가능하다.
- CSV, JSON, Avro, Parquet 등과 같은 다양한 데이터 포맷을 지원한다.
- AWS 내의 다른 서비스들과 연동이 쉽다.
- 배치 데이터 중심이지만 실시간 데이터 처리를 지원한다.
- 웹 콘솔 이외에도 API를 통한 관리 / 제어 가능하다.
- Snowflake
- 2014년에 클라우드 기반 데이터웨어하우스로 시작되었다 (20년 상장)
- SQL 기반으로 빅데이터 저장, 처리, 분석을 가능하게 해준다.
- CSV, JSON, Avro, Parquet 등과 같은 다양한 데이터 포맷을 지원한다.
- 배치 데이터 중심이지만 실시간 데이터 처리 지원
- 웹 콘솔 이외에도 API를 통한 관리 / 제어 가능하다.
- Google Cloud Bigquery
- 2010년에 시작된 구글 클라우드의 데이터 웨어하우스 서비스
- CSV, JSON, Avro, Parquet 등과 같은 다양한 데이터 포맷을 지원한다.
- 구글 클라우드 내의 다른서비스들과 연동이 쉽다.
- 배치 데이터 중심이지만 실시간 데이터 처리 지원한다.
- 웹 콘솔 이외에도 API를 통한 관리 / 제어 가능하다.
- Apache Hive
- Facebook이 2008년에 시작한 아파치 오픈소스 프로젝트
- 하둡기반으로 동작하는 SQL 기반 데이터 웨어하우스 서비스
- CSV, , JSON, Avro, Parquet 등과 같은 다양한 데이터 포맷을 지원한다.
- 배치 빅데이터 프로세싱 시스템
- 데이터 파티셔닝과 버킷팅과 같은 최적화 작업 지원한다. - 웹 UI와 커멘드라인 UI(CLI라고 부른다) 두 가지를 지원한다.
- 점점 Spark에 의해 밀리는 분위기
- Apache Presto
- HIVE와 거의 동일
- AWS Athena가 바로 Presto를 기반으로 만들어졌다.
- Apache lceberg
- Netflix 가 2018년에 시작한 아파치 오픈소스 프로젝트로 데이터 웨어하우스 기술이 아니다.
- 대용량 SCD (Slowly-Changing Datasets) 데이터를 다룰 수 있는 테이블 포맷
- HDFS, S3, Azure Blob Storage 등의 클라우드 스토리지 지원
- ACID 트랙잭션과 타임여행 (과거 버전으로 롤백과 변경 기록 유지 등등)
- 스키마 진화 (Schema Evolution) 지원을 통한 컬럼 제거와 추가 가능 (테이블 재작성 없이) - 자바와 파이썬 API를 지원
- Spark, Flink, Hive, Hudi 등의 다른 Apache 시스템과 연동 가능
- Apache Spark
- UC 버클리 AMPLab이 2013년에 시작한 아파치 오픈소스 프로젝트
- 빅데이터 처리 관련 종합선물세트
- 다양한 분산처리 시스템 지원
- 다양한 파일시스템과 연동 가능
- CSV, JSON, Avro, ORC, Parquet 등과 같은 다양한 데이터 포맷을 지원
- 다양한 언어 지원: 자바, 파이썬, 스칼라, R
- 데이터 플랫폼의 발전단계
- 초기 단계 : 데이터 웨어하우스 + ETL
- 발전 단계 : 데이터 양 증가
- Spark와 같은 빅데이터 처리시스템 도입
- 데이터 레이크 도입 : 보통 로그 데이터와 같은 대용량 비구조화 데이터 대상
- 데이터 소스 -> 데이터 파이프라인 -> 데이터 웨어하우스
- 데이터 소스 -> 데이터 파이프라인 -> 데이터 레이크
- 데이터 레이크 -> 데이터 파이프라인 -> 데이터 웨어하우스
▪ 이때 Spark/Hadoop 등이 사용됨
▪ Hadoop: Hive/Presto등이 기반됨 - 성숙 단계 : 데이터 활용 증대
- 현업단의 데이터 활용이 가속화
- ELT 단이 더 중요해지면서 dbt 등의 analytics engineering 도입
- 데이터 레이크 to 데이터 레이크, 데이터 레이크 to 데이터 웨어하우스, 데이터 웨어하우스 to 데이터 웨어하우스
- MLOps 등 머신러닝 관련 효율성 증대 노력 증대
- 데이터 파이프라인의 정의
- 데이터를 소스로부터 목적지로 복사하는 작업
- 보통 코딩(파이썬 혹은 스칼라) 혹은 SQL을 통해 이뤄짐
- 대부분의 경우 목적지는 데이터 웨어하우스가 된다. - 데이터 소스의 예시
- 프로덕션 데이터베이스, 로그 파일, API, 실시간 스트림 데이터, …
- 데이터의 예Click stream, call data, ads performance data, transactions, sensor data, … - 데이터 목적지의 예시
- 데이터 웨어하우스, 캐시 시스템 (Redis, Memcache), 프로덕션 데이터베이스, NoSQL, S3, ...
- 데이터를 소스로부터 목적지로 복사하는 작업
- 데이터 파이프라인의 종류 ( 보통 데이터 엔지니어가 수행)
- Raw Data ETL Jobs
- 외부와 내부 데이터 소스에서 데이터를 읽어다가 (많은 경우 API를 통하게 됨)
- 적당한 데이터 포맷 변환 후 (데이터의 크기가 커지면 Spark등이 필요해짐)
- 데이터 웨어하우스 로드
- ELT (Summary/Report) Jobs
- DW(혹은 DL)로부터 데이터를 읽어 다시 DW에 쓰는 ETL
- Raw Data를 읽어서 일종의 리포트 형태나 써머리 형태의 테이블을 다시 만드는 용도
- 특수한 형태로는 AB 테스트 결과를 분석하는 데이터 파이프라인도 존재
테이블의 경우 SQL (CTAS를 통해)만으로 만들고 이는 데이터 분석가가 하는 것이 맞다.
데이터 엔지니어 관점에서는 어떻게 데이터 분석가들이 편하게 할 수 있는 환경을 만들어 주느냐가 관건
= Analytics Engineer (dbt)
- Production Data Jobs
- DW로부터 데이터를 읽어 다른 Storage(많은 경우 프로덕션 환경)로 쓰는 ETL
- 써머리 정보가 프로덕션 환경에서 성능 이유로 필요한 경우
- 혹은 머신러닝 모델에서 필요한 피쳐들을 미리 계산해두는 경우 - 흔한 타켓 스토리지
- Cassandra/HBase/DynamoDB와 같은 NoSQL
- MySQL과 같은 관계형 데이터베이스 (OLTP)
- Redis/Memcache와 같은 캐시
- ElasticSearch와 같은 검색엔진
- DW로부터 데이터를 읽어 다른 Storage(많은 경우 프로덕션 환경)로 쓰는 ETL
- Raw Data ETL Jobs
- 데이터 파이프라인을 만들 때 고려할 점
- 버그
- 데이터 소스상의 이슈 : 동작하지 않거나, 포맷이 바뀜
- 데이터 파이프라인들 간의 의존도에 이해도 부족
- 데이터 파이프라인의 수가 늘어나면 유지보수 비용이 기하급수적으로 늘어난다.
- 데이터 소스간의 의존도가 생기면서 더 복잡해진다.
- 관리해야하는 DW상의 테이블도 늘어난다.
- Best Practices
- 가능하면 데이터가 작을 경우 매번 통채로 복사해서 테이블 만들기 (Full Refresh)
- Incremental update만이 가능하다면, 대상 데이터소스가 갖춰야할 몇가지 조건
- created(데이터 업데이트 관점에서는 불필요)
- modified
- deleted
- 데이터 소스가 API라면 특정 날짜를 기준으로 새로 생성되거나 업데이트된 레코드들을 읽어올 수 있어야함
- 역동성(Idempotency)를 보장하는 것이 중요하다
- 역동성이란?
- 동일한 입력 데이터로 데이터 파이프라인을 다수 실행해도 최종 테이블의 내용이 달라지지 말아야 한다
- 실패한 데이터 파이프라인을 재실행이 쉬어야한다
- 과거 데이터를 다시 채우는 과정(Backfill)이 쉬어야 한다
- Airflow는 backfill에 강점을 가지고 있다.
- 데이터 파이프라인의 입력과 출력을 명확히 하고 문서화 한다
- 비지니스 오너 명시 : 누가 이 데이터를 요청했는지를 기록흐로 남긴다.
- 나중에 데이터 카탈로그로 들어가서 데이터 디스커버리에 사용 가능하다
- 데이터 리니지가 중요해졌다 -> 이해 못할 시 온갖 종류의 사고가 발생
- 주기적으로 쓸모없는 데이터들을 삭제한다
- 데이터 파이프라인 사고시마다 사고 리포트(post-mortem) 쓰기
- 목적은 동일한 혹은 아주 비슷한 사고가 또 발생하는 것을 막기 위함
- 사고 원인(root-cause)을 이해하고 이를 방지하기 위한 액션 아이템들의 실행이 중요해짐
- 기술 부채의 정도를 이야기해주는 바로미터
- 중요 데이터 파이프라인의 입력과 출력을 체크하기
- 아주 간단하게 입력 레코드의 수와 출력 레코드의 수가 몇개인지 체크하는 것부터 시작
- 써머리 테이블을 만들어내고 Primary key가 존재한다면 Primary key uniqueness가 보장되는지 체크
- 중복 레코드 체크
- 1~3번 반복
공부하면서 어려웠던 점
-
반응형
'데이터분석' 카테고리의 다른 글
43. 지표의 이해와 좋은 지표란? (2) | 2024.01.30 |
---|---|
42. Snowflake (1) | 2024.01.29 |
35. 데이터 분석 프로세스 (1) | 2024.01.27 |
34. 회귀분석과 데이터모델링 (1) | 2024.01.27 |
33-(3). seaborn (1) | 2024.01.15 |