spark에서 coalesce와 repartition의 차이 기본개념

2021-09-01

.

Data_Engineering_TIL(20210901)

[참고자료]

“[Spark] Shuffle 이란?” 블로그글

URL : https://wooono.tistory.com/48

“스파크 완벽 가이드” 책

** 한빛미디어, 빌 체임버스 & 마테이 자하리아 지음, 우성환 & 이영호 & 강재원 옮김

[학습내용]

먼저 Spark shuffle에 대해 이해하고 있어야 한다.

Spark Shuffle 이란 Spark에서 데이터를 재분배하는 방법이며, 효율적인 Spark Application 을 개발하기 위해 중요한 개념이다.

Shuffle 을 이해하기 위해서는, reduceByKey 의 동작방식을 알아야 한다. reduceByKey 는 동일한 Key 를 가지고 있는, 모든 record 값을 취합하는 작업이다.

예를 들어서 (A, 1), (A, 2), (A, 3)(A, 6) 로 취합하는 작업을 말한다.

하지만, Spark 의 데이터 분산처리는 파티션 단위로 진행되기 때문에,동일한 Key 의 모든 record 값을 취합하기 위해선, 동일한 Key 를 가진 튜플 데이터가 전부 같은 파티션에 있어야한다.

따라서, 모든 튜플 데이터가 여러 클러스터에 분산 저장되어 있을 때, 동일한 Key 를 가진 튜플 데이터를 동일한 파티션에 두기 위해, 데이터의 위치를 재조정하는 방법이 Shuffle 이다.

그러면 coalesce와 repartitiond의 차이는 어떻게 되는가

1) coalesce

파티션을 재분배할때 발생하는 데이터 셔플을 방지하기 위해 동일한 슬레이브 노드에 존재하는 파티션을 합치는 메서드임.

coalesce 메서드를 사용해 데이터 shuffling 없이 하나의 파티션으로 합칠 수 있음.

2) repartition

repartition을 사용해서 파티션 수를 늘리거나 줄일 수 있지만, 처리시 노드간의 shuffle이 발생할 수 있음.

파티션 수를 늘리면 맵 타입이나 필터 타입의 연산을 수행할 때 병렬처리 수준을 높일 수 있음.