본문 바로가기
대학원 공부/computer science

Spark : Partitioning

by 월곡동로봇팔 2019. 12. 18.

용어정리

•1) Partition : 데이터를 나누는 단위

•2) Dependency : RDD의 파티션이 어디에서 파생되었는 지를 기술하는 모델

•3) Function : 부모 RDD에서 어떻게 파생되었는지를 계산 하는 함수

•4) Metadata : 데이터 위치, 파티션 정보 보유

 


Partitioning

Background

분산컴퓨팅에서는 communication은 매우 expensive하다고 볼 수 있다. 따라서 network traffic을 낮추는 것이 성능 개선하는 방법이다.

Purpose

Spark는 RDD의 partitioning을 통해서 communication을 최대한 줄이려고 한다.

partitioning은 join 같은 key 지향적인 연산들에서는 dataset을 재사용하는데, 이 때 유리하다.

partitioning

위의 그림과 같이, userData가 있다고 할 때, partitioning을 미리 안한다면, joined, events를 차례로 진행해야 하기 때문에 시간이 오래걸리지만, partitioning을 미리 해서 joined 해놓는다면, 설정한 시간마다 미리 join을 해서 event로 보내게 되면, network communication은 한 단계로 줄어들기 때문에, 시간이 적게 걸리고 expensive 하지 않다.

 

Partition 방법

partition code

partition을 하기 위해 partitionBy()라는 함수를 이용한다.

 

Partition 특징

  • partition 은 logical 한 chunk 단위로 나뉜다.
  • 어떤 action이 일어났을 때, 미리 partition이 되어있어서 소량의 shuffling이 일어나서 이득을 취할 수 있다.
  • RDD는 한 번 만들어지면 변형이 되지 않는다. 또한 partitioning을 한 부분을 persist (미리 caching)을 해둔다.

 

 

Partition 장점

  • 이러한 특성 때문에 재사용이 가능하고, iteration 작업에 좋다.
  • partition을 하는 처음 단계는 partition이 처음 일어나는 연산이기에 시간이 엄청 오래걸린다.
  • 우리가 RDD를 persist, 계속 쓸 때, 처음 partitionBy를 써서 미리 partition을 해두면, 다음 작업 때, 미리 partition이 되고, 소량의 shuffling이 일어나기 때문에 작업의 속도가 월등히 빨라지는 것을 볼 수 있다.
  • 또한 partition은 core의 수대로 병렬처리를 하게 되는데, 만약에 core가 3개인데 data 4000 단위를 3개의 partition으로 1000단위씩 한다면, 남은 1000개의 data는 하나의 partition이 비워질때까지, 기다려야하는 상황이고, 이는 시간적으로 손해다. 따라서 core가 3개이니, partition을 3개로 맞춰주어 delay하는 data없이 모두 연산시켜준다면 time save가 될 수있어 이득을 취할 수 있다. (교수님이 작은 data들은 상관없지만, 엄청나게 많은 data를 다룰 때는 partitioning을 내부의 환경과 맞춰줘야 한다고 말씀하셨다.)

partitionBy 함수

위의 그림처럼, partitionBy(2)를 쓰면, a,b가 묶이고, C로 묶이는 것을 볼 수 있다.

이는 action이 일어나서 연산이 일어나기 전에, 미리 소량의 shuffling을 진행하는 것이다.

 

Partitioning 종류

  • partition은 크게 hash, range 방식 두 가지로 나뉜다.

- Hash Partitioning

hash partitioning

row의 갯수를 % input_number 로 나눈 후, input_number한 갯수만큼 partitioning을 진행한다.

 

- Range Partitioning

Range Partitioning

table에서 row들의 range에 맞춰서 partitioning한다.

예를들어, 분기별로 대학생의 수요 인원 조사 ?

댓글