Spark ML 소개
Spark ML 소개
Spark ML
- 머신러닝 관련 다양한 알고리즘, 유틸리티로 구성된 라이브러리
- 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 (추천) : 명시적인 피드백(리뷰 평점)과 암묵적인 피드백 기반(클릭, 구매)
- 딥러닝은 기능이 미약
- RDD 기반과 데이터 프레임 기반 버전이 존재
- 항상 spark.ml을 사용할 것 :spark.mllib는 RDD 기반, spark.ml은 데이터 프레임 기반
Spark ML의 장점
- 원스톱 ML 프레임워크
- 데이터 프레임과 Spark SQL 등을 이용해 전처리
- Spark ml를 이용해 모델 빌딩
- ML Pipeline을 통해 모델 빌딩 자동화
- MLflow로 모델 관리 및 서빙
- 대용량 데이터 처리도 가능
MLflow
- 모델의 관리와 서빙을 위한 Ops 관련 기능 제공
- 모델 개발과 테스트, 관리, 서빙까지 제공해 주는 End-to-End 프레임워크
- Python, Java, R, API 지원
- 트래킹(Tracking), 모델(Models), 프로젝트(Projects) 지원
Spark ML 기반 모델 빌딩 기본 구조
- 다른 라이브러리를 사용한 모델 빌딩과 크게 다르지 않음
- 훈련 데이터 전처리
- 모델 빌딩
- 모델 검증
- Scikit-Learn과 비교했을 때 장점
- 데이터의 크기 : Scikit-Learn은 하나의 컴퓨터에서 동작, Spark ML은 여러 서버 위에서 동작
- Spark은 ML Pipeline을 통해 모델 개발의 반복을 쉽게 해 줌
Spark ML 실습 : ML 모델 만들어보기
보스턴 주택 가격 예측
- 1970년대 미국 인구조사 서비스에서 보스턴 지역의 주택 가격 데이터를 기반으로 모델 빌딩
- 개별 주택가격 예측이 아닌 지역별 중간 주택가격 예측 (Regression)
- 훈련 데이터
- 총 506개의 레코드
- 13개의 피쳐와 레이블 필드(주택 가격)로 구성
- 예제 코드
타이타닉 승객 생존 예측
- 생존 혹은 비생존을 예측 (Binary Classification)
- AUC (Area Under the Curve)의 값이 중요한 성능 지표가 됨
- 훈련 데이터
- 총 892개의 레코드
- 11개의 피쳐와 레이블 필드(생존 여부)로 구성
- 예제 코드
Spark ML의 transform
- 입력 데이터 프레임에 하나 이상의 컬럼을 붙여서 반환해 주는 메서드
- VectorAssembler : 기존 필드를 조합 및 변환을 통한 feature 컬럼이 추가되어 반환
- LinearRegression : prediction 컬럼이 추가되어 반환
- Imputer : null 값을 특정 값으로 대체한 컬럼이 추가되어 반환
- StringIndexer : 문자열 컬럼을 숫자로 인코딩한 컬럼이 추가되어 반환
Spark ML Pipeline 살펴보기
모델 빌딩과 관련된 문제
- 훈련 데이터의 관리가 안됨
- 모델 훈련 방법이 기록이 안됨
- 어떤 훈련 데이터를 사용했는가
- 어떤 피쳐들을 사용했는가
- 하이퍼 파라미터는 무엇을 사용했는가
- 모델 훈련에 많은 시간 소요
- 모델 훈련이 자동화가 안된 경우 매번 각 스텝을 노트북 등에서 직접 수행
- 에러가 발생할 여지가 많음
ML Pipeline
- 데이터 과학자가 머신러닝 개발과 테스트를 쉽게 해주는 기능 (데이터 프레임 기반)
- 머신러닝 알고리즘에 관계없이 일관된 형태의 API 사용
- ML 모델 개발과 테스트를 반복 가능하게 해 줌
- 구성 요소
- DataFrame : 데이터 프레임이 기본 데이터 포맷이며, csv, json, parquet, JDBC 지원
- Transformer :입력 데이터 프레임을 하나 이상의 컬럼을 추가한 데이터 프레임으로 변환
- Estimator : 머신러닝 알고리즘에 해당, fit이 메인 함수 (입력 : 훈련데이터, 출력 : 머신러닝 모델)
- Parameter : Transformer와 Estimator의 공동 API로 다양한 인자를 적용 (하이퍼 파라미터)
클라우드 기반 Spark 클러스터
AWS Spark 클러스터 론치
AWS에서 Spark을 실행
- EMR(Elastic MapReduce) 위에서 실행하는 것이 일반적
- EMR
- AWS의 Hadoop 서비스 (On-demand Hadoop)
- Hadoop(YARN), Spark, Hive, Notebook 등이 설치되어 제공
- EC2 서버를 worker node로 사용하고 S3를 HDFS로 사용
- AWS 내의 다른 서비스와 연동이 쉬움 (Kinesis, DynamoDB, Redshift 등)
Spark on EMR
- AWS의 EMR 클러스터 생성
- EMR 생성 시 Spark 실행 (옵션으로 선택), S3를 기본 파일 시스템으로 선택
- EMR의 마스터 노드를 드라이버 노드로 사용
- 마스터 노드를 SSH로 로그인 (spark-submit 사용)
- Spark의 Cluster 모드에 해당
- EMR 클러스터 생성 과정
- Spark / Zeppelin이 포함된 옵션 선택
- 클러스터 사양(m5.xlarge 노드 3개) 선택 : (4CPU + 16GB) * 2
- EMR 클러스터 생성 완료
- 마스터 노드의 포트번호 22번 열기
- Spark History Server 확인
- Zeppelin Web UI에 접속
- Zeppelin : Spark를 편하게 사용하기 위한 노트북
- EMR에서 지원하는 Web UI에 접속하기 위해서는 SSH Connection이 허용돼 있어야 함
- 설명에 따라 SSH 터널링, 크롬 익스텐션 설치 후 configuration 작업이 이뤄져야 함
'[프로그래머스] 데이터 엔지니어링 데브코스 3기 > TIL(Today I Learn)' 카테고리의 다른 글
[TIL - 67일 차] Kafka와 Spark Streaming 기반 스트리밍 처리 (2) (0) | 2024.06.25 |
---|---|
[TIL - 66일 차] Kafka와 Spark Streaming 기반 스트리밍 처리 (1) (0) | 2024.06.24 |
[TIL - 64일 차] 하둡과 Spark (4) (0) | 2024.06.20 |
[TIL - 63일 차] 하둡과 Spark (3) (0) | 2024.06.19 |
[TIL - 62일 차] 하둡과 Spark (2) (0) | 2024.06.18 |