[Spark_4] Cluster Resource Management

이하는 link 자료를 정리함 (link1, link2)


Cluster resource 최적화

1) Spark Job Server 이용하여 Spark Context 리소스 미리 확보

  • 문제상황: 여러 Application 실행시, 매 실행마다 Spark Context 생성/resource 해제를 반복하면, 스로세스 실행/종료에 따른 일련의 과정에서 시간이 낭비
    • Application(eg. 1+1 function) 실행 -> Spark Context 생성 -> executor 프로세스 실행 -> 작업 완료 -> Application 종료: 새로 App 실행하려면 n 초가 소요됨
    • App 여러개면 이걸 반복하고 n초 x m 개의 시간이 낭비됨
  • 해결책: Spark Job Server
    • 하나의 Application을 Deamon형태로 실행 -> 이곳에 Job group을 실행(n Job 1 App(0) vs1 Job 1 App(X))

2) Fair Scheduler: Spark Context 내 Job의 우선순위 및 적정배분

  • 문제상황: 여러 개의 Job 실행, Task 수는 다름.
    • Application 1개에서 Job A, B, C 실행 -> 각 Job은 n개의 Task로 나눠짐
    • Job A: t1, t2, …, t10 / Job B: t1, t2, …, t10, / Job C: t1, t2
    • Queue와 같이 Job은 FIFO를 따름
    • 즉 Job A, Job B의 Task들이 모든 Executor를 독점하고 끝낼 때까지, Job C는 Task2인데 대기해야.
  • 해결책: Fair Scheduler
    • 한 가지 Job의 Task가 executor 독점하지 못하고, 각 executor에 여러가지 Job의 Task를 실행

3) Dynamic Resource Allocation: Spark Context 간 효율적 리소스 재분배

  • 문제상황: Spark Cluster에 여러 Application 존재
    • App1, App2, App3은 Cluster Manager를 통해 resource 예약(여기서 resource는 executor의 수 및 각 executor가 사용가능한 CPU core 수)
    • App1의 작업이 빨리 종료. executor 남음.
    • App2, App3에 이미 할당한 executor가 정해져 있으므로, (App1 작업 끝낸) resource는 사용되지 않음.
  • 해결책: Dynamic Resource Allocation
    • Resource(executor)를 많이 필요로 하는 App2, 3에서 추가로 Resource 요청
    • 다만, 개별 App가 최대로 사용할 수 있는 executor의 수를 정하여, 독점하지 못하게 함.
    • 이유는, App1의 작업이 끝나고, 다음 App n을 실행해야 하는데, resource를 이미 모두 App2, App3에 할당했을 경우, 바로 App n에 대응을 할 수 없음
< !-- add by yurixu 替换Google的jquery并且添加判断逻辑 -->