YARN 위에서 여러 애플리케이션을 실행할 수 있다.

한정된 자원을 여러 애플리케이션이 나눠 써야 하기 때문에,

자원을 효율적으로 스케줄링 하는 것이 좋다.

Spark 는 사용자에게 원하는 스케줄링을 할 수 있도록 스케줄러를 직접 선택할 수 있는 권한을 제공하고 있다.

아래는 세 가지 스케줄러에 대해 설명한다.

 

1. FIFO Scheduler

2. Capacity Scheduler

3. Fair Scheduler

 

 

 

FIFO Scheduler 는 Queue 처럼 동작한다.

애플리케이션을 큐에 하나씩 넣고 들어온 순서에 따라 순차적으로 실행한다.

나중에 온 애플리케이션은 가장 앞단에 애플리케이션의 수행이 끝날 때 까지 기다려야 한다.

위의 그림처럼, 1번 애플리케이션의 실행 시간이 길면

2번 애플리케이션이 1번의 실행 시간만큼 기다린 후에서야 실행할 수 있는 단점이 있다.

그래서 여러 애플리케이션을 사용해야 하는 공유 클러스터 환경에서는 적절하지 않다.

 

장점 : 

- 이해하기 쉽고 설정이 필요 없다.

- 애플리케이션 하나에 대한 처리 속도가 빠르다.

단점 :

- 다른 애플리케이션을 처리하기 위해 기다려야 하므로 공유 클러스터 환경에서 사용하기 부적절하다.

 

 

 

 

Capacity Scheduler 가 동작하는 방식은, 여러 개의 Queue 를 사용하는 방식이라고 생각하면 쉽다.

위의 그림처럼, 자원을 미리 예약해 둔 queue A 와 queue B 가 동시에 존재하고,

실행 시간이 어느 정도 긴 대형 애플리케이션은 queue A 에, 짧은 소형 애플리케이션은 queue B 에서

실행하도록 한다.

자원이 미리 예약되어있기 때문에 전체 클러스터의 효율성이 떨어지고

대형 job의 경우 FIFO Scheduler 보다 실행 시간이 길다는 단점이 있다.

 

장점 :

 - 동시에 작은 애플리케이션도 처리 가능하다.

 

단점 :

 - 대형 job 은 FIFO 보다 늦게 끝난다.

 - 분리된 큐가 자원을 미리 예약해두기 떄문에 전체 클러스터 효율성이 떨어진다.

 

 

 

 

 

Fair Scheduler 는 실행 중인 모든 잡의 자원을 동적으로 분배한다.

따라서 미리 예약해 둘 필요가 없다.

1번 job 이 먼저 실행되면 이때는 실행 중인 잡이 하나뿐이기에 

클러스터의 모든 자원을 얻을 수 있다.

대형 잡이 실행되는 도중에 작은 잡이 추가로 시작되면,

Fair Scheduler 가 클러스터 자원의 절반정도를 작은 잡(2)에게 할당해준다.

따라서 각 1, 2번 jobs 는 공평하게 자원을 사용할 수 있다.

2번 잡 실행 후, 공평하게 자원을 받을 떄 까지 약간의 시간차가 있을 수 있다.

왜냐하면 1번 잡이 사용하고 있는 컨테이너의 자원이 완전히 해제될 때까지 기다려야 하기 때문.

작은 2번 잡이 완료된 후에는 1번 대형 잡이 클러스터의 전체 자원을 다시 가져간다.

전체적으로 보면 클러스터의 효율성도 높고, 작은 잡도 빨리 처리할 수 있다.

 

장점 : 

 - 클러스터의 효율성이 높다.

 - 작은 job 도 빨리 처리할 수 있다.

 

단점 : 

 - 작은 job 에게 자원을 나누기 위해 큰 job 에서 사용하는 자원이 완전히 해제될 때 까지 딜레이가 있다.

 

 

 

 

Hadoop 버전에 따라 다르지만, 일반적으로 기본 스케줄러는 Capacity 이다.

 

 

내 언어 능력으로 설명을 쓰면 오해가 생길 수 있는 부분이 있을 것 같아서 

하둡 완벽 가이드 4판의 설명을 가져왔다.

 

 

 

참고

https://wikidocs.net/22936

 

 

 

+ Recent posts