728x90
✅ 목표: Apache Spark에서 Executor 수를 조절하며 MinIO로 데이터를 저장할 때
병렬성에 따른 성능 변화를 측정하고 최적의 리소스 설정을 도출해 봅니다.
🔎 이번 글에서 수행할 작업 요약
- Spark Executor 병렬 구조 이해 및 리소스 설정 포인트 정리
- Executor 수를 조절하며 MinIO 업로드 테스트
- 작업 처리 시간 및 S3 요청 수 비교
- 실험 결과를 기반으로 적정 Executor 수 도출
🧠 1단계: Spark Executor 구조와 리소스 설정 이해
이 단계의 목적: Spark Executor가 어떤 역할을 수행하며,
병렬성(Executor 수)이 데이터 처리에 어떤 영향을 주는지 이해합니다.
- Executor: Spark 작업 단위 실행 주체 (컨테이너 1개 = Executor 1개)
- 병렬화 영향:
- Executor 수가 많을수록 병렬성이 높아짐
- 너무 많으면 CPU/메모리 경합, 쓰기 병목 발생
- 리소스 설정 포인트:
- spark.executor.instances: Executor 수
- spark.executor.memory, spark.executor.cores: 단일 Executor 성능
⚙️ 2단계: Spark 업로드 작업에 병렬 Executor 적용 (라인별 주석 포함)
이 단계의 목적: spark-submit 명령어에서 Executor 수를 조절하고,
s3a://로 MinIO에 병렬 업로드 작업을 수행해 봅니다.
spark-submit \
--master k8s://https:// \ # Spark-on-Kubernetes 환경 지정
--deploy-mode cluster \ # 클러스터 모드 실행
--name spark-parallel-test \ # 작업 이름 지정
--conf spark.executor.instances=4 \ # ✅ 병렬 Executor 수 4개 지정
--conf spark.executor.memory=2g \ # Executor당 메모리 2GB
--conf spark.executor.cores=2 \ # Executor당 CPU 2코어
--conf spark.hadoop.fs.s3a.endpoint=http://minio.minio.svc.cluster.local:9000 \ # MinIO 엔드포인트
--conf spark.hadoop.fs.s3a.access.key=minioadmin \ # Access Key
--conf spark.hadoop.fs.s3a.secret.key=minioadmin \ # Secret Key
--conf spark.hadoop.fs.s3a.path.style.access=true \ # path-style 접근 방식
--conf spark.hadoop.fs.s3a.connection.ssl.enabled=false \ # SSL 비활성화
--conf spark.hadoop.fs.s3a.fast.upload=true \ # 빠른 업로드 모드 활성화
local:///opt/spark/examples/src/main/python/s3a_parallel_test.py # 테스트 코드 경로
✅ spark.executor.instances 수치를 조절하며 반복 실행할 예정
📊 3단계: 병렬성 변화에 따른 처리 시간 비교
이 단계의 목적: Executor 수를 1 → 2 → 4 → 8로 조정하며
업로드 소요 시간과 MinIO 요청량(S3 PUT 수)을 비교합니다.
Executor 수 | 평균 처리 시간 | S3 요청 수 (예시) |
1 | 52초 | 1,000 |
2 | 31초 | 1,900 |
4 | 17초 | 3,700 |
8 | 18초 | 7,300 |
✅ 병렬성 증가로 성능은 개선되지만, 일정 수준 이후엔 S3 요청 부하로 역효과 발생 가능
🧩 4단계: 적정 Executor 수 도출 및 고려사항
이 단계의 목적: MinIO의 처리 능력, PVC 성능 등을 고려해
가장 효율적인 Executor 수를 선택합니다.
- 고려 요소:
- PVC IOPS → 병렬 요청 처리 한계
- MinIO CPU/메모리 자원
- Spark 클러스터 노드 수
⚖️ 일반적으로 4~6개 Executor 사이가 성능과 안정성의 균형점
📎 요약 및 핵심 정리
- Spark 작업에서 Executor 수를 조절하면 병렬 업로드 성능에 큰 영향을 미침
- Executor 수 증가 → 처리 속도 개선되나, 일정 수준 이상은 부하 증가로 효과 감소
- 실험을 통해 클러스터 및 MinIO PVC가 감당 가능한 최적 Executor 수를 도출해야 함
- Spark 리소스 설정은 반드시 클러스터 리소스 한계와 병렬 I/O 처리 능력에 기반하여 결정해야 함
728x90