https://github.com/seilylook/spark_core_experiments
Experiments: Spark Core
https://github.com/seilylook/spark_core_experiments
makefile poetry pyenv pytest spark unittest
Last synced: about 1 month ago
JSON representation
Experiments: Spark Core
- Host: GitHub
- URL: https://github.com/seilylook/spark_core_experiments
- Owner: seilylook
- License: apache-2.0
- Created: 2025-01-31T09:09:32.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-03T09:36:31.000Z (over 1 year ago)
- Last Synced: 2025-04-03T02:14:40.809Z (about 1 year ago)
- Topics: makefile, poetry, pyenv, pytest, spark, unittest
- Language: Python
- Homepage:
- Size: 58.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## 1. 분산 데이터 처리의 강점 체험
Spark는 대규모 데이터를 병렬 처리할 수 있는 프레임워크야. 이를 제대로 느끼려면 데이터 크기와 분산 환경에서의 차이를 체험해야 해.
실습 아이디어:
- 단일 머신 vs. 클러스터:
1. 작은 데이터셋을 로컬 모드에서 Spark로 처리하고, 동일한 작업을 더 큰 데이터셋으로 클러스터 모드에서 처리해 봐.
2. 예시: 1억 개 이상의 행을 가진 CSV 데이터를 읽어 평균, 합계, 최대값 등을 계산.
3. 목표: 처리 시간 비교와 클러스터의 확장성 체험.
- Partition 이해:
1. 데이터를 repartition()과 coalesce()로 분할하고 각 작업이 클러스터에서 어떻게 분산되는지 확인.
2. Spark UI를 사용하여 각 노드에서 실행된 작업을 시각적으로 확인.
## 2. 다양한 데이터 소스와 포맷 실험
Spark는 단순히 CSV나 JSON뿐 아니라, Parquet, ORC, Avro 같은 효율적인 데이터 포맷과 다양한 데이터베이스를 지원해. 이를 활용하면 MySQL 같은 데이터베이스에서는 할 수 없는 복잡한 작업도 가능해.
실습 아이디어:
- Parquet와 CSV 비교:
1. 같은 데이터를 CSV와 Parquet로 저장한 후 읽기 및 처리 속도를 비교해.
2. 예시: 1GB 이상의 데이터를 CSV와 Parquet로 변환 후, 필터링 작업과 집계를 실행.
- 다양한 데이터 소스 활용:
1. AWS S3, Google Cloud Storage, HDFS에서 데이터를 로드하고 처리.
2. Kafka를 사용해 실시간 스트리밍 데이터를 읽고 분석.
3. MySQL, PostgreSQL에서 데이터를 Spark로 로드한 후 복잡한 조인 및 집계 처리.
## 3. 고급 API와 기능 활용
DataFrame API 외에도 RDD, Spark SQL, Structured Streaming, GraphX, MLlib 등을 활용하면 Spark만의 강력함을 제대로 느낄 수 있어.
실습 아이디어:
- Spark SQL로 복잡한 데이터 분석:
1. SQL 쿼리를 작성해 Spark DataFrame에서 복잡한 집계와 조인을 수행.
2. 예시: 사용자 활동 데이터를 분석해 "하루 평균 액티브 유저"와 같은 메트릭 계산.
- Structured Streaming:
1. Kafka에서 실시간 데이터를 읽어 분석.
2. 예시: 실시간 로그 데이터를 모니터링하여 에러 빈도를 실시간으로 집계.
- MLlib 활용:
1. Spark MLlib을 사용해 대규모 데이터에서 머신러닝 모델 학습.
2. 예시: 영화 추천 시스템 구축(ALS 알고리즘 사용).
## 4. 성능 튜닝과 최적화
Spark의 성능을 최적화하는 방법을 이해하면 일반적인 데이터베이스보다 몇 배 빠르게 작업할 수 있어. 특히 작업의 병렬성, 메모리 관리, Job 스케줄링을 튜닝해 보는 게 중요해.
실습 아이디어:
- Shuffling 최소화:
1. 조인과 그룹화 시 Shuffling을 줄이기 위해 broadcast()와 partitioning을 실험.
2. 예시: 대규모 데이터셋 간의 조인에서 Broadcast Join 사용 후 속도 비교.
- Cache와 Persist:
1. 데이터를 캐싱하거나 persist()를 사용해 작업 속도를 개선.
2. 예시: 반복적으로 사용되는 데이터셋을 캐싱한 후 쿼리 실행 시간을 비교.
- Execution Plan 분석:
1. explain()을 사용해 실행 계획을 분석하고, 성능 병목을 찾아내 최적화.
## 5. 실전 프로젝트 수행
이론만으로는 Spark의 진정한 장점을 느끼기 어려워. 실제 문제를 해결하는 프로젝트를 수행하면서 왜 Spark를 써야 하는지 명확히 알게 될 거야.
프로젝트 예시:
1. 대규모 로그 데이터 분석:
- 웹 서버의 로그 데이터를 수집하고, 접속 수와 에러 발생률을 분석.
- 실시간 분석과 배치 분석을 병행하여 처리.
2. 데이터 파이프라인 구축:
- 데이터 소스(AWS S3, Kafka 등)에서 데이터를 읽어 Spark로 처리 후 다른 스토리지로 저장(HDFS, Parquet 등).
- Spark Streaming을 활용해 실시간 데이터 파이프라인 구현.
3. 추천 시스템 구축:
- 대규모 사용자 행동 데이터를 기반으로 추천 시스템(ALS 알고리즘)을 개발.
- 성능 향상을 위해 데이터 파티셔닝 및 캐싱 최적화.
4. 금융 데이터 분석 (예: 네이버 파이낸스):
- 주식 데이터를 수집하고, 특정 기간 동안의 변동성을 계산하여 알람 시스템 구축.
## 6. Spark 코드 기여(Open Source 참여)
Spark의 오픈소스 프로젝트에 기여하면 내부 구조와 동작 원리를 깊이 이해할 수 있어. 이미 Spark에 관심이 있으니 이런 식으로 참여해 보는 건 어때?
활동 아이디어:
- Spark의 코드 리포지토리에서 DataFrame API나 Catalyst Optimizer를 연구.
- 새 기능 추가 요청(issue) 또는 버그 수정에 참여.
- 문서를 개선하거나 예제를 추가.
## 7. 클러스터에서의 실습
Spark의 진정한 힘은 분산 환경에서 발휘돼. 로컬 실행만 해서는 한계를 체감하기 어려워.
클러스터 실습 아이디어:
- AWS EMR, GCP Dataproc, 혹은 온프레미스 Kubernetes 클러스터에 Spark를 배포하고 작업 실행.
- 노드 수를 늘리거나 줄이면서 실행 시간과 자원 사용량 비교.
- YARN, Mesos 또는 Kubernetes 스케줄러를 직접 설정해 보고 차이점을 체험.
## 8. 주제별 집중 학습 로드맵
Spark에서 부족함을 느끼는 영역이 있다면 아래 주제들을 집중적으로 학습:
- Catalyst Optimizer: 쿼리 최적화를 이해하고 explain()을 통해 최적화 과정을 학습.
- Tungsten Engine: Spark의 메모리와 CPU 최적화 방법 체험.
- Structured Streaming: 실시간 데이터 처리 시 장애 복구 및 처리 보장 이해.