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 이 나누어지는 과정
- 하나의 spark application은 크게 driver에서 수행될 main과 executor에서 수행될 rdd(Dataset)부분으로 나눌 수 있음
- executor에서 수행될 작업은 하나 이상의 Job으로 변환되고, 각 Job은 하나 이상의 Spark Stage를 가짐
- Stage는 물리적인 실행 계획을 담은 DAG로, 여러 task를 가짐
- spark job이 spark application 수행 시 할당되는 과정
- executor에서 실행되는 가장 작은 실행 단위인 task는 여러 executor에 분산되어 실행되며 여러 executor를 거쳐 stage task들이 조정됨
2) spark on yarn
사실 client모드와 cluster 모드의 차이점은 driver가 어디에 뜨는지에 큰 차이가 있고 이외의 작업은 아주 비슷하게 흘러갑니다.
- –master yarn –deploy-mode client
- (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
- (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)