본문 바로가기
BigData/Spark

Learning Spark Chapter. 7 Cluster 환경에서 수행하기

by Tomining 2015. 7. 23.
Spark Runtime Architecture

Spark Cluster 환경에 대해서 알아보기 전에 Spark 분산환경 Architecture 에 대해서 먼저 알아보자.
분산모드에서 Spark 는 중앙관리자와 수많은 Worker 들을 가지는 master/slave 구조를 이용한다. 중앙관리자를 driver 라고 하고 Worker 들을 executor 라고 한다.


Spark Application 은 Cluster Manager 를 통해 여러 대의 장비에서 수행이 된다. Spark 는 Standalone Cluster Manager 라는 내부 Cluster Manager 를 갖고 있다. 또한 Hadoop YARN 이나  Apache Mesos 와도 연동이 된다.

Driver

Driver 란 사용자 프로그램을 실행시키는 main() 함수를 갖고 있는 프로세스다. SparkContext 를 생성하고, RDD 를 생성하고, Transformation과 Action 을 수행하게 된다. spark-shell 을 사용할 때, Driver Program 이 생성된다.(이전 장에서도 설명했듯이 sc 라고 불리는 SparkContext 가 사전에 생성된다.)

Driver 가 실행될 때 아래 두가지가 수행된다.

  • 사용자 프로그램을 Task 로 변환
    Spark Driver 는 사용자 프로그램을 Task 라고 불리는 실제 수행 단위로 변환시킨다. 고차원적으로 보면, Spark 프로그램은 동일한 구조를 가진다.
    : Input 으로부터 RDD 를 생성하고, 새로운 RDD 로 파생되며, Transformation 이나 Action Operation 을 수행하여, 데이터를 수집 또는 저장한다.
    즉,  Spark 프로그램은 논리적인 DAG(Directed Acyclic Graph) 를 생성하는데, Driver 가 실행될 때 이를 실제 실행 계획으로 변환된다.
    이 실행계획은 Stage 셋으로 구성되는데, 다시 Stage 는 여러 개의 Task로 구성되며, Task 는 Spark 에서 수행되는 가장 작은 단위이다.
  • Task 를 Executor 에 할당
    실제 실행계획을 바탕으로  Spark Driver 는 각 Task 글에게 Executor 를 할당해야 한다. 각 Executor 는 Task 들을 수행하고 RDD 를 저장하게 된다.
    Spark Driver 는 Executor 의 상태를 확인하고 Data 위치를 기반으로 Task 들을 배치한다. Task 들이 실행될 때 cache 된 데이터를 저장하는데 문제가 발생할 수도 있다. 또한  Driver 는 cache된 데이터의 위치를 추적하고 추후 실행될 Task 들을 배치하는데 사용한다.

이런 Driver 정보는 Spark 에서 제공되는 web interface 에서 확인할 수 있다.(http://masterIp:4040)

Executors

Executor 는 Spark Job의 Task 들을 수행하는 역할을 한다. Executor 는 Spark Application 이 실행될 때 한 번 수행이 시작되며, Application lifetime 과 동일하게 수행된다. Executor 에서 오류가 나더라도 Spark Application 은 계속 실행된다.(대체  Executor 를 할당받음)
Executor 는 두 가지 역할을 한다.

  1. Task 실행 & 결과를 Driver 로 전송
  2. 메모리에 저장된 RDD 제공
    Block Manager 라고 불리는 Service 를 통해서 제공되는데, 이는 RDD가 Executor 내부에서 cache 되기 때문이다.

Cluster Manager

driver 와 executor 가 어떻게 최초 실행이 될까? Spark 는 Cluster Manager 를 통해서 executor 와 driver(특정 상황에서) 를 실행한다. 이런 Cluster Manager 는 다른 컴포넌트로 교체가 가능한데, YARN 이나 Mesos 같은 외부 Cluster Manager 에서나 내부 standalone cluster manager 로 실행이 가능하다.

Launch a Program

어떤 Cluster Manager 를 사용하든 spark-submit 을 통해서 Spark Application 을 실행할 수 있다. 옵션들을 통해 다른 Cluster Manager 에 연결할 수 있으며, 많은 자원들을 할당 받을 수도 있다. 특정 Cluster Manager 에서는 Driver 도 Cluster 내에서 실행되게 할 수 있다.

spark-submit 을 통해 Application 배포하기(실행하기)


bin/spark-submit my_script.py
bin/spark-submit —master spark://host:7077 —executor-memory 10g my_scritp.py

Master URL Meaning
local
하나의 Worker 에서 수행(locally), 병렬수행 없음 
local[K]
여러 개의 Worker 에서 수행(locally) 
local[*]
해당 장비에서 사용가능한 Worker 에서 수행 
spark://HOST:PORT
Standalone Clsuter Manager 에서 수행, PORT 기본값은 7077 
mesos://HOST:PORT
Cluster Manager 로 Apache Mesos 사용 
yarn-client
Client 모드로 YARN 사용, Cluster 위치는 HADOOP_CONF_DIR 이나 YARN_CONF_DIR 에 설정 
yarn-cluster
Cluster 모드로 YARN 사용, Cluster 위치는 HADOOP_CONF_DIR 이나 YARN_CONF_DIR 에 설정 

* yarn-cluster 모드는 Driver 가 Cluster 내에서 실행되는 모드이다.

실행은 아래와 같은 포멧으로 할 수 있다.

./bin/spark-submit \
  --class <main-class>
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]

* 성능에 영향을 주는 옵션 중 두 가지만 언급하고자 한다.

  1. —executor-memory
  2. —driver-memory

성능 최적화를 위해서는 두 옵션을 적정한 수준의 용량을 설정해야 한다. 여기에 도움이 될 만한 내용은 아래 블로그를 참고하길 바란다.(YARN 환경에 대해 설명)

Spark Application Code 를 어떻게 패키징하고 Dependency 관리를 하는지에 대해서는 책 124 ~ 129 페이지를 참고하면 되고, Cluster Manager 별 실행방법에 대해서는 책 129 ~ 138 페이지를 참고하길 바란다.(Amazon EC2 가이드도 포함하고 있다.)

어떤 Cluster Manager 를 사용해야 할까?

  • 만약 새로운 Application 을 시작한다면 Standalone Cluster 를 사용하라.
    Standalone Cluster 는 사용하기 가장 쉬운 방법이며, Spark 만 사용한다면, 다른 Cluster Manager 와 동일한 기능을 거의 모두 제공한다.
  • 만약 다른 Application 과 함께 실행되거나, 자원할당을 좀 더 풍부하게 하고 싶다면 YARN 이나 Mesos 를 사용하라.
    YARN 은 Hadoop 이 설치되어 있다면, 기본적으로 설치가 되어 있다.(설정만 하면 됨)
  • YARN 이나 Standalone 에 비해 Mesos 의 장점은 fine-grained sharing 옵션이다.
    이는 Spark-shell 같은 대화형 Application 에서도 CPU 할당 같은 것을 지원한다. 여러 사용자들이 대화형 shell(spark-shell) 을 사용할 때 유용하다.
  • 저장소에 빠르게 접근하기 위해서 HDFS 와 같은 장비에서 Spark 를 수행하라.
    Mesos 를 HDFS 가 설치된 장비에 설치하거나, HDFS 가 설정되어 있으면 YARN 은 이미 설치가 되어 있다.

앞으로는 Cluster Manager 는 YARN 환경에서 설명하기로 한다.
예제가 YARN 환경에서 수행하는 것이 많다. 또한 Mesos 의 경우도 실행은 다르지 않다. 다만 Amazon EC2 의 경우는 별도 설정 및 실행방법을 갖고 있으니 별도로 학습해야 한다.