엔지니어 블로그

[Spark] Partition 본문

Spark

[Spark] Partition

안기용 2025. 3. 26. 20:35

Partition

Spark는 작업할 때 RDD 혹은 DataFrame,DataSet을 사용하게 된다. 내부에서는 Partition이라는 최소 단위로 구성되어있다. 이 Partition 때문에 서로 다른 노드에서 분산 처리가 가능한 것이다.

Partition은 리소스와도 깊은 연관이 있다. 우선 Spark에서 최소 연산 단위를 taks라고 하는데, 1 task 는 1 Partition을 처리한다. 또 1 Task는 1 Core가 처리하게 된다. 즉 1 task = 1 core = 1 partition 이라고 보면 된다. 

이처럼 Partition의 수는 작업에 할당 할 core의 수를 결정한다. 또 개별 Partition의 크기는 core당 필요한 메모리 사이즈를 결정하게 된다. Partition의 수가 적다면 사이즈가 커져 개별 Partition 당 처리에 필요한 메모리 사이즈가 커지게 되고, 반대라면 처리할 Partition의 수가 많아져 core수가 많이 필요하지만 필요 메모리 사이즈는 줄어든다. 

Partition의 종류는 3가지가 있다. 먼저 Input Partition이다. 처음 파일을 읽을 때 생성하는 Partition으로 기본값은 128Mb다. Output Partition은 Spark가 파일을 저장할 때 생성하는 Partition이다. (HDFS기준) HDFS의 블록 사이즈에 맞게 설정하면 좋다. 마지막으로 Shuffle Partition이다. Shuffle이 일어날 때 필요한 Partition이다. Shuffle은 group by, join 등의 연산을 사용할 때 발생하는데, 데이터가 다른 파티션으로 이동해야할 때 발생하므로 Partition수에 따라 성능이 좌우된다. 

Shuffle Partition의 경우 Core의 수와 동일하게 설정할 것이 권장된다. 하지만 Partition의 크기에 적합하게 설정하는 것이 더 좋다. Partition이 크고 메모리가 부족하다면 Shuffle spill이 발생하게 된다. 발생시 메모리를 늘리면 해결이 되지만 다수가 사용하는 클러스터의 경우 사용성이 떨어지는 결과를 불러온다. 따라서 Partition의 크기 조절을 우선적으로 한 후 리소스를 조절하는 것이 더 좋은 선택이다.

'Spark' 카테고리의 다른 글

[Spark] Spark 기본 동작  (0) 2025.03.25
Parquet란?  (0) 2025.03.21
[Spark] Spark Architecture  (0) 2025.02.25
[Spark] Spark 개요  (0) 2025.02.25