spark

아파치 스파크 첫 걸음

PSAwesome 2021. 1. 4. 12:33
반응형

 

오픈소스 범용 분산 클러스터 컴퓨팅 프레임워크

인메모리 기반 대용량 고속 처리 엔진

클러스터 연산 플랫폼

인메모리 방식의 분산 처리 시스템 - 메모리에 분산 저장 및 병렬 처리 구조

스파크 공식 문서 내용 중

  • 스트리밍과 배치(일괄) 작업에서 높은 성능

 

구조

스파크 공식 문서 내용 중

스파크 SQL은 구조적 데이터 처리에 초점을 두어, R과 파이썬 pandas의 DataFrame을 사용한다.

 

 

지원하는 인터페이스

  • JSON
  • HDFS
  • 아파치 하이브
  • JDBC
  • 아파치 ORC
  • 아파치 파케이 Parquet (열 지향 데이터 스토리지 형식)

 

 

스파크 코어

  • 전체 기초가 되는 기초 분산 작업 처리
  • 장애복구, 네트워킹, 보안, 스케줄링 및 데이터 셔플링 등의 기본 기능 제공
  • Resilient Distributed Dataset RDD로 다양한 연산 및 변환 메서드 제공
  • HDFS, 아마존 S3와 같은 클라우드 저장소 파일 시스템에 접근이 가능
  • 스파크 잡과 다른 스파크 컴포넌트에 필요한 기능 제공

 

Spark SQL

  • 스파크와 하이브 SQL이 지원하는 SQL을 사용해 대규모 분산 (RDB)정형 데이터 처리
  • JSON, Paruet 파일, RDB, 테이블, 하이브 테이블 등의 정형 데이터 읽기 & 쓰기 가능
  • DataFrame과 dataset에 적용된 연산을 일정 시점에 RDD 연산으로 변환하여 일반 스파크 잡으로 실행

 

Spark Streaming - 

  • 실시간 스트리밍 데이터를 처리하는 프레임워크
  • HDFS, 아파치 카프카, 아파치 플럼(Flume), 트위터, ZeroMQ 등의 커스텀 리소스 사용 가능
  • 이산 스트림 방식으로 스트리밍 데이터 표현 - 가장 마지막 타임 윈도 안에 유입된 데이터를 RDD로 구성해 주기적으로 생성
  • 다른 스파크 컴포넌트와 같이 사용할 수 있어 실시간 데이터 처리를 머신러닝, SQL, Graph연산 등의 통합 가능

 

Spark ML-lib

  • RDD 또는 DataFrame의 데이터 셋을 변환하는 머신 러닝 모델을 구현

 

Spark GraphX

  • 정점과 두 정점을 잇는 간선으로 구성된 데이터 구조
  • 그래프 RDD 형태의 그래프 구조를 만들 수 있는 기능 제공
  • 그래프 데이터는 Vertex(VertexRDD)와 Edge(EdgeRDD)로 구성

 

Spark 동작: Cluster Manager

  • 클러스터에 한 개가 존재
  • 여러 서버로 구성된 클러스터 환경에서 다수 application이 구동될 수 있도록 application 간의 CPU나 메모리, 디스크와 같은 컴퓨팅 자원을 관리
  • 스케줄링 담당
  • Standalone: 스파크가 독립적으로 작동할 수 있음
  • YARN: 하둡의 리소스 매니저 (하둡과 스파크는 상호 독립적)
  • Mesos: 분산 커널 시스템
  • Kubernetes - Kuberflow (머신러닝이 적용된)

 

Driver

  • SparkContext와 RDD 생성
  • Transformation / Action 두 가지의 연산 존재
  • 사용자 코드 실행, main()문과 같은 역할을 하는 프로세스

 

SparkContext

  • 어떻게 클러스터에 접근할 수 있는지 알려주는 Object
  • Worker Node 내 Executor 간 통신 발생
  • Driver는 Executor에게 Task를 할당
  • Executor에서는 Task를 수행하고 종료 시 (Context의 상위인)Driver에게 결과 값을 주게 됨

Worker Node

  • 실제 작업 수행 노드
  • Executor
    • 주어진 스파크 작업의 개별 Task를 실행하는 작업 실행 프로세스
    • 애플리케이션을 구성하는 작업을 실행 -> Driver로 결과를 전송
    • 사용자 프로그램에서 캐시하는 RDD를 저장하기 위한 메모리 저장소 제공
  • Task: Executor에 할당되는 작업의 단위

 

 

구조의 변화

RDD -> DataFrame -> DataSet

RDD - 2011

JVM 위에서 동작하는 객체

map, filter와 같은 메서드가 지원됨

 

DataFrame - 2013

Distribute collection

logical plans and optimizer

 

DataSet - 2015

Internally rows, externally JVM object

Best of both worlds - type safe + fast

But slower then DF Not as good for interactive analysis, especially python

 

RDD

스파크의 처리 모델 RDD

스파크에서 내부적으로 연산하는 데이터들은 모두 RDD 타입으로 처리

데이터를 다루는 방법까지 포함하는 클래스 개념에 가까움

대량의 데이터를 요소로 가지는 분산 컬렉션

RDD 내부는 파티션이라는 단위로 구분

RDD 내부는 배열/리스트 등의 요소를 저장하며 여러 파티션(분산 처리 단위)로 구분

분산 파일 시스템이 있는 파일 내용을 RDD로 로드하고, RDD를 가공하는 형식으로 대량의 데이터를 분산처리

Immuatable RDD 복구 가능

 

RDD 연산의 종류

Transformation

  • 작업 실행 프로세스 (개별 TASK를 실행)
  • 기존 RDD 내용에서 새로운 RDD 생성 (pandas.copy())

Action

  • RDD 요소들을 이용해 어떤 결과값을 얻어내는 연산
  • return 값이 RDD가 아닌 다른 타입의 값

Partition

  • 하나의 RDD는 여러 개의 파티션으로 나누어짐
  • 성능에 유효한 영향을 줌
  • 파티션의 갯수, 파티셔너는 선택 가능
  • 기본 파티셔너(hash, range) 외에도 사용자 정의 가능

 

반응형

'spark' 카테고리의 다른 글

install spark on mac os - 스파크 시작  (0) 2022.12.20
Spark ML package  (0) 2021.01.19
Spark - RDD  (0) 2021.01.05