엔지니어 블로그
[Spark] Partition 본문
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 |