스파크 익스큐터에 대한 간단한 설명
- 스파크 클러스터의 워커 노드에서 실행되는 프로세스
- 스파크 드라이버에 의해 할당된 작업을 실행하는 역할
스파크 익스큐터는 스파크 어플리케이션의 핵심 역할
- 실제로 데이터에 대한 계산을 수행
스파크 드라이버가 클러스터에 작업을 제출했을 때
- 작업은 태스크라는 작업 단위로 나눠짐
- 태스크들은 스파크 클러스터 내의 이용 가능한 익스큐터에 실행되도록 예약됨
- 익스큐터는 태스크들을 병렬로 실행하고 결과를 다시 드라이버로 반환
익스큐터가 실행될 때
- 특정 양의 메모리와 CPU 리소스가 할당
- 이 메모리를 사용하여 계산 중 빠른 액세스를 위해 데이터를 메모리에 저장
- 익스큐터는 캐시, 디스크에 저장된 데이터를 관리하며, 데이터가 노드 간에 교환되어야 하는 셔플 작업도 처리
기본적인 스파크 클러스터
- 각 노드당 하나의 익스큐터를 생성
- 다만, 스파크 어플리케이션에 따라 익스큐터의 수를 조정 가능
- 익스큐터의 수는 스파크 어플리케이션의 성능에 영향을 미칠 수 있음
- 사용 가능한 자원과 데이터 처리 작업의 특성을 고려하여 적절한 수를 선택하는 것이 중요
스파크 어플리케이션에 따른 다양한 익스큐터 종류
- Default Executor
- Coarse-Grained Executor
- Fine-Grained Executor
- External Executor
스파크 익스큐터의 주요 구성 옵션
Executor Memory : --executor-memory
- 각 익스큐터에 할당된 메모리의 양
Executor Cores : --executor-cores
- 각 익스큐터에 할당된 CPU 코어의 수
Number of Executors : --num-executors
- 익스큐터의 수
Executor Garbage Collection
- Garbage Collection 알고리즘
Overhead Memory : --executor-memory-overhead
- JVM 오버헤드 및 오프-힙 버퍼와 같은 시스템 프로세스를 위해 예약된 메모리 양
Shuffle Memory : --spark.shuffle.memoryFraction
- 셔플 작업에 할당된 메모리 양
스파크 익스큐터 성능에 영향을 미칠 수 있는 요인
메모리
- 메모리 부족 상태가 되면 데이터를 디스크로 이동해야 할 수 있고, 이는 처리 속도가 느려질 수 있음
CPU
- 익스큐터가 필요한 코어를 할당받지 못하면 병목 지점이 돼 처리 속도가 느려질 수 있음
네트워크
- 익스큐터는 데이터를 교환하기 위해 서로 통신함
- 느린 네트워크 연결은 데이터 전송 지연으로 처리 속도가 느려질 수 있음
데이터 분포
- 특정 노드가 다른 노드보다 많은 데이터를 처리해야 할 경우 처리 속도가 느려질 수 있음
작업 정밀도
- 작업이 너무 작으면 작업 스케줄링 및 데이터 전송에 관련된 오버헤드가 많아져 처리속도가 느려질 수 있음
- 작업이 너무 크면 완료까지 시간이 오래 걸려 처리속도가 느려질 수 있음
스파크 익스큐터의 일반적인 사용 사례
- 데이터 처리
- 머신러닝
- 스트리밍 데이터 처리
- 그래프 처리
- 대화형 분석
- 배치 처리
'Data Engineering > Spark' 카테고리의 다른 글
[Spark] Partition, Parquet 파일 크기 (0) | 2024.05.08 |
---|---|
[Spark] Spill, 직렬화 메커니즘 (0) | 2024.05.08 |
[Spark] 스파크란 무엇인가? (0) | 2023.04.21 |
[Spark] conda로 pyspark 환경 구축하기 (0) | 2023.01.14 |
[Spark] ValueError: field score: This field is not nullable, but got None (0) | 2023.01.14 |