1.Spark 기초
- hadoop이 1세대라면 스파크 2세대 빅데이터 처리 기술
- YARN등을 분산환경으로 사용
- Scala로 작성됨
- 등장
- 버클리 대학 AMPLab에서 아파치 오픈소스 프로젝트로 2013년 시작
- Databricks 스타트업 창업
- Spark 3.0 구성
- Spark Core: pandas의 데이터 프레임과 같음
- Spark SQL
- Spark ML: scikit learn의 분산 버전
- Spark Streaming
- Spark GraphX
- 자체 서버 엔진을 들고있는게 아니라 하둡(YARN), Kubernetes 와 같은 resource 매니저 위에서 돌아감
- Spark vs MapReduce
- Spark
- 기본적으로 메모리 기반 → 메모리 부족시 디스크 사용
- 하둡(YARN) 이외에도 다른 분산 컴퓨팅 환경 지원(K8s, Mesos)
- pandas 데이터 프레임과 개념적으로 동일한 데이터 구조 지원
- 다양한 방식의 컴퓨팅 지원 → 배치 데이터 처리, 스트림 데이터 처리, SQL, 머신러닝, 그래프 분석
- MapReduce
- 디스크 기반
- 하둡(YARN) 위에서만 동작
- 키와 밸류 기반 데이터 구조만 지원
- Spark
- Spark 프로그래밍 API
- RDD(Resilient Distributed Dataset)
- 로우 레벨 프로그래밍 API로 세밀한 제어가능
- 코딩 복잡도 증가
- DateFrame & Dataset(판다스의 데이터 프레임과 흡사)
- ML 피처 엔지니어링, Spark ML 사용하는 경우
- SQL만으로 할 수 없는 일의 경우
- RDD(Resilient Distributed Dataset)
- Spark SQL
- 구조화된 데이터를 SQL로 처리
- pandas도 동일 기능 제공
- Hive 쿼리 보다 최대 100배 빠른 성능을 보장한다고 하지만
- 사실은 Hive도 메모리 쓰는걸로 발전
- Hive: 디스크 → 메모리
- Spark, Presto: 메모리 → 디스크
- Spark ML
- 머신러닝 관련 다양한 알고리즘, 유틸리티로 구성된 라이브러리
- Classification, Regression, Clustering, Collaborative Filtering, ..
- RDD 기반(spark.mllib) vs 데이터 프레임 기반
- spark.mllib는 RDD 위에서 동작하는 이전 라이브러리로 더이상 업데이트 안됨
- spark.ml 사용할 것
- 장점은 원스톱 ML framework
- Spark ML을 이용해 모델 빌딩
- ML Pipeline을 통해 모델 빌딩 자동화
- MLflow로 모델 관리하고 서빙(MLOps)
- 대용량 데이터 처리 가능
- 어떤 일을 하는지
- ETL, ELT, 비구조화 데이터 → 구조화 데이터 → Hive 대체 기술
- ML 모델에 사용되는 대용량 데이터 feature 처리(배치, 스트림)
- Spark ML을 이용한 대용량 데이터 모델 학습
2.Spark 프로그램의 구조
- Driver
- 내가 만든 코드가 돌아가는 서버
- 싱행되는 코드의 마스터 역할 수행
- YARN의 Application Master
- Executor
- 실제 태스크를 실행해주는 역할 수행
- YARN의 컨테이너
- SparkSession을 생성부터 시작
3.Spark 데이터 시스템 아키텍쳐
- 자체 저장소, 리소스 매니저 없음
- 클라우드 저장소: AWS S3, HDFS, Azure Blob, GCP Cloud storage
- Resource manager: Hadoop(YARN), K8s
- 그 위에 돌아가는 application
- 주기적인 ETL(ELT)로 내외부 데이터를 처리 및 저장
- 실시간 데이터 처리 가능
- 데이터 병렬처리
- 우선 데이터가 먼저 분산 돼야함.
- Spark에서는 데이터 처리 단위(디스크에 있는 데이터 블록)을 partition이라 부름
- partition 기본크기 128MB
- 즉, 데이터를 블록(partition) 단위로 나누고 병렬로 처리하는 거임
- 파티션이 서버보다 많다면 큐잉 발생
- 적절한 partition 수 = Executor 수 * Executor 당 CPU 수
- 셔플링
- 파티션간 데이터 이동이 필요한 경우 발생
- 명시적 파티션을 새롭게 하는 경우, ex) 파티션 수 줄이기
- 시스템에 의한 셔플링, ex) 그룹핑 등의 aggregation, sorting, join
- 셔플링이 발생할 때 네트웍을 타고 데이터가 이동하게 됨
- spark.sql.shuffle.partitions이 결정
- 기본값은 200이며 최대 파티션 값
- 오퍼레이션에 따라 파티션 수 설정
- random, hashing partition, range partition 등
- sorting의 경우 range partition 사용
- spark.sql.shuffle.partitions이 결정
- Data Skew 발생
- 데이터가 균등하게 분포하지 않은 경우
- 주로 셔플링 이후에 발생
- 셔플링을 최소화 하는것이 중요하고 파티션 최적화 하는 것이 중요
- 파티션간 데이터 이동이 필요한 경우 발생
300x250
반응형
'Data Engineering > 프로그래머스 study 11기' 카테고리의 다른 글
[프로그래머스] 데이터 엔지니어 study - 8주차 (0) | 2023.03.11 |
---|---|
[프로그래머스] 데이터 엔지니어 study - 4주차 (0) | 2023.02.10 |
[프로그래머스] 데이터 엔지니어 study - 3주차 (0) | 2023.02.01 |
[프로그래머스] 데이터 엔지니어 study - 2주차 (0) | 2023.01.17 |
[프로그래머스] 데이터 엔지니어 study - 1주차 (0) | 2023.01.07 |