Spark 잡 최적화로 CDC 파이프라인 성능 UP!
by DD
10개월 전
조회수 8
Spark를 활용한 CDC 시스템에서 MySQL, Iceberg 등 다양한 데이터소스의 정합성 검사 수행
Fullscan, Keybased, Limit 등 스캔 모드별 최적화 전략과 JDBC, Iceberg API 활용
캐싱, Full Outer Join 등 최적화 기법을 통해 대용량 데이터 처리 성능 및 안정성 확보
MySQL 데이터 스캔 최적화: Fullscan, Keybased, Limit
MySQL 데이터 스캔 시 Fullscan은 `numPartitions`와 워커 수 간의 밸런스를 맞춰야 한다. Keybased는 `predicates` 옵션을 활용하여 PK 기반 부분 검사를 수행하며, coalesce를 통해 파티션 수를 조정한다. 따라서 JDBC 커넥션 부하를 줄이고, 데이터 처리 속도를 향상시킨다.
Iceberg 테이블 스캔 최적화: Fullscan, Keybased, Limit
Iceberg는 RDB와 달리 PK 기반 인덱스를 지원하지 않아, Fullscan 후 필터링 방식으로 동작한다. Keybased는 풀스캔 후 Join을 통해, Limit은 `orderBy`와 `limit`을 활용한다. 따라서 Iceberg의 특성을 고려하여, 데이터 스캔 방식을 선택하고, 성능 최적화를 수행한다.
Spark 잡 성능 개선을 위한 핵심 기법
동일한 DataFrame 반복 사용 시 cache()를 통해 중복 쿼리 실행을 방지한다. Full Outer Join을 활용하여 다양한 케이스를 처리하고, 로컬 모드에서는 `spark.driver.memory`를 조정한다. 따라서 메모리 사용량을 최적화하고, 안정적인 데이터 처리를 보장한다.