[Spark] Cluster Mode

Cluster Mode Overview

from : https://spark.apache.org/docs/latest/cluster-overview.html

클러스터 모드에서 어떻게 스파크가 수행되는지 보여주는 문서이며, 컴포넌트들이 수행하는 일에 대해서 쉽게 이해할 수 있다.

Components

스파크 어플리케이션은 크러스터 상에서 독립된 처리 단위로 수행된다. 이는 SparkContext 객체에 의해서 코디네이트 된다. (이를 driver program이라고 한다.)

특히, 클러스터에서 수행될때 SparkContext는 몇가지 타입의 클러스터 관리자와 연결할 있다. (스파크의 스탠드 얼론 클러스터 관리자, Mesos, YARN등이 있다.) 이것은 어플리케이션 상호간의 자원을 할당한다. 한번 접속이 되면 스파크는 클러스터 내의 노드들에서 수행하며, 이 처리는 계산을 하거나 데이터를 저장하는 작업을 수행한다. 다음으로 어플리케이션 코드를 실행하는 executors에 전달한다. (JAR혹은 Python파일을 SparkContext에 전달한다.) 최종적으로 SparkContext는 태스크를 executors에 전달하여 실행한다.

Spark cluster components
이 아키텍쳐에는 주요 노트 몇가지가 있다.
1. 각 어플리케이션은 소유한 executor processes를 획득한다. 이것은 전체 어플리케이션의 기간동안 유지되며, 태스크를 멀티 쓰레드로 실행한다.
이것은 어플리케이션들 각각을 독립적으로 고립시키는 이점이 있다. 여기에는 스케줄링 사이드(각 드라이버는 자신의 태스크를 스케줄링한다.) 와 executor 사이드(서로다른 어플리케이션의 태스크들은 서로다른 JVM상에서 동작한다.)가 있다. 그러나 이 의미는 외부 스토리지 시스템에 해당 정보를 쓰는 것을 통하지 않고서는, 서로다른 스파크 어플리케이션 상호간에 데이터를 쉐어할 수 없다는 의미가 된다.

2. 스파크는 클러스터 매니저를 알지 못한다. 가능한 오랬동안 executor processes를 가질 수있으며, 이들 상호간에 서로 커뮤니케이션 하며, 비교직 쉽게 클러스터 매니저 상에서 실행이 가능하다. 이것은 또한 다른 어플리케이션을 지원한다. (Mesos/YARN)

3. 드라이버 프로그램은 executors의 라이프타임 내에서 들어오는 접근을 반드시 listen해야하며, 받아 들여야 한다. 드라이버 프로그램은 반드시 워커 노드들로 부터 네트워크 접근을 할 수 있도록 해야한다.

4. 클러스터에서 드라이버가 스케줄하기 때문에 워커노드 가까운 곳에서 수행되어야한다. 가급적이면 동일한 LAN내에 있어야 한다. 만약 원격지에 요청을 보내고자 한다면 드라이버에 대한 RPC를 오픈하고 오퍼레이션을 워커노드에서 가급적 가까운 곳에서 수행할 수 있도록 해야한다.

Cluster manager Types

현재 지원되는 클러스터 매니저는 다음과 같다.
Standalone - 단순 클러스터 매니저로 Spark를 포함하며, 클러스터를 쉽게 설정할 수 있다.
Apache Mesos - 일반적은 클러스터 관리자이며, Hadoop MapReduce와 서비스 어플리케이션을 수행할 수 있다.
Hadoop YARN - Hadoop2에 있는 리소스 매니저이다.

추가적으로 Spark의 EC2 launch scripts는 Amazone EC2에서 스탠드 얼론 클러스터에 런치하기 쉽게 해준다.

Submitting Applications

어플리케이션은 spark-submit스크립트를 이용하여 다양한 타입으로 서밋 할 수 있다.
다음 참조 : https://spark.apache.org/docs/latest/submitting-applications.html


Monitoring

각 드라이버 프로그램은 web UI를 가지고 있다. 일반적으로 4040포트를 이용하며 실행되는 태스크, executors, storage사용 등을 볼 수 있다. 단순히 http://<driver-node>:4040 에 접근하여 볼 수 있다.
다음을 참조 : https://spark.apache.org/docs/latest/monitoring.html

Job Scheduling

스파크는 어플리케이션들 간에 리소스 할당을 컨트롤 하도록 해준다. (클러스터 매니저의 역할에서) 그리고 어플리케이션 내부의 계산들은 동일한 SparkContext내에서 수행된다.
다음을 참조 : https://spark.apache.org/docs/latest/job-scheduling.html

Glossary

다음 표는 클러스터 개념을 나타내는 용어들을 보여준다.
TermMeaning
Application스파크내 사용자 프로그램, 드라이버 프로그램과 클러스터 내의 executors로 구성된다. 
Application jar사용자 스파크 어플리케이션을 포함하는 jar파일, 사용자는 "uber jar"를 생성하기를 원할수 있다. 이때 이 내부에는 의존성 패키지를 포함한다.
사용자의 jar는 Hadoop 혹은 Spark라이브럴리를 포함해서는 안된다. 이는 실행시점에 포함된다. 
Driver program어플리케이션의 main() 함수를 실행하며, SparkContext를 생성한다. 
Cluster manager클러스터 내의 필요한 리소스를 위한 외부 서비스이다. (standalone manager, Mesos, YARN등)
Deploy mode드라이버 어디에서 프로스세를 실행하는지를 구별한다. 클러스터 모드에서 프레임워크는 클래서터의 내부에 드라이버를 실행한다. 클라이언트 모드에서는 클러스터의 외부에서 드라이브를 런치한다. 
Worker node클러스터 내에서 어플리케이션 코드를 실행할 수 있는 특정 노드
Executor워커노드에서 어플리케이션을 위해서 린치된 프로세스이다. 이것은 태스크를 실행하고, 메모리에 데이터를 저장하거나 디스크에 접근하는 역할을 한다. 각 어플리케이션은 자신의 executors를 가지고 있다. 
Task하나에 executor에 전달될 작업의 단위
Job복수개의 태스크들로 구성된 병렬 계산처리를 하는 것으로 스파크 액션의 응답에서 만들어진다. (save, collect) 이것은 드라이버의 로그에서 이 용어를 사용한 것을 볼 수 있을 것이다. 
Stage각 job은 스테이지라고 불리는 태스크의 셋들로 나누어 진다. 이것은 서로 의존적이며 (이는 map, reduce와 유사하다.) 드라이버 로그에서 이 용어를 사용한 것을 볼 수 있을 것이다. 



Share this

Related Posts

Previous
Next Post »