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

Spark : Job Scheduler

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

Job Scheduler

Job Scheduler

  1. 사용자가 RDD에 대해 action을 실행할 때마다, 스케쥴러는 RDD의 lineage 그래프 -> stage의 DAG(Direct Acyclic Graph, DAG의 위상정렬을 사용하면, 스프레드시트가 변경될 때, 모든 값을 업데이트 가능하다)를 작성한다. (경로 최적화)
  2. 각 stage에는 data locality를 맞추기 위해, 가능한 한 narrow dependency(비슷한 data끼리 해야 narrrow가 가능)를 갖는 파이프라인 구조의 Transformation이 많이 포함된다.
  3. stage의 경계는 wide dependency를 기준으로 나눈다.
  4. stage는 wide dependency를 위해 필요한 shuffle operation / 부모 파티션의 연산을 최소한의 경로로 수행할 수 있는 이미 연산된 파티션들로 구성된다.
  5. Scheduler는 target RDD가 계산될 때까지 노는것이 아니라, 각 stage에서 누락된 파티션을 계산 하는 작업을 시작하도록 구성되어 있다.

DAG 위상정렬

 

[위 그림에서 파란 사각형은 각 RDD를 의미하며, 파란 사각형들의 집합으로 표시된 윤곽 사각형은 각 파티션을 의미한다.]

 

위 그림과 같은 경우에는 stage 1의 output이 이미 RAM에 올라가 있으므로 DAG를 따라 stage2와 3 을 실행하게 된다.

 

Spark의 스케쥴러는 delay scheduling을 사용하여 data locality를 기준으로 시스템에 작업을 할당한다.

작업이 node의 메모리에 있는 파티션을 처리해야 하는 경우 작업을 해당 node로 보내고, 그렇지 않고 선호하는 위치(e.g. HDFS file)를 제시하는 RDD가 있고, 이 RDD를 지닌 파티션을 작업이 처리해야하면, 스케쥴러는 해당하는 파티션으로 작업을 보내준다.

 

Fail이 일어날 경우

Fail이 일어날 경우

  1. Spark는 wide dependency를 위해, map output을 구체화하는 MapReduce와 같이 fault recovery 를 단순화하기 위해 부모 파티션이 보유한 node들의 중간 레코드를 구체화한다.
  2. 작업이 실패했을 때, 해당 stage의 부모 파티션이 아직 사용 가능하다면 다른 노드로 작업을 옮겨 다시 실행한다.
  3. 만약 일부 stage들을 사용할 수 없는 경우는 누락된 파티션을 병렬적으로 연산하는 작업을 다시 제출한다.
  4. RDD lineage 그래프를 복제하는 것은 간단하지만, 아직 스케쥴러 장애를 허용하지 않는다.
  5. 작업이 실패했을 때, 위 그림 중 F의 파티션 중 빨간색 파티션이 손상되면 C와 D의 노란색 파티션만 재연산하여 복구하면 된다.
  6. 작업이 실패했을 때, 위 그림 중 G의 파티션 중 하나가 손상되면 그룹 A, B에서 모든 파티션에 대해 재연산을 이용해 복구 해야한다. 따라서 wide dependency의 경우 중간 레코드를 구체화한다.

 

메모리 관리

스파크는 영구적 RDD를 저장할 수 있는 세 가지 옵션을 제공한다.


메모리 내 Java 개체로서의 스토리지, 직렬화된 데이터로서의 메모리 스토리지, on-Disk 스토리지

  • 첫 번째 옵션은 Java VM이 각 RDD 요소에 기본적으로 액세스할 수 있기 때문에 가장 빠른 성능을 제공한다.->JVM 에서 연산을 하면 제일 빠르다.
  • 두 번째 옵션을 사용하면 공간이 제한되어 있을 때 Java 개체 그래프보다 더 메모리 효율적인 표현을 낮은 성능 비용으로 선택할 수 있다. -> JVM이 다 차있을 경우, serialized 된 data로서 메모리에 넣는다.
  • 세 번째 옵션은 RAM에 보관하기에는 너무 크지만 각 사용 시 다시 계산하기에는 비용이 많이 드는 RDD에 유용하다. -> 마지막 disk에 쓰는 방법인데, data가 클 경우에만 disk에 넣어서 관리를 한다.

 

 

'대학원 공부 > computer science' 카테고리의 다른 글

Computer & Structure : Kernel  (0) 2020.02.08
Spark : Dependency  (0) 2019.12.19
Spark : Caching & Serialized  (0) 2019.12.19
Spark : Pair RDD  (0) 2019.12.19
Spark : Function 예시  (0) 2019.12.19

댓글