An open API service indexing awesome lists of open source software.

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

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: 실시간 데이터 처리 시 장애 복구 및 처리 보장 이해.