각 데몬의 역할 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 배치
사용자 프로그램을 실제수행단위(Task)로 변환 : Input -> RDD -> Transform or Action Operation, 데이터 수집 or 저장
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과 동일
Task 실행하고 결과를 Driver에 전송
메모리에 저장된 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
Driver : 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의 파티션당 작업의 단위
Last updated