반응형
들어가며
Spark를 튜닝하기 위해서는 클러스터의 구조가 어떻게 구성이 되어 있는지, 프로그램은 어떤 순서로 실행이 되는지에 대한 지식은 보유를 하고 계셔야 시스템을 설정 및 튜닝이 가능합니다. 예를 들어 설정하는 옵션에서 executor-memory의 값을 설정해야 하는데, executor가 어떤 역할을 하는지 모른다면... 아니되오 .
Spark의 components를 Driver Program, SparkContext, Cluster Manager, Worker Node, Executor, Task, Cache가 있고, 각각의 역할과 어떻게 동작하는지에 대해서 알아보겠습니다.
Components
- Driver Program
main()함수를 갖고 있는 프로세스를 말합니다. 우리가 spark-submit을 통해 내가 구현한 코드를 제출을 합니다. 그럼 구현한 코드에서는 SpakrContext라는 객체를 생성하고, RDD를 생성합니다. 또한 제출한 Application을 task라고 불리는 실제 수행 단위로 변환을 task를 묶어서 Worker Node의 Executor로 전달을 합니다. Executor는 받은 task를 RDD에 저장하고 처리를 합니다. 만약 spark-shell을 사용하면 이것 또한 SparkContext 객체가 생성되기 때문에 Driver Program이 생성이 된것입니다. 또한 연산들의 관계를 DAG(Directed Acyclic Graph)를 생성합니다. DAG를 물리적인 실행 계획으로 변환을 합니다. 최적화를 거쳐 여러개의 stage로 변환하고 각 stage는 여러개의 task로 구성이 됩니다. 4040 포트를 통해서 웹 인터페이스로 실행 정보를 볼 수 있습니다.
- Worker Node
클러스터에 있는 executor를 포함한 실제 작업을 하는 노드라고 생각하시면 됩니다.
- SparkContext
Driver Program에 의해 생성이 되고, Cluster Manager와 연결이 됩니다. (Cluster Manager는 resource를 할당하는 역할). Spark는 클러스터내부에 있는 각 WorkerNode로 부터 Executor를 얻습니다.
- Executor
computation과 data를 저장하는 역할을 하는 process로, application의 lifecycle과 동일하게 수행이 됩니다. executor가 오류가 나면 대체 executor에게 job을 할당하기 때문에 application은 계속 실행이 됩니다. Executor는 multi threads에서 tasks를 수행하고 수행 결과를 Driver Program으로 전송하는 역할을하고, application에서 cache하는 RDD를 저장하기 위한 메모리 공간을 제공합니다. 그 외에도 여러 tasks를 스케줄링하는 역할을 합니다.
Spark Application 실행 동작 순서 흐름
- 사용자가 spark-submit을 사용해 작성한 Application을 실행
- spark-submit은 Driver Program을 실행하여 main() 메소드 호출
- Driver에서 생성된 SparkContext는 Cluster Manager로 부터 Executor실행을 위한 리소스를 요청
- Cluster Manager는 Executor를 실행
- Drvier Program은 Application을 Task단위로 나누어 Executor에게 전송
- Executor는 Task를 실행
- Executor는 Application이 종료가 되면, 결과를 Driver Program에게 전달하고, Cluster Manager에게 리소스를 반납
spark-submit 주요 옵션
- master : 클러스터 매니저 설정
- deploy-mode: 드라이버 프로그램이 실행되는 곳 (client/cluster)
- class : main함수가 들어 있는 클래스
- jars/py-files : 사용자 애플리케이션에 추가되어야 할 라이브러리 목록
- executor-memory : executor process가 사용할 메모리
- driver-memory : driver process가 사용할 메모리
deploy mode
- client
- 드라이버는 spark-submit의 일부로 실행됨
- 드라이버 프로그램을 출력을 직접 확인 가능 (표준 출력 등..)
- 애플리케이션 실행하는 동안 작업 노드 들에 계속 연결되어 있어야 함
- cluster
- 드라이버가 클러스터내의 작업 노드 중 하나에서 실행됨
- 실행 후 개입하지 않는 방식
- 파이썬 언어는 지원하지 않음
Spark Application Scheduling
- 스파크 스케줄링 정책
자원이 고갈되지 않고 작업 부하의 우선 순위에 따라 할당
- 기본적으로 클러스터 매니저의 정책에 의존하여 스케줄링
익스큐터 요청시, 가능한 상태나 자원의 겨쟁여부에 따라 적당한 수 할당
대부분의 클러스터 매니저는 우선순위나 처리용량의 한계에 따른 작업 큐 기능이 있음
- 페어 스케줄러
장시간 동작하는 애플리케이션이 작업 스케줄링을 위해 우선 순위를 조정할 수 있게 함
[참고] https://spark.apache.org/docs/latest/cluster-overview.html
[참고] https://trongkhoanguyenblog.wordpress.com/2014/11/27/understand-rdd-operations-transformations-and-actions/
반응형
'빅데이터 > Spark' 카테고리의 다른 글
[Spark] RDD Architecture (0) | 2016.07.15 |
---|---|
Spark RDD - Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing (0) | 2016.07.01 |
Spark Shell을 이용한 간단한 예제 및 앱 배포 방법 (0) | 2016.06.16 |
Spark - RDD (0) | 2016.06.16 |
Spark란? 설치 및 예제 (0) | 2016.06.13 |