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 |