이전에 repartition
과 coalesce
를 비교해본 포스트가 있었다.
그 당시만 해도 성능적으로는 coalesce()
가 무조건적으로 좋을 거라고 생각했었는데, 최근 그 반대의 경우를 만나서 포스팅한다.
repartition()
에서는 shuffle을 수행하기 때문에 coalesce()
가 성능적으로 더 좋다고 언급했었는데, 언제나 그런 것은 아니다.
shuffle을 수행하게 되면 executor들이 쌓아두었던 메모리를 refresh하게 되는데, spill이 발생할 정도로 메모리를 많이 사용하고 있었다면 shuffle을 통해 메모리를 한 번 비워주는 것이 성능적으로 도움이 될 수 있다.
물론 데이터에 따라 결과는 달라질 수 있지만, 무조건적으로 coalesce()
가 repartition()
보다 성능이 좋지 않은 경우가 생길 수 있다는 점을 강조하고 싶어서 추가로 포스팅을 하게 되었다.
역시 튜닝은 어렵다..
'Spark' 카테고리의 다른 글
Chapter 3. DataFrame, Dataset과 Spark SQL (0) | 2022.02.28 |
---|---|
Chapter 2. 스파크는 어떻게 동작하는가? (0) | 2022.01.31 |
Chapter 1. 고성능 처리를 위한 스파크 시작하기 (0) | 2022.01.31 |
[DATA+AI SUMMIT 2021] Monitor Apache Spark 3 on Kubernetes using Metrics and Plugins 요약 (0) | 2021.12.31 |
[Spark] Spark 3.x Structured Streaming의 checkpoint는 k8s환경에서 어떻게 관리해야할까? (0) | 2021.12.31 |