본문 바로가기

데이터엔지니어링

[11주차] 하둡과 Spark (5)

🙂 Spark ML

  • 머신러닝 관련 다양한 알고리즘, 유틸리티로 구성된 라이브러리
  • spark.mllib(RDD) vs. spark.ml(DataFrame)

✔ 장점

  • 원스톱 ML Framework
    • 데이터 프레임과 SparkSQL 등을 이용해 전처리
    • Spark MLlib을 이용해 모델 빌딩
    • ML Pipeline을 통해 모델 빌딩 자동화
    • MLflow로 모델 관리하고 서빙

 

✔ MLflow

  • 모델 관리와 서빙을 위한 Ops 관련 기능 제공
    • 모델 개발과 테스트와 관리와 서빙까지 제공해주는 End-to-End Framework
    • 파이썬, 자바, R, API를 지원
    • Tracking, Models, Projects 지원

 

✔ 제공 알고리즘

  • Classification
    • Logistic regression, Decision tree, Random forest, Gradient-boosted tree, ..
  • Regression
    • Linear regression, Decision tree, Random forest, Gradient-boosted tree,  ...
  • Clustering
    • K-means, LDA, GMM, ...
  • Collaborative Filtering
    • 명시적인 피드백 (리뷰 평점)
    • 암묵적인 피드백 (클릭, 구매 등)

 

✔ 모델 빌딩 기본 구조

  1. 트레이닝셋 전처리
  2. 모델 빌딩
  3. 모델 검증 (confusion matrix)

🍦 Scikit-Learn과 비교했을 때 장점

  • 데이터 크기
  • ML 파이프라인을 통해 모델 개발의 반복이 용이

🙂 Spark ML Pipeline

모델 빌딩과 관련된 흔한 문제들

  • 트레이닝 셋의 관리가 안됨
  • 모델 훈련 방법이 기록이 안됨
    • 어떤 트레이닝 셋을 사용했는지
    • 어떤 피쳐들을 사용했는지
    • 하이퍼 파라미터는 무엇을 사용했는지
  • 모델 훈련에 많은 시간 소요
    • 모델 훈련이 자동화가 안된 경우 매번 각 스텝들을 노트북 등에서 일일이 수행
    • 에러 발생 여지

✔ 개념

  • 데이터 과학자가 ML 개발과 테스트를 쉽게 해줌
  • ML 알고리즘에 관계없이 일관된 형태의 API를 사용하여 모델링 가능
  • ML 모델개발과 테스트를 반복가능
  • 4개의 요소로 구성
    • DataFrame
    • Transformer
    • Estrimator
    • Parameter

🍦 DataFrame

  • ML 파이프라인에서는 DataFrame이 기본 데이터 포맷
  • 기본적으로 CSV, JSON, Parquet, JDBC(RDBMS)를 지원
  • ML 파이프라인에서 새로운 데이터 소스 지원
    • 이미지
    • LIBSVM
      • label과 features 두 개의 컬럼으로 구성되는 ML 트레이닝셋 포맷
      • features 컬럼은 벡터 형태의 구조를 가짐

🍦 Transformer

  • 입력 데이터프레임을 다른 데이터프레임으로 변환
    • 하나 이상의 새로운 컬럼을 추가
  • 2 종류의 Transformer가 존재
    • Feature Transformer
      • 입력 데이터프레임의 컬럼으로부터 새로운 컬럼을 만듦
      • Feature Engineer에 사용
        • Imputer: 기본값 지정에 사용
        • StringIndexer: categorical 정보를 숫자 정보로 변환
        • VectorAssembler: 주어진 컬럼을 통합하여 하나의 벡터 컬럼으로 변환
          Feature Transformer
    • Learning Model
      • 머신러닝 모델
      • Feature DataFrame을 입력으로 받아 예측값이 새로운 컬럼으로 포함된 DataFrame을 출력
        • prediction, probability
  • transform이 메인 함수

🍦 Estimator

  • 머신러닝 알고리즘
  • fit이 메인 함수
  • 트레이닝셋 DataFrame을 입력으로 받아 모델(Transformer)을 만듦
    • 입력: DataFrame
    • 출력: ML 모델
  • LogisticRegression - Estimator
  • LogisticRegression.fit() - Transformer (ML 모델)
  • ML Pipeline도 Estimator
    • 실행은 fit함수의 호출로 시작
  • Estimator는 저장과 읽기 함수 제공

Estimator

🍦 Parameter

  • Transformer와 Estimator의 공통 API로 다양한 인자를 적용
  • 두 종류의 파라미터
    • Param(하나의 이름과 값)
    • ParamMap(Param 리스트)
  • 파라미터는 fit (Estimator) 혹은 transform(Transformer)에 인자로 저장 가능

🙂 AWS Spark

EMR 위에서 실행하는 것이 일반적

✔ EMR (Elastic MapReduce)

  • AWS의 Hadoop 서비스 (On-demand Hadoop)
  • EC2 서버를 worker node로 사용하고 S3를 HDFS로 사용
  • AWS 내의 다른 서비스들과 연동이 용이 (Kinesis, DynamoDB, Redshift)

🍦 실행 및 사용 과정

  • AWS의 EMR 클러스터 생성
  • EMR 생성 시 Spark를 실행 (옵션 선택)
    • S3를 기본 파일 시스템으로 사용
  • EMR의 마스터 노드를 드라이버 노드로 사용
    • 마스터 노드를 SSH로 로그인
    • Spark의 Cluster 모드에 해당
클러스터 매니저 실행 모드 프로그램 실행 방식
local[n] Client Spark Shell, IDE, 노트북
YARN Client Spark Shell, 노트북
YARN Cluster spark-submit