Resilient Distributed Dataset
- Transformation
- 결괏값으로 새로운 RDD를 반환
- Lazy Execution(지연 실행)
- Narrow와 Wide가 존재
- map(), flatMap(), filter(), distinct(), reduceByKey(), groupByKey() 등
- Narrow Transformations
- 1:1 변환
- filter(), map(), flatMap(), sample(), union()
- 1열을 조작하기 위해 다른 열/ 파티션의 데이터를 쓸 필요가 없음
- 정렬이 필요하지 않은 경우
- 즉 한 열에서 다른 열로 변환될 수 있는 경우에만 사용
- Wide Transformation
- Shuffling
- Intersection and join, distinct, cartesian, reduceByKey(), groupByKey()
- 아웃풋 RDD의 파티션에 다른 파티션의 데이터가 들어갈 수 있음
- 데이터가 다른 파티션도 왔다 갔다 하기 때문에 많은 리소스 요구
Spark Topology
- Spark Topology
- Spark는 Master와 Worker로 나뉘어 있음
- Spark
- Spark는 항상 데이터가 여러 곳에 분산되어 있음
- Spark는 같은 연산이어도 여러 노드에 걸쳐서 실행
- Driver Program(노드)은 개발자나 유저가 프로그램과 상호작용을 할 수 있는 노드
- 실제 작업은 Worker Node에서 실행
- Driver Program과 Worker Node는 Cluster Manager를 통해 communication 진행
- Cluster Manager는 수행되는 작업의 스케쥴링과 자원 관리를 수행 (yaml 등)
- 실행 과정
- Driver Program이 SparkContext를 생성하면 Spark Application 만들어짐
- SparkContext가 Cluster Manager에 연결
- Cluster Manager는 자원 할당
- Executor는 연산을 수행하고 데이터 저장 Cluster Manager가 Cluster에 있는 노드들의 Executor를 수집
- SparkContext가 Executor에게 실행할 task 전송
- 전송된 Task들을 결과값을 DriverProgram에 보냄