Spark & Hadoop/Spark

[Spark] Spark 소개 및 Spark관련 정보 모음 (Spark 구성요소, 작동방식 등)

YSY^ 2024. 5. 5. 21:17

Spark 란

  • 버클리 대학의 AMPLab에서 아파치 오픈소스 프로젝트
  • 대규모 데이터를 처리하기 위한 클러스터 컴퓨팅 프레임워크 
  • Java로 개발되었으며 Python, Sql, Scala등의 언어들을 지원하여, 어떤 언어로 개발하든 성능에 큰 이슈 없도록 설계
  • Hadoop와 달리 MapReduce 로직중 Map를 메모리에서 처리하기에 Hadoop보다 속도가 빠름
  • 빅데이터 처리 관련 다양한 기능 제공
  • https://spark.apache.org/releases/spark-release-3-5-0.html
 

Spark Release 3.5.0 | Apache Spark

Spark Release 3.5.0 Apache Spark 3.5.0 is the sixth release in the 3.x series. With significant contributions from the open-source community, this release addressed over 1,300 Jira tickets. This release introduces more scenarios with general availability f

spark.apache.org

Spark의 다양한 기능

Spark와 MapReduce 비교

  Spark MapReduce
데이터 처리 방법 메모리 기반이며 메모리가 부족해지면 디스크 사용 디스크 기반
분산 컴퓨팅  하둡(YARN)이외에도 다른 분산 컴퓨팅 환경 지원 (K8s, Mesos)  하둡(YARN)위에서만 동작
데이터 구조 Pandas DataFrame과 개념적으로 동일한 데이터 구조 지원 키와 밸류 기반 데이터 구조만 지원
컴퓨팅 방식 다양한 방식의 컴퓨팅을 지원 
(EX.배치 데이터 처리, 스트림 데이터 처리, SQL, 머신 러닝, 그래프 분석)
배치 데이터 처리만 가능

- CF) MapReduce 관련 내용 : https://ysyblog.tistory.com/347

 

[Hadoop] 맵리듀스(MapReduce) Programming

맵리듀스 프로그래밍 특징 큰 데이터를 처리할 수 있는데에 목표 데이터 셋의 포맷도 하나로 단순화하였고, 변경 불가 데이터 셋의 포멧은 Key, Value의 집합이며 변경 불가(immutable) 데이터 조작은

ysyblog.tistory.com

 

Spark의 파일을 읽는 방식

1. Schema on read

  • 파일을 읽은 순간 사용자가 읽는 데이터의 Schema를 확정하는 방식
  • Spark는 별도의 Schema 데이터를 주지 않으면, 사용자가 읽는 파일의 일부 레코드를 보고 타입을 추론
  • 따라서 타입이 헤더에 명시된 parquet등의 형식이 아닌 json, csv같은 텍스트 데이터는 실제 물리적으로 저장된 데이터와 Spark가 읽어들인 데이터가 다를 수 있음

2. Column 기반 파일 저장

출처 : https://image1.slideserve.com/3103565/row-vs-column-stores-n.jpg

  • 기본적으로 파일은 일렬로 된 배열의 Binarary 파일로 구성
  • Row 기반으로 파일을 저장하는 경우 파일을 메모리에 올리는 속도는 빠르나, 특정 컬럼만 필요한 경우 해당 컬럼만 가져올 수 없음 (Row는 가변 배열)
  • Spark에서는 필요한 Column만 읽어 메모리에 올릴 수 있도록 Column기반 파일 저장 방식 선호 (EX. Parquet, ORC)
  • 따라서 Spark를 사용할 때는 필요한 컬럼만 읽어올 수 있더록 Select나 Filter를 잘 사용해야함

CF) Parquet이란 : https://ysyblog.tistory.com/372

 

[Spark] Spark 파일 Type 종류 및 Pyspark로 데이터 Write하는 방법 (Parquet / AVRO)

데이터 포멧 종류 데이터는 디스크에 파일로 저장 Unstructured와 Semi-structured만 Human Readable함 하려는 일에 맞게 최적화 필요 Unstructured Semi-structured (Type 정보가 없음) Structured (Type 정보가 있음) Text JS

ysyblog.tistory.com

 

Spark Application

YARN에 제출된 job을 Spark Application이라고 함

CF) YARN이란 : https://ysyblog.tistory.com/407

 

[Hadoop] YARN (Yet Another Resource Nagotiator) (YARN의 구성요소와 작동방식)

YARN세부 리소스 관리가 가능한 범용 컴퓨팅 프레임웍각 Application (MapReduce, HBase 등) 실행에 필요한 Resource(Cpu, Memory, Disk)를 할당하고 모니터링MapReduce의 단점을 극복하기 위해 하둡 2.0부터 제

ysyblog.tistory.com

출처 : https://velog.io/@6v6/SparkSession-SparkContext-%EC%B0%A8%EC%9D%B4

  • SparkSession, SparkContext, HiveContext. SQLContext은 모두 Class중 하나
  • SparkContext : spark2.x 이전에 모든 Spark 애플리케이션의 진입점이며, 모든 Spark기능에 엑세스 할 수 있는 메인 채널
  • Spark 2.0에서는 SparkContext만 있었지만, 한 사용자가 다수의 SparkContext를 생성하거나, 하나의 컴퓨터에 여러 사용자가 접근하는등 SparkContext를 격리하기 위해 상위개념인 SparkSession 추가
  • 일반적으로 SparkSession을 sc변수명으로 사용함.

CF) SparkSession이란 : https://ysyblog.tistory.com/360

 

[Spark] SparkSession 생성과 환경변수 세팅

Spark Session 생성 Spark 프로그램의 시작은 SparkSession을 만드는 것 프로그램마다 하나를 만들어 Spark Cluster와 통신: Singleton 객체 Spark 2.0에서 처음 소개됨 Spark Session을 통해 Spark이 제공해주는 다양한

ysyblog.tistory.com

Spark Driver, Executor

https://ysyblog.tistory.com/352

 

[Spark] Spark 프로그램 구조

Spark 프로그램 실행 환경 개발/테스트/학습 환경 (Interactive Clients) 노트북 (주피터, 제플린) Spark Shell 프로덕션 환경 (Submit Job) spark-submit (command-line utility): 가장 많이 사용됨 데이터브릭스 노트북:

ysyblog.tistory.com

Spark Action의 구성요소(Job, Stages, Tasks)와 Spark의 연산

https://ysyblog.tistory.com/375

 

[Spark] Spark Action의 구성요소(Job, Stages, Tasks)와 Spark의 연산 (Transformations /Actions / Lazy Execution)

Job, Stages, TasksAction -> Job -> 1+ Stages -> 1+ Tasks (큰 순서대로) Action Job을 하나 만들어내고 코드가 실제로 실행됨Lazy Execution Job 하나 혹은 그 이상의 Stage로 구성됨 Stage는 Shuffling이 발생하는 경우 새로

ysyblog.tistory.com

 

Spark Run on YARN with HDFS

https://www.geeksforgeeks.org/hdfs-data-read-operation/

  • Spark의 여러개의 Task를 수행하는 Executor들이 HDFS NameNode에 접근하여 파일 IO요청 진행
  • Namenode는 요청한 파일 데이터 블록을 가지고 있는 Datanode중에 한 개의 접속 위치를 Executor에게 알려줌
  • Executor는 해당 Datanode에 가서 데이터를 가져옴
  • 가져온 데이터의 크기가 spark.sql.files.maxpartitionBytes 수보다 크면 (보통 128MB) 쪼개서 Partition으로 잡고 그렇지 않으면 1개 Partition으로 처리

Spark 데이터 처리 방식 (Partition, Shuffle, Spill)

https://ysyblog.tistory.com/358

 

[Spark] Spark 데이터 처리 방식 (Partitioning, Shuffling, Spill) (InputPartition, OutputPartition, ShufflePartition)(Range

Spark 데이터 시스템 아키텍처큰데이터를 ETL하거나 일시적으로 데이터를 select할때는 hive나 presto도 상관 없음하지만 spark가 각광받는 이유는 하나의 시스템으로 다양한 것들을 할 수 있기 때문외

ysyblog.tistory.com

 

Spark 데이터 구조

https://ysyblog.tistory.com/359

 

[Spark] Spark 데이터 구조 (RDD, DataFrame, Dataset)

Spark 데이터 구조 RDD, DataFrame, Dataset (Immutable Distributed Data) RDD가 가장 밑바닥에 있고, 그 위해 DataFrame과 Dataset가 있음 RDD는 할 수 있는 것은 많지만, 프로그래밍 생산성이 떨어짐. python을 쓴다면 Dat

ysyblog.tistory.com

  1. RDD (Resilient Distributed Dataset)
    • 로우레벨 프로그래밍 API로 세밀한 제어가 가능 
    • 코딩 복잡도 증가하여 최근에는 잘 쓰이지 않음
  2. DataFrame & Dataset (Pandas의 DataFrame과 비슷)
    • 하이레벨 프로그래밍 API로 점점 많이 사용되는 추세
    • 구조화 데이터 조작이라면 보통 Spark SQL을 사용
    • DataFrame/Dataset이 필요한 경우
      • ML 피쳐 엔지니어링을 하거나 Spark ML을 쓰는 경우
      • SQL만으로 할 수 없는 일의 경우

Spark SQL

https://ysyblog.tistory.com/category/Spark%20%26%20Hadoop/Pyspark%20%26%20SparkSQL

 

'Spark & Hadoop/Pyspark & SparkSQL' 카테고리의 글 목록

데이터분석/인과추론/머신러닝/Python/SQL/Spark/통계 등 데이터 분석과 관련된 모든 것을 정리합니다.

ysyblog.tistory.com

  1. Spark SQL은 구조화된 데이터 처리를 SQL로 처리
  2. 데이터 프레임을 SQL로 처리 가능
    • 데이터프레임은 테이블처럼 sql로 처리 가능
    • 판다스도 동일 기능 제공
  3. 과거에는 Hive 쿼리 보다 빠른 성능을 보장하였었음
    • 다만 Hive도 메모리를 쓰는 걸로 발전하였기에 큰 차이가 없어졌음
    • Hive: 디스크 -> 메모리
    • Spark: 메모리 -> 디스크
    • Presto: 메모리 -> 디스크

Spark ML

https://ysyblog.tistory.com/category/Spark%20%26%20Hadoop/SparkML

 

'Spark & Hadoop/SparkML' 카테고리의 글 목록

데이터분석/인과추론/머신러닝/Python/SQL/Spark/통계 등 데이터 분석과 관련된 모든 것을 정리합니다.

ysyblog.tistory.com

  1. 머신러닝 관련 다양한 알고리즘, 유틸리티로 구성된 라이브러리
  2. Classification, Regression, Clustering, Collaborative Filtering 등..
  3. spark.mllib(RDD 기반)과 spark.ml(데이터프레임) 기반의 두 버전이 존재
    • spark.mllib는 RDD위에서 동작하는 이전 라이브러리로 더 이상 업데이트가 안됨
    • 항상 spark.ml을 사용할 것
    • import pyspark.ml (import pyspark.mllib)
  4. SparkML의 장점 : One-Stop ML FrameWork 
    • 머신러닝과 관련된 Action을 한곳에서 할 수 있으며 대용량의 훈련 데이터를 처리하는 것이 용이
    • 데이터프레임과 SparkSQL등을 이용해 전처리
    • Spark ML을 이용해 모델 빌딩
    • ML Pipeline을 통해 모델 빌딩 자동화
    • MLflow로 모델 관리하고 서빙 (MLOps)
    • sklearn같이 서버한대에서만 돌아가는 머신러닝 라이브러리와 큰 차이를 보인다.

Spark 데이터 시스템 사용 활용방법 예시

  • 기본적으로 대용량 데이터 배치 처리, 스트림 처리, 모델 빌딩

1. 대용량 비구조화된 데이터 처리하기 (Batch Processing, ETL 혹은 ELT)

  • Hive를 대체

2. ML 모델에 사용되는 대용량 피쳐 처리 (배치/스트림)

3. Spark ML을 이용한 대용량 훈련 데이터 모델 학습

 

참고자료

728x90
반응형