[Spark] YARN 기반 Spark Cluster 프로그램의 구조

Spark 프로그램의 구조

Spark Cluster 예시

Driver

  • 실행되는 코드의 마스터 역할 수행(YARN의 Application Master)
  • 사용자 코드를 실제 Spark 태스크로 변환해 Spark 클러스터에서 실행
  • 실행모드(client, cluster)에 따라 실행되는 곳이 달라짐
    • cluster 모드로 돌 때는 드라이버가 YARN 클러스터 안에서 컨테이너 내 동작→ Application Master
      • 실제 프로덕션 운영시(Spark-submit과 같은 커맨드라인 유틸리티를 써서 개발이 끝난 경우)
    • client 모드일 때는 YARN 클러스터 밖에서 실행
      • 교육이나 개발용으로 사용
      • Spark Shell, 노트북으로 프로그램 실행
  • 코드를 실행하는데 필요한 리소스를 지정 --num-executors, --executor-cores, --executor-memory
  • 보통 SparkContext를 만들어 Spark 클러스터와 통신 수행
    • Cluster Manager (YARN의 경우 Resource Manager)
    • Executor (YARN의 경우 Container)

Executor

  • 실제 태스크를 실행해주는 역할 수행(하나의 Executor는 하나의 JVM이라고 보기): Transformations, Actions
  • YARN의 컨테이너

Spark cluster 매니저 옵션

  • local[n]  *[n] 몇개의 cpu 코어 를 쓸건지, JVM안에 몇개의 쓰레드를 사용하는지, [*]은 컴퓨터에 있는 모든 코어 사용
  • YARN (cluster모드/client모드-드라이버가 YARN 클러스터 안에 있는지/밖에 있는지에 따라)
  • Kubernetes
  • Mesos
  • Standalone