Accelerating Apache Spark Queries (and Iceberg Rust Development) with Apache DataFusion Comet
Author: Apache Iceberg / DataFusion 커뮤니티 | Source: iceberg.apache.org/blog | Published: 2026-07-15
한 줄 요약
Comet이 Iceberg Java의 플래닝을 그대로 두고 실행만 Rust로 바꾸는 구조 덕분에, 같은 통합이 Iceberg Java의 1만 개 Spark 테스트를 Iceberg Rust를 위한 differential testing harness로 바꿔놓았다.
핵심 주장/내용
- Comet의 동작 방식: Spark가 쿼리를 파싱·플래닝·최적화한 뒤 Comet의 JVM 코드가 마지막 옵티마이저 룰로 실행되어 Spark 플랜 노드를 Comet 플랜 노드로 변환한다. 이 노드들은 DataFusion의 Rust 엔진에서 columnar Arrow 데이터 위로 실행된다
- 두 Iceberg 라이브러리를 함께 쓰는 방식: 플래닝은 여전히 Iceberg Java가 담당(테이블 메타데이터를 검사해
FileScanTask객체 구성). 가속이 가능한 이유는 Iceberg Rust도 자기FileScanTask를 갖고 있기 때문 — Comet은 이것을 두 라이브러리 사이의 공통 추상으로 삼아, Java가 만든 task를 Rust에 넘기고 Rust가 파일을 읽어 Arrow 배치로 만든다 - 가속의 경계: 읽기만 가속하고 쓰기는 여전히 Iceberg Java. 읽기 중에서도 전부는 아니어서, table format v3 이상을 만나면 Iceberg Java 경로로 graceful fallback한다. 그래서 Comet으로 Iceberg Java 테스트를 돌리면 많은 테스트가 조용히 Java 경로를 타므로 통과했다고 다 가속된 read는 아니다 — 바로 그 fallback이 Iceberg Rust 개선을 가능하게 한다
- 개발 가속으로의 전환 — 같은 분할을 재사용: Iceberg Java + Spark가 플래닝하고 신뢰할 수 있는 결과를 내므로 oracle, Comet + Iceberg Rust가 네이티브 실행하므로 system under test. 나란히 돌리는 것이 곧 differential testing — Comet이 네이티브로 실행한 쿼리는 Spark 단독 결과와 정확히 같아야 하고, 차이는 Iceberg Rust나 Comet의 변환 로직 gap을 가리킨다
- 개발 루프: fallback을 완화 → 해당 기능을 다루는 테스트 실행 → Java 플래너가 뭘 만드는지 검사 → Iceberg Rust에 빠진 것 구현 → Comet에 플랜 변환 로직 배선 → 재실행. Iceberg Java의 1만 개 Spark 테스트를 상대로 하는 평범한 TDD가 된다
- 초기 반복은 노이즈가 심하다 — 실행 한 번에 거대한 로그에 묻힌 수백 개 실패가 나온다. 기여자들은 AI 어시스턴트로 테스트 출력을 소화해 근본 원인별로 실패를 분류해 가장 큰 gap부터 잡는다. 코드 자체의 추론은 사람이 하고, AI는 빨간 벽을 우선순위가 매겨진 백로그로 바꿔줄 뿐
- 양방향으로 작동한다: 보통 Iceberg Java가 oracle이지만, 때로는 Iceberg Rust의 동작이 올바른 결과의 기준이 된다. rewrite table action 후 manifest delete file size 버그를 Iceberg Java에서 잡고 Rust 대비로 수정을 검증한 사례
- 기여가 Comet 전용이 아니다 — Iceberg Rust upstream에 랜딩되어 Iceberg Java와의 기능 격차를 메우므로 그 라이브러리 위의 모든 시스템이 혜택을 본다. Iceberg Rust 개발자에게는 Java 테스트를 손으로 미러링하는 대신 구현하고 검증할 실제 프로덕션 검증된 동작의 스트림이 생긴다
주요 수치 / 사실
- AWS Data on EKS 팀의 TPC-DS 3TB (Iceberg) 벤치마크: Comet이 약 40% 빠르게 완료 (2,803.80s vs 4,665.47s). 103개 쿼리 중 102개 가속, 단 1개만 회귀
- Iceberg Java 리포지토리는 Iceberg 1.11 + Spark 4.1 기준 Spark 구동 correctness 테스트 약 10,000개 보유. C++, Go, Python, Rust 구현체 중 어느 것도 Java 테스트를 자기 코드에 직접 돌릴 수 없었다
- Comet 기여자들이 Iceberg Rust에 40개 이상의 PR 제출 (버그 수정, 신규 기능, 성능 최적화)
- Comet은 Apple이 2024년 Apache DataFusion 하위 프로젝트로 기증. DataFusion(조인·집계 연산자), Arrow-rs(인메모리 포맷 + Parquet 리더), Iceberg Java·Rust 위에 구축
- 남은 v3 gap: 새 데이터 타입(variant, geometry, geography), row lineage, 기본 컬럼 값, 테이블 암호화. write path도 같은 모델로 부트스트랩 가능한 기회
- Comet은 Iceberg Rust의 공식 CI 체크는 아니지만, Iceberg Rust 커뮤니티가 신규 기능 검증 시 Comet을 통과시켜 보길 권장한다
관련 위키
- Columnar Execution Engine
- Replay Testing
- Catalog-Managed Tables
- Spark at Scale
- Data Pipeline Testing
Source: 원문 보기