본문 바로가기
Big Data/Apache Spark

[Spark] Spark Partitioning

by seaweed_one 2022. 12. 11.
728x90

Spark의 Partitioning이란?

스파크의 각 RDD는 서로 다른 노드들에서 연산이 가능하도록 여러 개의 Partition으로 나눌 수 있습니다.

 

 

Partitioning 사용 이유 

왜 파티셔닝을 진행하는 걸까요?

그 이유는 파티션의 크기와 수를 조정하고 배치 방법을 설정하여 RDD의 구조를 제어가 가능하기 때문입니다.

RDD의 데이터를 여러 파티션에 나누게 되는데 모든 Pair RDD에 대해 파티셔닝이 가능합니다.

여기서 PairRDD 란 키, 값 쌍을 가지고 있는 RDD를 의미하며 PairRDD도 일반 RDD에 지원하는 함수를 사용할 수 있습니다.

파티셔닝은 RDD가 한 번만 스캐닝된다면 의미가 없으며 join 같은 키 중심의 연산에서 데이터가 여러 번 재활용될 때 의미가 있습니다.

 

Partitioning 방법

spark는 이미 각 메소드에서 어떤 파티셔닝 방법을 써야 할지 알고 parent RDD로부터 파티셔닝 기법을 상속받습니다.

하지만 사용자가 임의로 파티션 설정을 원한다면 partition by 메서드를 사용하여 설정이 가능합니다.

주의할 점은 partitionBy()를 설정 후 persist()를 호출로 영속화를 진행해주어야 하는데요.

영속화를 해주지 않으면 RDD가 Lazy하게 실행될 때마다 partitionBy에 의한 연산도 매번 실행될 것이기 때문에 연산 시 아무런 이득을 얻을 수 없습니다.

 

파티셔닝의 방법에는 hash 와 range 가 존재합니다.

  • Range Partitioning
    • 특정 범위 내의 키들을 동일한 노드로 모음.
    • 파티션의 크기를 지정하면 그 크기 내에서 최대한 골고루 분배
  • Hash Partitioning
    • 동일 해시 값을 가지는 키들을 동일한 노드로 모음
    • 예를 들어 RDD하나가 100개의 파티션으로 나눠지도록 했다면 키 값을 100으로 나눈 나머지가 동일 해시 값을 갖는 키들을 동일 노드로
728x90

'Big Data > Apache Spark' 카테고리의 다른 글

[Spark] Spark Cluster Manager  (2) 2022.12.16
[Spark] Spark Deploy Mode  (0) 2022.12.16
[Spark] Spark Job  (0) 2022.12.15
[Spark] Spark Evalution  (0) 2022.12.13
[Spark] Spark 란?  (0) 2022.12.11