본문 바로가기
BigData/Spark

Spark Memory Config on Apache YARN

by Tomining 2015. 7. 15.
spark application 수행시 config 정보를 설정하는 방법은 크게 두 가지가 있다.

  1. Spark 서버에 설정
    • spark-env.sh
      Spark Process 수행시 환경변수 설정 값
    • spark-default.properties
      Spark 설정 기본값
  2. Spark Application 에서 SparkConf() 에 설정

수많은 설정 파라메터들이 있으나, 기본값들이 미리 다 지정되어 있기 때문에 변경이 필요한 값들만 변경해서 설정하면 된다.




설정을 진행하다보면, worker 와 executor 설정들이 나온다.
예를 들면,
SPARK_WORKER_INSTANCES, SPARK_WORKER_MEMORY
spark.executor.instances, spark.executor.memory

worker 와 executor 두 개의 설정에는 어떠한 차이가 있을까?
각각의 역할은 무엇이고, 어떻게 설정해야 할까?

먼저 Spark Cluster 가이드 페이지를 살펴보자. 아래와 같이 Driver Program 이 어떻게 수행되는지 그림으로 설명하고 있다.

참고로 Cluster Manager 는 여기서 Yarn 을 의미한다(현재 환경은 Yarn 위에서 Spark 가 동작하는 구조이다.)

Worker Node 에 Executor 가 포함되어 있음을 확인 할 수 있을 것이다.
하나의 물리적 Spark 장비에 여러 개의 Worker 를 생성할 수 있고, Worker 는 여러 개의 Executor 를 가질 수 있다.

이런 개념을 가지고 Spark 설정들을 다시 살펴보자.
  • SPARK_WORKER_INSTANCES - 3
  • SPARK_WORKER_MEMORY - 1g
  • spark.executor.instances - 2
  • spark.executor.memory - 256m

에를 들어 위처럼 설정했다고 가정하자.
그럼 하나의 장비에 3개의 worker 가 생성되고, 1g씩 할당받는다. 그리고 각 worker 에 2개의 executor 가 생성되고, 512m을 할당받는다.
여기서 하나의 장비만 있다고 가정한다면, 전체 worker 수는 3개이고, 전체 executor 수는 6개가 되며, memory 는 3g 가 된다.
(산술적으로 메모리를 계산하였으나, 실제로 딱 맞게 할당되진 않는다.)