데이터 파이프라인을 직접 구축해보는 프로젝트입니다.
날마다 갱신되는 웹 서버 액세스 로그를 가져오는 상황을 가정하고 데이터 파이프라인을 작성합니다.
회사에서 웹 서버를 운영 중이고 액세스 로그를 매일 다른 파일에 저장하게끔 관리한다고 가정합니다.
주요 하위 프로젝트
- Airflow를 통한 스케줄링
- 데이터 레이크 AWS S3 (완료)
- 데이터웨어하우스 AWS Redshift
- ETL 작업은 Spark
데이터 소스는 직접 제작한 로그 생성기 파이썬 라이브러리를 통해 제작합니다.
{ip_address} - - {date} "{method} {path}" {status} {size} "{user_agent}"
...
데이터는 위와 같은 형태로 생성됩니다. 한 줄에 요청이 하나입니다.
본 프로젝트는 하루에 한 번 쌓여 있는 하루치 로그를 일괄로 처리하여 DW에 적재하는 상황을 가정하기 때문에 하루치 로그를 생성하여 하나의 파일로 저장합니다.
매번 쌓이는 로그를 실시간으로 처리하는 것이 아닌 데이터를 일괄 처리(batch processing)하는 작업이기 때문에 배치 작업에 적합한 워크플로우인 Airflow를 선택하였습니다.
그리하여 Airflow를 통해 데이터 파이프라인의 워크플로우를 관리합니다. Airflow의 메타데이터 DB로는 PostgreSQL을 사용합니다. 메시지 큐로 Redis를 두어 분산 처리가 가능한 CeleryExecutor를 사용합니다. 그러나 실제 worker는 도커 컨테이너 하나 뿐입니다.
AWS S3에 생성한 로우 데이터를 적재합니다.
ETL 과정의 코드와 DW 설계는 ETL_DW 프로젝트에 기반합니다.
테이블 설계에 대한 자세한 내용은 해당 디렉토리 참조
S3에서 로우 데이터를 가져와 처리 후 데이터 웨어하우스(AWS Redshift)에 적재합니다.
Redshift는 PostgreSQL 기반의 데이터웨어하우스 시스템입니다.
일반적인 RDBMS와 다르게 열지향 MPP 데이터베이스로 데이터웨어하우스를 구성하는데 장점을 가지기 때문에 하위 프로젝트에서 쓰던 Postgre에서 Redshift로 데이터 웨어하우스를 변경하였습니다.
SQL 쿼리가 상당 부분 호환되며 더 대용량의 데이터를 처리하기에 적합하고 컬럼 지향이기 때문에 컬럼 자체의 카디널리티가 작은 DW에서 성능 향상을 기대할 수 있습니다.
참고하는 모든 유용한 링크들을 모아놓습니다.
타다 (TADA) 서비스의 데이터 웨어하우스 : 태초부터 현재까지
팩트 테이블 - 빅데이터를 지탱하는 기술 p.80, p.119
SQLite vs MySQL vs PostgreSql: 관계형 DB 시스템의 비교
Getting started with AWS Redshift
타다 (TADA) 서비스의 데이터 웨어하우스 : 태초부터 현재까지
데이터웨어 하우스의 차원 데이터 모델 – 예제가 포함 된 자습서
팩트 테이블 - 빅데이터를 지탱하는 기술 p.80, p.119
데이터 웨어하우스 모델링 기본 개념 잡기 1편(Fact, Dimension 테이블)
Apache 공식 문서 Running Airflow in Docker
Data Pipeline with Apache Airflow
시스템 간 데이터 이동하기 - Data Pipelines with Apache Airflow p.155