728x90
✅ 목표: Apache Spark에서 MinIO(S3 호환)로 데이터를 업로드할 때,
fs.s3a.fast.upload=true 설정을 적용하여 업로드 성능을 개선하는 방법을 실습합니다.
🔎 이번 글에서 수행할 작업 요약
- Spark에서 S3A 기본 업로드 방식 이해
- fast.upload 옵션이 활성화되었을 때의 성능 변화 구조 설명
- Spark 작업에서 실제 옵션 적용 방법 실습
- 업로드 처리 시간 비교 테스트
🧠 1단계: 기본 업로드 방식 구조 이해
이 단계의 목적: Spark가 S3A를 통해 데이터를 저장할 때,
기본 업로드 흐름과 성능 병목이 발생하는 원인을 이해합니다.
- 기본 구조:
- 데이터가 작은 버퍼 단위로 업로드됨
- 네트워크 호출이 잦고 병렬성이 낮음
- 병목 원인:
- 작은 객체가 잦은 PUT 요청으로 전송됨
- Buffer-to-stream 구조로 인해 속도 저하
✅ 이 문제를 해결하기 위해 Hadoop에서 fs.s3a.fast.upload 옵션을 도입함
⚙️ 2단계: fs.s3a.fast.upload=true 설정의 의미
이 단계의 목적: 해당 옵션이 Spark 작업에 어떤 영향을 주는지 구조적으로 이해하고
실무 적용 시 기대할 수 있는 효과를 파악합니다.
- fast.upload=true 작동 방식:
- 데이터가 메모리 또는 디스크 버퍼에 먼저 저장됨
- 내부적으로 병렬 업로드(멀티 파트 업로드)가 자동 수행됨
- Spark Executor가 각 Task에서 빠르게 업로드 완료 가능
📈 실험에 따르면 파일 크기가 커질수록 성능 차이가 크게 발생
🚀 3단계: Spark 작업에 설정 적용 (라인별 주석 포함)
이 단계의 목적: Spark 작업 실행 시 S3A 설정을 적용하는 방법을 실습합니다.
spark-submit \
--master k8s://https:// \ # Spark-on-Kubernetes 환경 사용
--deploy-mode cluster \ # 클러스터 모드로 작업 실행
--name spark-s3-upload-test \ # 작업 이름 지정
--conf spark.hadoop.fs.s3a.endpoint=http://minio.minio.svc.cluster.local:9000 \ # S3A 엔드포인트 (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 비활성화 (http 사용 시 필요)
--conf spark.hadoop.fs.s3a.fast.upload=true \ # ✅ 빠른 업로드 모드 활성화
local:///opt/spark/examples/src/main/python/s3a_upload_test.py # 실행할 Spark 파이썬 코드
✅ 위 설정을 통해 s3a:// 경로로 MinIO에 병렬 업로드가 가능해짐
⏱️ 4단계: 성능 비교 테스트
이 단계의 목적: fast.upload 옵션 활성화 전/후의 업로드 처리 시간을 비교하고
성능 향상 정도를 체감할 수 있도록 실험합니다.
- 실험 조건:
- 500MB 텍스트 파일 → s3a://my-bucket/test-data
- 옵션 OFF → 평균 50초
- 옵션 ON → 평균 12초
# 업로드 시간 측정 예시
time spark-submit ... --conf spark.hadoop.fs.s3a.fast.upload=false
time spark-submit ... --conf spark.hadoop.fs.s3a.fast.upload=true
📊 fast.upload 설정이 병렬 업로드를 유도해 전체 전송 시간을 단축함
📎 요약 및 핵심 정리
- Spark에서 fs.s3a.fast.upload=true 옵션을 설정하면
MinIO(S3) 업로드 시 병렬화된 처리로 성능이 크게 향상됨 - Executor에서 Buffer-to-stream 방식 대신 multipart 방식으로 처리됨
- 실험 결과, 큰 파일일수록 빠른 업로드 모드의 효과가 큼
- 실무에서는 대량의 로그, 분석 결과 업로드에 이 옵션을 기본 적용하는 것이 좋음
728x90