Data Engineering/프로그래머스 study 11기

[프로그래머스] 데이터 엔지니어 study - 7주차

히또아빠 2023. 2. 26. 19:43

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 프로그래밍 API
    • RDD(Resilient Distributed Dataset)
      • 로우 레벨 프로그래밍 API로 세밀한 제어가능
      • 코딩 복잡도 증가
    • DateFrame & Dataset(판다스의 데이터 프레임과 흡사)
      • ML 피처 엔지니어링, Spark ML 사용하는 경우
      • SQL만으로 할 수 없는 일의 경우
  • 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 사용
    • Data Skew 발생
      • 데이터가 균등하게 분포하지 않은 경우
      • 주로 셔플링 이후에 발생
      • 셔플링을 최소화 하는것이 중요하고 파티션 최적화 하는 것이 중요
300x250
반응형