[Spark] partitioning & shuffling

ehwnghks·2022년 9월 1일
0

spark

목록 보기
5/6

Shuffling

그룹핑시 데이터를 한 노드에서 다른노드로 옮길때 발생

성능을 많이 저하시킴 여러 네트워크 연산을 일으킴

groupBykey() 할때도 발생한다.

여러 노드에서 데이터를 주고 받게됨(네트워크연산)

shuffle을 일으킬 수 있는 작업들

  • join, leftOuterJoin, rightOuterJoin
  • GroupByKey
  • ReduceByKey
  • CombineByKey
  • Distinct
  • Intersection
  • Repartition
  • Coalesce

Shuffle은 이럴때 발생한다.

  • 결과로 나오는 RDD가 원본 RDD의 다른 요소를 참조하거나 다른 RDD를 참조할 때

partition을 이용하여 shuffle 최소화 —> 성능 최적화

Shuffle을 최소화 하려면

  • 미리 파티션을 만들어 두고 캐싱 후 reduceByKey 실행
  • 미리 파티션을 만들어 두고 캐싱 후 join 실행

위 방법 둘다 파티션과 캐싱을 조합해서 최대한 로컬환경(각각의 파티션)에서 연산이 실행되도록 하는 방식

partition의 목적

데이터를 최대한 균일하게 퍼트리고 검색 성능을 향상 시키는것( parallel RDD )

partition의 특징

RDD는 쪼개져서 여러 파티션에 저장됨

하나의 파티션은 하나의 노드(서버)에

하나의 서버는 여러 파티션을 가질 수 있음

파티션의 크기와 배치는 자유롭게 설정 가능하며 성능에 큰 영향을 미침

Key-Value RDD를 사용 할때만 의미가 있다

profile
반갑습니다.

0개의 댓글