AI Briefing

카카오, Spark AQE의 Coalescing Post Shuffle Partitions 최적화 사례 공개

·2022.01.18 00:00

핵심 내용

AQE 활성화 시 Shuffle 파티션 수가 10000에서 118로 줄고 Peak Memory가 634.8GB에서 332.0GB로 감소했다.

1 / 6

자세히 보기

카카오 응용분석팀이 Spark 3.0부터 도입된 **Adaptive Query Execution(AQE)**의 핵심 기능인 Coalescing Post Shuffle Partitions를 활용한 최적화 사례를 공개했다. 기존 룰 기반 및 코스트 기반 최적화의 한계를 극복하기 위해 런타임 통계를 기반으로 파티션 수를 동적으로 조절하는 방식이다.

실험 결과 및 성능 개선

spark.sql.shuffle.partitions를 10000으로 설정하고 AQE를 활성화한 실험에서, 세 번의 Shuffle 단계 동안 파티션 수가 각각 5000, 358, 118로 감소했다. 특히 두 번째 HashAggregate 단계에서 Peak Memory가 634.8GB에서 332.0GB로 절반 이상 줄어들며 메모리 효율성이 크게 향상되었다.

주요 설정 및 동작 원리

AQE는 spark.sql.adaptive.advisoryPartitionSizeInBytes(기본값 64MB)에 가깝게 파티션 크기를 조정한다. 단, spark.sql.adaptive.coalescePartitions.parallelismFirst가 기본값 true일 경우 병렬성을 우선시하여 최소 파티션 크기(minPartitionSize, 기본 1MB)를 기준으로 동작한다. Spark 공식 문서에서는 최종 파티션 크기를 Advisory Size에 맞추기 위해 이 값을 false로 설정할 것을 권장한다.

권장 설정

효율적인 AQE 활용을 위해서는 spark.sql.shuffle.partitions를 충분히 큰 값으로 설정한 후 실행하여 실제 Shuffle 파티션 수를 파악하고, 이를 기준으로 재설정하는 것이 좋다. 또한 spark.sql.adaptive.coalescePartitions.initialPartitionNum을 명시적으로 지정하면 초기 파티션 수를 더 정밀하게 제어할 수 있다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.