- 650GB 규모의 Delta Lake 데이터를 S3에 저장하고, 이를 단일 노드 환경에서 Polars, DuckDB, Daft, Spark로 처리한 성능 비교 실험
- 32GB 메모리의 EC2 인스턴스에서 각 엔진이 대용량 데이터를 처리할 수 있는지 검증, 클러스터 기반 Spark 대비 단일 노드의 가능성 탐색
- DuckDB는 16분, Polars는 12분, Daft는 50분, PySpark는 1시간 이상 소요되어, 단일 노드에서도 실질적 처리 가능성 확인
- Polars는 Deletion Vector 미지원, DuckDB만 해당 기능을 지원해 Lake House 호환성에서 차이 존재
- 결과적으로 단일 노드 프레임워크가 저비용 하드웨어에서도 대규모 데이터 처리 가능성을 입증, 분산 컴퓨팅 의존도 재검토 필요성 제기
클러스터 피로와 단일 노드 대안
- SaaS 기반 Lake House 클러스터 운영의 비용과 복잡성이 커지며 ‘클러스터 피로(cluster fatigue)’ 현상 언급
- 과거에는 Pandas 외 대안이 없어 Spark를 사용했으나, DuckDB·Polars·Daft(D.P.D.) 등장으로 단일 노드 처리 가능성 확대
- D.P.D.는 메모리보다 큰(LTM) 데이터셋 처리와 고속 연산이 가능함
- 글은 분산형과 비분산형 두 선택지를 제시하며, “Single Node Rebellion” 개념을 강조
실험 환경 구성
- S3에 Delta Lake 테이블 생성, 약 650GB 데이터를 저장 (1TB 목표였으나 중단)
- EC2 인스턴스(32GB RAM, 16 CPU) 에서 DuckDB, Polars, Daft 실행 후 Spark와 비교
- 데이터는 소셜 미디어 게시물 형태의 모의 데이터로 Python dict를 생성해 Daft DataFrame으로 변환 후 Parquet 파일로 저장
- 이후 Parquet 파일을 Databricks에서 Delta Lake 테이블로 변환, 연·월 단위 파티션 구성
- Delta 로그 제외 시 약 650GB 데이터 확인
메모리 제약과 스트리밍 필요성
- 단일 노드(32GB 메모리)에서 650GB 데이터를 처리해야 하므로 스트리밍 방식 쿼리 실행 필요성 제기
- Polars GitHub 이슈를 인용하며, Iceberg로 스트리밍 쓰기 기능을 요구하는 사례 언급
- Polars·DuckDB 등 신형 프레임워크가 Lake House 포맷을 스트리밍 방식으로 읽고 쓸 수 있는 기본 지원 필요성 강조
각 엔진별 테스트 결과
-
DuckDB
- Deletion Vector 지원 유일
- 650GB 데이터를 32GB 리눅스 머신에서 16분 만에 처리 성공
- 코드 단순하고 결과 파일 정상 생성
-
Polars
- Deletion Vector 미지원으로 Lake House 환경에서 제약 존재
- Lazy API(Scan/Sink) 사용 필요
- 12분 만에 처리 완료, DuckDB보다 빠름
-
Daft
- Rust 기반, 사용감 우수하나 처리 시간 50분으로 가장 느림
- Iceberg 관련 작업에서 안정적 동작 확인
-
PySpark (Databricks Single Node)
- 1시간 이상 소요, 튜닝 없이 실행
- 단일 노드 엔진 대비 효율 낮음
- 실험 목적은 속도보다 단일 노드의 실현 가능성 검증
결론 및 시사점
- 단일 노드 프레임워크가 대용량 Lake House 데이터 처리 가능함을 실험으로 입증
- 저비용 하드웨어에서도 합리적 실행 시간과 간단한 코드 구조 확보
- DuckDB·Polars·Daft 모두 분산 클러스터 없이도 실용적 성능 제공
- 분산 컴퓨팅만이 유일한 해법이 아님을 보여주며, 현대 Lake House 아키텍처의 재고 필요성 제시
- “Single Node Rebellion” 개념을 통해 비용 효율적 데이터 엔지니어링 접근 가능성 부각