[HADOOP] Job, Stage, Task

yozzum·2023년 10월 8일
0

Spark

목록 보기
6/21
  1. Spark Application, Job, Stage, Task

  • 하나의 Application은 하나 이상의 Job을 수행할 수 있으며, 동일한 Application에서 수행된 이전 Job에서 caching된 RDD에 접근할 수 있는 매커니즘도 있다.

  • Job은 항상 RDD 및 공유변수를 제공하는 Application의 SparkContext 내에서 실행된다.

  • 하나의 Map과 하나의 Reduce로 구성된 단일 MapReduce의 Job과는 다르게, Spark의 job은 방향성 비순환 그래프(DAG)인 Stage
    로 구성된다.

  • Spark가 실행될 때 Stage는 여러 Task로 분할되고, 각 Task는 MapReduce의 Task와 같이 cluster에 분산된 RDD partition에서 병렬로 실행된다.

  1. Spark Application의 Job 제출

  1. Spark Job은 한 개 이상 transformation을 거친 RDD에 count()와 같은 action이 호출될 때 자동을 제출된다. (내부적으로는 SparkContext의 runJob()이 호출된다)

  2. 요청을 DAG 스케줄러에 전달한다.

  3. DAG 스케줄러는 전체 스테이지의 DAG를 구성한 후 개별 스테이지의 Task 집합을 Task 스케줄러에 넘긴다.

    • 이때 Task 스케줄러는 해당 애플리케이션이 실행되는 익스큐터의 목록을 찾고 배치 우선권이 있는 익스큐터에 각 태스크를 매핑한다. 그 다음에 빈 코어가 있는 익스큐터에 Task를 할당한다.
  4. 태스크가 할당되면 스케줄러의 백엔드에서 구동을 위한 작업이 시작된다.

  5. 스케줄러 백엔드는 익스큐터 백엔드에 태스크를 구동하라는 원격 메세지를 보낸다.

  6. 익스큐터는 해당 태스크를 실행한다.

  7. 첫번째로 태스크의 JAR 및 파일 의존성을 검사하여 최신인지 확인한다. 두번째로 Task 구동 메세지의 일부로 전송된 직렬화 바이트를 사용자 함수가 포함된 Task 코드로 역직렬화한다. 세번째로 Task 코드를 수행한다. 이 때 Task는 익스큐터와 동일한 JVM에서 실행되므로 Task 실행에 따른 프로세스 오버헤드는 없다.

  8. Task는 드라이버에 결과를 반환할 수 있다. 그 결과는 직렬화되어 익스큐터 백엔드로 전송된다. 그리고 상태변경 메세지를 드라이버에 돌려준다. 셔플 맵 태스크는 다음 스테이지를 위해 출력 파티션에 대한 정보를 반환하고, 결과 태스크는 처리한 파티션의 결곽값을 반환한다. 드라이버는 반환된 값을 취합하여 최종결과를 사용자 프로그램에 돌려준다.

※ 스파크는 원격 호출에 하둡 RPC를 사용하지 않고, 고확장성의 이벤트 기반 분산 애플리케이션을 구축할 수 있는 액터 기반 플랫폼인 Akka를 사용한다.

※ 스케줄러는 두 부분으로 구성된다. DAG스케줄러는 Job을 Stage의 DAG로 구분하고, Task 스케줄러는 각 Stage의 관련 Task를 클러스터에 제출한다.

profile
yozzum

0개의 댓글