Spark Study - 용어를 익히자! (feat. spark architecture)

2021. 10. 28. 13:19Study/Study group

반응형
spark의 주요 컴포넌트는 드라이버와 익스큐터이며 모두 jvm 프로세스이다.

드라이버 : 애플리케이션,  메인 프로그램이 들어가있다.
spark-shell을 사용하고 있다면 spark-shell은 드라이버 프로그램이 되고,
드라이버는 클러스터에 익스큐터를 시작 시키고 태스크 실행을 제어한다.

익스큐터 : 클러스터의 워커 노드에서 실행 중인 프로세스이다.
익스큐터 내부에서 개별 태스크나 계산이 실행된다.

클러스터 관리자 : 클러스터를 구성하는 계산 노드 전체에 대해 자원 예약과 자원 할당을 담당한다.
종류에는 독립형, 얀, 메소스, 쿠버네티스가 있다.

스파크 프로그램의 주요 진입점은 SparkContext이다.
SparkContext는 드라이버 컴포넌트 내부에 있으며, 스케줄러, 태스크 배포, 오케스트레이션을 실행하는 코드와 함께
클러스터에 대한 커넥션을 의미한다.

spark 2.x에서 SparkSession이라는 새로운 변수가 도입 됐다.
SparkContext, SQLContext, HiveContext는  이제 SparkSession의 멤버 변수이다.

드라이버 프로그랩을 시작하면 커맨드는 SparkContext를  통해 클러스터에 전달되고, 여러 익스큐터에 해당 잡을 실행한다.
클러스터에서 SparkContext는 RDD, 누산기, 브로드캐스트 변수를 생성할 때 사용할 수 있다.
JVM(자바) 프로세스당 하나의 SparkContext만 활성화할 수 있으며 새로운 SparkContext를 생성하기 전에 활성화된 
SparkContext에 stop을 호출해야한다.

드라이버는 코드를 파싱하고 실행될 익스큐터에 바이트 레벨 코드를 직렬화한다.
계산을 수행할 때 인메모리 처리를 사용해 각 노드별로 로컬 레벨에서 실제로 계산이 수행된다.
코드를 파싱하고 실행 계획을 세우는 과정은 드라이버 프로세스에 의해 구현되는 핵심요소다.

참고) https://www.analyticsvidhya.com/blog/2021/08/understand-the-internal-working-of-apache-spark/
책에서는 스파크 서브밋으로 설명이 안돼있다보니 조금 헷깔리는 부분이 생겼다.
내가 이해한 내용은 spark shell(REPL)이든 spark submit이든 드라이버 프로그램을 시작하게하는 친구들이라고 이해했다.
드라이버 프로그램이 동작하게 되면 SparkContext를 통해 클러스터에 전달(내부적으로 DAG형태로 코드를 파싱 및 직렬화), 
클러스터 매니저가 워커노드(익스큐터)를 수행하는 구조로 이해했다.

여기서 같이 스터디를 하는 크루는 spark-submit을하게 되면 클러스터 매니저에 올려진 뒤 드라이버 프로그램이 동작한다는 것이였다.

아직 결론은 나지 않았는데 좀 더 찾아봐야겠다.
과연..?! spark-submit을 하게되면 드라이버 프로그램이 클러스터에서 수행이 될까?
아니면 외부에서 드라이버 프로그램을 수행되며 수행 시 DAG를 만들어 클러스터와 통신하는 구조일까?  

지금껏 스파크로 서비스를 한적도 있지만 구체적으로 내부적인 아키텍처를 이해하고 만든적은 없었는데
이번 스터디를 통해 스파크 아키텍처에 대해 알게 된것 같다.


이런 토론과 스터디는 나를 성장시킨다.

  끝.

반응형