Home YARN cluster mode에서의 spark application 흐름
Post
Cancel

YARN cluster mode에서의 spark application 흐름

NOTE: 이 포스트는 spark 배포 모드 중 YARN 클러스터 모드로 수행했을 때의 spark application의 흐름에 대한 내용을 담고 있습니다.

0. 기본 Spark Application 흐름

기본 Spark Application 정리는 링크된 글 내용 중 ‘2. Spark Application 흐름 정리’을 참고하면 됩니다.

1. YARN Cluster Mode에서의 Spark Application 동작 흐름

많이 사용하는 cluster manager인 yarn cluster의 경우 어떻게 동작하는지 좀 더 자세히 살펴보겠습니다.
위 링크 글과 이 글에서 나오지 않았던 yarn의 구성에 대한 용어가 나오기 때문에 yarn에 대해 배경지식을 알면 이해하기 좋습니다.
spark on yarn 에 대한 아주 좋은 ppt가 여기 있습니다 이 부분은 해당 ppt를 참고하여 작성되었습니다.

1) spark job code 및 아키텍처

  • spark code
    
    def main(args: Array[String]): Unit = 
    {
        val sparkConf = new SparkConf()
        val sc = new SparkContext(sparkConf)
    
        sc.rdd(...).action()
    
        sc.stop()
    }
    
  • spark job 이 나누어지는 과정 image
    • 하나의 spark application은 크게 driver에서 수행될 main과 executor에서 수행될 rdd(Dataset)부분으로 나눌 수 있음
    • executor에서 수행될 작업은 하나 이상의 Job으로 변환되고, 각 Job은 하나 이상의 Spark Stage를 가짐
    • Stage는 물리적인 실행 계획을 담은 DAG로, 여러 task를 가짐



  • spark job이 spark application 수행 시 할당되는 과정 image
    • executor에서 실행되는 가장 작은 실행 단위인 task는 여러 executor에 분산되어 실행되며 여러 executor를 거쳐 stage task들이 조정됨


2) spark on yarn

  • yarn의 옵션 중 executor 관련한 configuration image
    • 추가 옵션들은 추후 별도의 포스트로 작성예정!


사실 client모드와 cluster 모드의 차이점은 driver가 어디에 뜨는지에 큰 차이가 있고 이외의 작업은 아주 비슷하게 흘러갑니다.

  • –master yarn –deploy-mode client
    image
    • (1) client에서 spark-submit을 통해 작업이 제출됨
    • (2) client에서 driver가 실행되고 driver는 resource manager에게 작업에 필요한 리소스를 요청
    • (3) resource manager는 node manager에 작업가능한 공간인 container를 전달받음
      • 이 때 node manager는 container를 대신 시작
      • resource manager는 컨테이너에 application master를 실행
      • application master가 리소스를 ressource manager에게 요청하고 resource manager는 데이터 지역성을 고려하여 리소스를 할당
    • (4) (1)에서 복사되었던 파일들을 HDFS에서 container로 가져와 작업 수행
      • node manager에 떠있는 application master가 task(executor)를 실행
      • task들은 작업 상황을 주기적으로 application master에 전달
  • –master yarn –deploy-mode cluster
    image
    • (1) client에서 spark-submit을 통해 작업이 제출됨
    • (2) resource manager로부터 지정받은 임의의 node manager가 driver(container)를 수헹
    • (3) driver는 resource manager에 작업에 필요한 리소스를 요청
    • (4) resource manager는 node manager에 작업가능한 공간인 container를 전달받음
      • 이 때 node manager는 container를 대신 시작
      • resource manager는 컨테이너에 application master를 실행
      • application master가 리소스를 ressource manager에게 요청하고 resource manager는 데이터 지역성을 고려하여 리소스를 할당
    • (5) (1)에서 복사되었던 파일들을 HDFS에서 container로 가져와 작업 수행
      • node manager에 떠있는 application master가 task(executor)를 실행
      • task들은 작업 상황을 주기적으로 application master에 전달

참고:
Spark Submitting Applications
spark-in-action-Chapter10
Spark local mode와 Cluster Manager 및 deploy mode
Yarn by default (Spark on YARN)

This post is licensed under CC BY 4.0 by the author.