[Spark] 스파크 개요

baekdata·2022년 2월 22일
1

Spark

목록 보기
1/8
post-thumbnail

분산 데이터 아키텍쳐와 Spark 개요

  • MPP (Massively Parallel Processing)
    - 대량 데이터 병렬 처리
    - 여러 개의 별도의 하드웨어에서 개별 데이터 처리를 병렬로 수행
    - 문제점은 비용이 비쌈
  • HDFS (Hadoop File System) / Map Reduce
    - 구글 파일 시스템을 기반으로, 자바로 만들었음
    - 복잡한 비즈니스에 적용하기에는 한계가 있었음
  • 스파크 특징
    - RDD, DataFrame, SQL 기반의 데이터 처리 추상화
    - DAG 기반의 실행 최적화
    - In-Memory 기반 수행
    - 맵 리듀스 대비 빠른 수행 시간과 자원 최적화
  • 스파크에 대한 약간의 오해
    - 하둡보다 100배 빠르다? 특정 상황에서는 가능, 일반적으로는 몇 배 정도 빠를 수 있는 것
    - 인 메모리 특화 기능을 가지고 있다? 최근 데이터를 메모리에 저장하는 기능을 가지고 있지만, 이건 일반 DBMS도 가지고 있는 기능임
    - 데이터 프로세싱에 있어 혁신적인 기술을 이끌고 있다? 스파크에서 발전시키고자 하는 프로세싱은 이미 MPP DB에서 연구하고 지원되고 있는 기능이 대부분임
  • 그럼, 스파크의 장점은?
    - SW 라이센스 비용 없이 대용량 데이터를 처리하기 위한, (현시점)에서 가장 가성비가 뛰어남
    - 대용량 DW 영역에서 영역 확장 중
    - 다양한 오픈 소스 에코 시스템 지원하며, 오픈 소스 기반 대량 데이터 처리의 중심 솔루션으로 자리 매김함

Spark 아키텍쳐와 RDD 개요

  • 스파크 주요 구성 요소
    - Spark SQL (데이터 웨어하우징)
    - Spark Streaming (실시간 데이터 분석)
    - MLlib (머신 러닝)
    - GraphX

  • 스파크 아키텍쳐
    - Executor가 작업
    - Worker Node의 집합이 Cluster
    - Cluster Manager가 부하를 확인해서 어느 쪽 노드로 보낼지 배분
    - 이런 셋업 작업은 데이터 브릭스를 사용하면 할 필요 없고, 이미 구성된 구조를 사용하면 됨

  • RDD (Resilient Distributed Dataset)
    - 직역하면, 회복력있는 분산된 데이터 집합
    - 스파크의 기본 데이터 구조
    - 여러 분산 노드에 걸쳐 저장되는 변경이 불가능한 데이터(객체)의 집함
    - 각각의 RDD는 여러개의 파티션으로 분리 됨 (서로 다른 노드에서 분리되서 실행)
    - 맵 리듀스는 각 맵-리듀스 단계마다 중간 결과를 재사용함으로 인해서 속도가 느려짐. 이를 보완
    - RDD는 분산 데이터 세트를 위한 스파크의 데이터 추상화
    - 사실은, RDD로 비즈니스 기반의 구조를 만들기는 쉽지 않아서 데이터 프레임이 더 사용됨

Spark의 RDD, DataFrame, SQL 비교

  • 스파크의 데이터 프레임과 SQL
    - RDD보다 Dataframe을 사용하는 것이 훨씬 데이터 처리 로직 구현이 편리함
    - SQL을 사용하는 것이 Dataframe을 사용하는 것보다 조금 더 편리

  • SQL 대비 Dataframe의 장점
    - 머신 러닝 학습 데이터 생성 등 다른 Spark Component들과의 Inferface 제공
    - SQL에서 커버하지 못하는 데이터 처리 기능
    - Loop 기반에서 보다 쉬운 데이터 처리
    - 보다 쉬운 컬럼명 변경, 컬럼값 Update
    - 사용자 정의 함수의 손쉬운 실행

  • 여러 언어를 지원하는 Spark
    - Scala, Java, Python, R, Spark SQL, Spark MLlib, Spark GraphX, Spark Streaming, Spark R 등

Spark Machine Learning 개요

  • Spark MLlib 연혁
    - 초기에는 RDD 기반이였고, 현재는 DataFrame 기반 (2.0 이후)
  • 타 ML 패키지와의 차별점
    - 데이터 전처리를 SQL 레벨에서 수행하거나 기존의 ETL 로직에 포함시킬 수 있음
  • Spark ML vs Scikits-Learn
    - 사이킷런은 단일 서버(멀티 CPU 코어 병렬 처리 수행)에서만 구동, 스파크 ML은 분산 서버에서 구동 가능
    - 사이킷런은 학습 데이터가 단일 서버의 메모리에 수용하지 못하면 수행 불가
    - 사이킷런은 더 많은 ML 알고리즘 지원하고 API의 유연성/통합성/확장성이 Spark ML 보다 뛰어남
    - 판다스와 넘파이가 병렬 처리가 안되므로 대용량 데이터의 경우 수행 성능이 저하됨
    - 병렬 처리가 필요하지 않는 수준의 데이터 셋에서는 사이킷런을 이용하는 것이 더 나은 선택임
  • 스파크에서 머신러닝은 파이썬이 유리함. 기존 파이썬 머신러닝 관련 다양한 패키지 (사이킷런, 넘파이, 판다스 등)을 그대로 사용 가능. 다만, 분산 병렬이 안됨
profile
글쓰는 데이터 분석가

0개의 댓글