-
Spark Driver Program 알아보기Spark 2023. 12. 6. 06:19728x90반응형
- 목차
소개.
Spark Driver Program 에 대해서 알아보려고 합니다.
아래의 이미지는 Spark Driver Program 와 Spark Cluster 사이의 관계를 나타낸 그림입니다.
Driver Program 은 실제 Spark 프로그램 코드가 작성된 실행 프로세스입니다.
아래와 같은 형식으로 작성된 Spark 프로그램 코드가 있다고 했을 때,
아래 프로그램이 실행된 Process 가 Driver Program 이 됩니다.
import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.SparkConf; public class SparkRDDExample { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("SparkRDDExample").setMaster("local"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD<Integer> numbersRDD = sc.parallelize(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); JavaRDD<Integer> squaredRDD = numbersRDD.map(num -> num * num); JavaRDD<Integer> evenNumbersRDD = squaredRDD.filter(num -> num % 2 == 0); List<Integer> results = evenNumbersRDD.collect(); sc.stop(); } }
이 Driver Program 은 Spark Processing 과정에서 여러가지 역할을 수행하게 되는데요.
이번 글에서는 Driver Program 에 대해서 알아보려고 합니다.
Driver Program 의 역할.
Driver Program 은 Spark 코드가 작성된 프로그램이 Process 로써 동작하는 것이라고 말씀드렸습니다.
그래서 Driver Program 이라고 부르지만 편히 하나의 프로세스라고 생각하셔도 됩니다.
Driver Program 이 수행하는 중요한 역할들에 대해서 알아보겠습니다.
Logical Execution Plan.
Driver Program 은 Transformation 과 Action 들로 구성됩니다.
어떤 Spark Program 이 "RDD.filter().map().flatMap().collect()" 처럼 구성되어 있다고 가정하겠습니다.
이는 3개의 Transformation 과 1개의 Action 을 가집니다.
Transformation 은 각각 filter, map, flatMap 입니다.
Action 은 collect 가 되죠.
Driver Program 은 Transformation 이 동작한 새로운 RDD 를 계속 만들게 되며,
RDD1 = RDD0.filter( f1 ); RDD2 = RDD1.map( f2 ); RDD3 = RDD2.flatMap( f3 );
새로운 RDD 들은 Transformation Lambda Function 과 이전 RDD 의 기록은 가지게 됩니다.
예를 들어, 아래와 같은 RDD 형태가 됩니다.
RDD3.prev = RDD2 RDD3.f = flatMap Function RDD2.prev = RDD1 RDD2.f = map Function RDD1.prev = RDD0 RDD1.f = filter Function
혹시 Lazy Evaluation 에 대해서 들어보셨는지 모르겠습니다.
Lazy Evaluation 은 RDD 에 적용된 Transformation 연산이 즉각 수행되지 않고, Action 이 호출될 때까지 연산이 지연됨을 뜻합니다.
그래서 위 3개의 Transformation 은 즉각적으로 연산되지 않고,
Logical Plan 을 만들고, Optimization 하는 과정만이 수행됩니다.
마지막으로 Collect Action 이 수행되면, Evaluation 이 수행됩니다.
이 단계에선 Spark Cluster 와 소통이 시작되는데요.
현재 리소스 상태에 맞도록 적절한 Physical Execution Plan 이 만들어지며,
Stage, Task 가 생성되어 Spark Cluster 로 전달됩니다.
Driver Program 은 Spark 프로그램 코드를 실제로 수행하며,
Action 이 호출되는 시점에 Spark Cluster 에게 적절한 Task 수행을 지시합니다.
Resource Management.
Spark Driver Program 은 Lazy Evaluation 에 따라 Action 이 수행될 때까지
RDD, Dataset 의 Logical Execution Plan 을 만듭니다.
흔히 DAG 를 구성한다고 표현하죠.
그리고 Action 이 수행될 때, Physical Execution Plan 을 만들게 되는데요.
이 단계에서 현재 리소스의 상태가 어떤지 Spark Cluster 와 소통하게 됩니다.
만약, CPU Core 가 충분하다면 더 많은 Task 를 만들 수 있고, 빠른 처리가 가능해집니다.
이 단계에서 Spark Cluster 의 Master Node 와 소통하게 됩니다.
Master Node 는 다른 말로 Cluster Manager 라고 불립니다.
Cluster Manager 를 통해서 현재 Spark Cluster 의 적절한 리소스 현황을 알 수 있게 됩니다.
이후 Spark Driver Program 은 적절한 Task 를 Worker Node 에 할당하게 됩니다.
Task Scheduling.
위에서 언급한 "Driver Program 이 적절한 Task 를 Worker Node 에 할당" 한다는 의미가 바로 Task Scheduling 입니다.
Driver Program 내부에 Task Scheduling 을 위한 기능 또한 존재합니다.
이는 직접 구현해야하는 영역을 아니며, Spark Context 내부에서 동작합니다.
Cluster Manager 와 통신을 통해 얻어낸 Spark Cluster 의 리소스 현황을 토대호 Task Scheduling 이 수행되죠.
Action 결과 받아오기.
Spark Driver Program 은 Action Task 를 수행하는 Worker Node 와 소통합니다.
Action 을 끝마친 Worker Node 는 그 결과를 Driver Program 에 전달합니다.
Driver Program 은 spark.driver.bindAddress, spark.driver.port 설정을 통해서 Listening 하는 포트를 설정할 수 있습니다.
Worker Node 는 Action 결과를 Driver Program 에게 전달합니다.
이것이 Lazy Evaluation 이 동작하는 내부적인 내용입니다.
반응형'Spark' 카테고리의 다른 글
Spark DataFrame 알아보기 (0) 2023.12.15 Helm 으로 Spark 구축하기 (0) 2023.12.15 [Spark] SparkSQL CSV 파일 Aggregation 하기 (0) 2023.10.03 [Spark] Spark Lazy Evaluation 알아보기 (0) 2023.05.22 [Spark] RDD 로 숫자 처리하기 (0) 2023.01.19