Cluster - spark

16
Spark: Running on a Cluster 아키텍트를 꿈꾸는 사람들 Cecil

Transcript of Cluster - spark

Spark:�Running�on�a�Cluster�

아키텍트를�꿈꾸는�사람들�Cecil

Spark�애플리케이션:�분산�모드

마스터/슬레이브�구조�

중앙�조정자(드라이버)�+�분산�작업�노드(익스큐터)로�구성�

드라이버와�익스큐터는�각각�독립된�자바�프로세스

분산모드�구성�요소�-�드라이버

• 사용자의�main�메소드가�실행되는�프로세스�• 주요�역할�• 사용자�프로그램을�태스크로�변환하여�클러스터로�전송�• 익스큐터에서의�개별�작업들을�위한�스케쥴링을�조정

드라이버의�역할• 사용자�프로그램을�태스크로�변환�1. 연산들의�관계를�DAG(Directed�Acyclic�Graph)�생성�2. DAG를�물리적인�실행�계획으로�변환�•최적화를�거쳐�여러�개의�stage로�변환�

•각�stage�는�여러개의�태스크로�구성�

3. 단위�작업들을�묶어서�클러스터로�전송�

• 익스큐터에서�태스크들의�스케쥴링�• 익스큐터들은�시작시�드라이버에�등록됨�

• 드라이버는�항상�실행중인�익스큐터를�감시�• 태스크를�데이터�위치에�기반해�적절한�위치에서�실행이�되도록�함�

• 4040�포트를�사용하여�웹�인터페이스로�실행�정보를�볼수�있음

태스크�변환�과정

분산모드�구성�요소�-�익스큐터

• 개별�태스크를�실행하는�작업�실행�프로세스�• 주요�역할�• 태스크�실행�후�결과를�드라이버로�전송�• 사용자�프로그램에서�캐시하는�RDD를�저장하기�위한�메모리�공간�제공

분산모드�구성�요소�-�클러스터�매니저

• 스파크는�익스큐터를�실행하기�위해�클러스터�매니저에�의존�• 지원�매니저�• Standalone,�Hadoop�Yarn,�Apache�Mesos

프로그램이�실행되는�단계1. 사용자가�spark-submit을�사용해�애플리케이션�제출�

2. spark-submit은�드라이버�프로그램을�실행하여�main�메소드�호출�

3. 드라이버는�클러스터�매니저에서�익스큐터�실행을�위한�리소스�요청�

4.클러스터�매니저는�익스큐터를�실행�

5. 드라이버는�태스크�단위로�나누어�익스큐터에�전송�

6. 익스큐터는�태스크를�실행�

7. 애플리케이션이�종료되면�클러스터�매니저에게�리소스�반납

spark-submit•클러스터�매니저에�스파크�애플리케이션을�제출하는�툴�

•ex)�spark-submit�--master�spark://host:7077�my_script.py�

•주요�옵션�

•master:�클러스터�매니저�설정�

•deploy-mode:�드라이버�프로그램이�실행�되는�곳(client/cluster)�

•class:�(Java/Scala)�main�함수가�들어�있는�클래스�

•jars/py-files:�사용자�애플리케이션에�추가되어야할�라이브러리�목록�

•executor-memory:�익스큐터�프로세스가�사용할�메모리�

•driver-memory:�드라이버�프로세스가�사용할�메모리

deploy�mode

•클라이언트�모드�

•드라이버는�spark-submit의�일부로�실행됨�

•드라이버�프로그램을�출력을�직접�확인�가능�(표준�출력등.)�

•애플리케이션�실행하는�동안�작업�노드�들에�계속�연결되어�있어야�함�

•클러스터�모드�

•드라이버가�클러스터내의�작업�노드중�하나에서�실행됨�

•실행�후�개입하지�않는�방식�

•파이썬�언어는�지원하지�않음.

의존성�라이브러리의�패키징•클러스터�머신들에�해당�라이브러리가�위치해야�함�

•python�

•클러스터의�python�패키지�매니저를�사용하여�직접�설치�

•—py-files�옵션을�사용하여�라이브러리�제출�

•java,�scala�

•—jars�옵션을�사용하여�jar�파일�제출�

•복잡한�의존성을�가질�경우�전체적인�전이�의존성�그래프를�같이�제출해야�함�

•maven,�sbt�플러그인�사용하여�패키징

스파크�애플리케이션간�스케쥴링

•스파크�스케쥴링�정책�

•자원이�고갈되지�않고�작업�부하의�우선�순위에�따라�할당�

•기본적으로�클러스터�매니저의�정책에�의존하여�스케쥴링�

•익스큐터�요청시,�가능한�상태나�자원의�경쟁여부에�따라�적당한�수�할당�

•대부분의�클러스터�매니저는�우선순위나�처리용량의�한계에�따른�작업�큐�기능이�있음�

•페어�스케쥴러�

•장시간�동작하는�애플리케이션이�작업�스케쥴링을�위해�우선�순위를�조정할�수�있게�함

클러스터�매니저•공통�•익스큐터에서�가능한�많은�코어를�써서�적은�개수�익스큐터로�애플리케이션�실행�

•분산된�데이터에서의�로컬리티�보장,�데이터가�있는�곳에서�태스크�실행�

•Standalone�•설정:�executor-memory,�total-executor-cores�

•익스큐터의�최대�개수�설정�만큼�퍼뜨리는�식으로�동작�

•Hadoop�Yarn�•설정:�executor-memory,�num-executers,�executor-cores�

•Apache�mesos�•설정:�executor-memory,�total-executor-cores

클러스터�매니저�선택

•Standalone�•새로�배포�예정의�애플리케이션�<==�설정이�가장�쉬움�

•Hadoop�Yarn�•다른�애플리케이션과�같이�돌리거나�우수한�자원�스케쥴링이�필요한�경우�

•Apache�mesos�•스파크�쉘과�같은�대화형�어플리케이션�실행간�CPU�사용량을�세밀히�조정�

•HDFS�

•저장소의�빠른�접근을�위해�HDFS와�동일한�노드에�설치

Q&A

References• Holden�Karau,�Andy�Konwinski,�Patrick�Wendell,�Matei�Zaharia.�러닝�스파크(박종용�옮김).�경기도�파주시:�제이펍(주),�2015�

• Spark�home�page:�http://spark.apache.org�

• Understanding�RDD�operations:�transformations�and�actions:�https://trongkhoanguyenblog.wordpress.com/2014/11/27/understand-rdd-operations-transformations-and-actions/�

• spark�overview:�http://www.slideshare.net/LisaHua/spark-overview-37479609