ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spark Driver Program 알아보기
    Spark 2023. 12. 6. 06:19
    728x90
    반응형

    - 목차

     

     

    소개.

    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
Designed by Tistory.