Data Engineering/s3 minio

📘 [MinIO & Cilium 기반 오브젝트 스토리지 연동 시리즈 #11] Spark Executor 병렬 요청으로 S3 업로드 성능 측정 실습

ygtoken 2025. 3. 26. 18:22
728x90

목표: Apache Spark에서 Executor 수를 조절하며 MinIO로 데이터를 저장할 때
병렬성에 따른 성능 변화를 측정하고 최적의 리소스 설정을 도출해 봅니다.


🔎 이번 글에서 수행할 작업 요약

  1. Spark Executor 병렬 구조 이해 및 리소스 설정 포인트 정리
  2. Executor 수를 조절하며 MinIO 업로드 테스트
  3. 작업 처리 시간 및 S3 요청 수 비교
  4. 실험 결과를 기반으로 적정 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