> For the complete documentation index, see [llms.txt](https://haleyryu.gitbook.io/engineer/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://haleyryu.gitbook.io/engineer/data-engineering/spark/driver-master-worker.md).

# 각 데몬의 역할 Driver, Master, Worker

**각 데몬의 역할 (Driver, Master, Worker)**

### **Spark와 M/R 아키텍처의 차이점**

* 분산모드에서 Spark는 master/slave 구조로 이루어져 있다.
* master는 Driver, slave는 Worker/Executor

### **Applications**

* Spark는 M/R과 유사한 job 개념을 갖고 있지만 “application”이라는 higher-level construct가 있다.
* application can run multiple jobs, in sequence or in parallel.
* SparkContext = an instance of application
* M/R과는 다르게 Executor라 불리우는 process들을 가질 수 있다.
* application은 클러스터에 항상 떠있다. 그래서 빠른 메모리 접근을 가능케 한다.

### **Cluster Manager**

* Driver와 Executor는 Cluster Manager를 통해서 최초 실행
* Cluster Manager는 Executor process의 시작을 책임짐

### **Driver**

* 사용자 프로그램을 실행시키는 main()함수를 갖고 있는 process
* Executor의 상태를 확인하고 Data 위치를 기반으로 Task 배치
  1. 사용자 프로그램을 실제수행단위(Task)로 변환 : Input -> RDD -> Transform or Action Operation, 데이터 수집 or 저장
  2. Task를 Executor에 할당 : Executor는 Task를 수행하고 RDD를 저장한다.
* Driver 정보는 http\://\<driver-node>:4040 에서 확인 가능
* Spark에서는 job flow, task scheduling 를 Driver가 함
* Hadoop 1.x 에서는 task scheduling을 JobTracker가 Hadoop 2.x에서는 Application Master가 책임을 짐

### **Executor**

* Executor는 Spark의 Job Task를 수행하는 역할
* Spark Application이 실행될 때 한번 수행이 시작되며 Application lifetime과 동일
  1. Task 실행하고 결과를 Driver에 전송
  2. 메모리에 저장된 RDD를 제공
* Block Manager 라고 불리는 Service 를 통해서 제공되는데, 이는 RDD가 Executor 내부에서 cache 되기 때문
* M/R은 process를 소유한 각각의 task를 실행한다. Task 가 종료하면, process는 사라진다.
* Spark는 많은 task를 single process 안에서 동시에 실행할 수 있음. process는 생명주기 동안 Spark Application에 머문다. 실행할 job이 없을지라도
* 이 모델의 장점은, speed 임. Task가 매우 빨리 시작될 수 있음
* 단점은 coarser-grained resource management
  * executor 몇개가 수정되면 그만큼의 resource가 수정되고 application은 동일한 양만큼의 resource를 다시 올려야 한다

### **Summary**

* **Application** : single job, sequence job, 혹은 오래 동작하는 service
* **Drive**r : spark context가 돌아가는 process임. 클러스터에서 각 단계 실행마다 application 변환에 대한 책임을 갖는다. application 마다 1개의 driver가 존재
* **Application Master** : driver가 요청한 자원을 할당하거나 적절한 host/container를 찾는 역할에 대한 책임을 갖는다. application 마다 1개의 Application Master가 존재
* **Executor** : node에 있는 한개의 JVM instance, 생명주기동안 여러개의 task 동시 수행. node는 몇몇개의 Spark executor를 갖을 수 있다.
* **Task** : 분산된 dataset의 파티션당 작업의 단위
