일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- programmers
- 프로그래머스
- 파이썬
- kibana
- CentOS
- 스파크
- 엘라스틱서치
- elasticsearch
- Easy
- leetcode
- 깊이우선탐색
- Optimization
- twosum
- 키바나
- 장고
- Medium
- Algorithm
- dfs
- 알고리즘
- 해시
- solution
- ELK
- dump
- 리트코드
- RecommendationSystem
- AWS
- Django
- Spark
- python
- daspecialty
- Today
- Total
Archive
[Spark] Spark Application 에 대한 이해 ( Job / Stage / Task / Transformation / Action / Lazy Evaluation ) 본문
[Spark] Spark Application 에 대한 이해 ( Job / Stage / Task / Transformation / Action / Lazy Evaluation )
enent 2022. 8. 11. 21:181. Spark Application
Spark로 제출되는 Job들은 Task라는 저수준 RDD Byte Code로 변환되어 Executor 들에 분산된다.
Application
Spark 위에서 돌아가는 사용자 프로그램. Driver Program + Executor를 칭함
SparkSession
Spark Core 기능들과 상호 작용할 수 있는 진입점을 제공하는 객체이다. Spark Application 에서는 사용자가 직접 Spark Session 객체를 생성해야 한다.
Job
Spark Action 에 대한 응답으로 생성되는 여러 Task들로 이루어진 병렬 연산.
Spark Driver는 Spark Application을 하나 이상의 Job으로 변환하고, 각 Job은 DAG(실행계획)로 변환된다. DAG에서의 각각 Job Node들은 하나 이상의 Spark Stage에 해당한다.
Stage
Dependency를 가지는 다수의 Task 들의 모음.
Parallel 하거나 Continuous 하게 수행될 수 있는 작업을 기반으로 생성되며 일종의 물리적인 실행 계획을 담은 Dag라고 볼 수 있다.
Task
Executor에서 실행되는 가장 작은 실행 단위.
각 Task는 개별 CPU Core에 할당되고, 데이터의 개별 partition을 가지고 작업하게 된다. 만약 16 core를 가진 executor라면, 16개 이상의 partition을 갖는 16개 이상의 Task를 할당받아 작업하게 된다.
2. Transformation / Action / Lazy Evaluation
Spark의 연산은 크게 Transformation / Action으로 구분할 수 있다.
Transform
원본 데이터를 수정하지 않고 새로운 Dataframe을 만들어 내는 연산
Action
결과 값을 계산하여 Driver로 Return 하거나 External Storage ( ex. S3, HDFS 등)에 저장하는 연산
Lazy Evaluation
Spark의 연산은 Transform과 Action으로 이루어져 있다. 모든 Transformation은 호출된 직후 처리되지 않으며 Action을 호출하기 전까지 Lineage로서 기록만 해둔다. 기록된 Lineage들을 모아 Logical Execution Plan을 형성하고 후반이 되어서야 Optimizer를 통한 최적화를 한다. 즉, Action이 실행되는 시점이나 실제 Storage로부터 데이터를 읽거나 쓰는 연산을 하기 전까지 실제 Spark 연산을 미루는 것, 다시 말하면 Action이 실행될 때 Lineage를 기반으로 최적화된 Transformation 실행 계획을 따라가며 실제 연산이 실행된다.
Lazy Evaluation이 가능하기 때문에 Query Opzimizing을 지원하고 (연산 Query를 분석하여 어떤 부분을 Optimize 진행해야 하는지 알 수 있음), Lineage로 기록하기 때문에 Fault Tolerance를 지원한다. (Lineage를 재실행시키면 똑같은 결과를 얻을 수 있기 때문)
Narrow Transformation / Wide Transformation
Narrow Transformation
하나의 Partition을 연산하여 하나의 Partition 생성 (ex. filter(), contains() 등 데이터 교환 없이 결과 partition 생성해 내는 함수들)
Wide Transformation
여러개의 Partiton의 데이터를 읽어와 합쳐서 하나의 Partition 생성 (ex. groupBy(), orderBy() 등)
Reference
Learning Spark(2nd) - 2. Downloading Apache Spark and Getting Started
'------- DE ------- > Spark' 카테고리의 다른 글
[Spark] Spark Web UI (0) | 2022.08.25 |
---|---|
[Spark] BroadCast Hash Join(BHJ) / Shuffle Sort Merge Join(SMJ) (0) | 2022.08.21 |
[Spark] Core of Spark SQL Engine ( Catalyst Optimizer / Tungsten ) (0) | 2022.08.19 |
[Spark] Spark ( Architecture / Deploy Mode / Partition ) (0) | 2022.08.09 |
[Pyspark] Spark Structured Streaming v3.2.1 - 1. Programming Model (0) | 2022.05.24 |