반응형

/*
-- Title : [Spk] Apache Spark 아키텍처
-- Tag : aparch spark architecture 아파치 스파크 아키텍처
*/


■ Spark 프레임워크(Framework)

https://www.youtube.com/watch?v=XCZk8J23mXM

ㅁ Spark Core

  • 스파크 전체의 기초가 되는 분산 작업 처리, 스케줄링, 입출력 기능
  • API 인터페이스(자바, 스칼라, 파이썬, R 등) 기능 제공
  • RDD 처리하는 로직 수행
Drive Program - 클러스터 구조의 master
- spark context에서 메인함수가 실행
- spark application의 정보 유지/관리 스케줄링 작업
Worker Node - 클러스터 구조의 slave
- 각 노드의 Executor가 작업 수행
- Task 단위 작업

https://www.youtube.com/watch?v=XCZk8J23mXM

ㅁ Cluster Manager

  • 각 애플리케이션이 얼마나 자원(Memory, CPU 등)을 사용할 지 조정
Standalone 단일 서버 자원 관리용으로 별도 설치 없이 Spark 자체에서 제공
Yarn 여러 대 서버를 관리용으로 별도 설치가 필요하며, 가장 많이 활용
Mesos 1만대 이상의 노드에도 대응 가능한, 웹기반의 UI, 자바, C++, 파이썬 API제공

ㅁ Spark Library

  • 빅데이터 처리를 위한 작업용 라이브러리
Saprk SQL 질의형 라이브러리 > 데이터 프레임을 SQL쿼리를 통해 처리 가능
Spark Straming 실시간 데이터 처리 라이브러리
MLlib 머신러닝 라이브러리 > keras, tensorflow 등 별도 설치하여 설치 가능
GraphX 그래프 라이브러리 > 페이지랭크,레이블 전파, 삼각 계수 등

ㅁ Data Source 

  • Spark는 메모리에 올려 데이터를 처리하기 때문에 별도 저장소 필요
  • HDFS(hadoop file system), S3, MYSQL, Elastic Search 등


■ Apache Spark 아키텍처

https://www.interviewbit.com/blog/apache-spark-architecture/

ㅁ 드라이버(Driver)

  • 드라이버는 C# 콘솔 앱과 같은 프로그램과 Spark 세션으로 구성
  • Spark 세션은 프로그램을 가져와서 실행기에서 처리하는 더 작은 작업으로 분할됨

ㅁ 실행자(Executors)

  • 각 실행기 또는 작업자 노드는 드라이버로부터 작업을 받고 해당 작업을 실행
  • 실행기는 클러스터라는 엔터티에 상주

ㅁ 클러스터 관리자

  • 클러스터 관리자는 드라이버 및 실행기 모두와 통신하여 다음을 수행
    - 리소스 할당 관리
    - 프로그램 분할 관리
    - 프로그램 실행 관리

ㅁ 언어 지원

  • Apache Spark에서 지원하는 프로그래밍 언어
    - 스칼라
    - Python
    - Java
    - SQL
    - R
    - .NET 언어(C#/F#)

ㅁ Spark API


■ Spark Application 구현방법

ㅁ RDD(Resilient Distributed Datasets)

  • 데이터 로드 시, 생성
  • 분산 노드에서 다수의 파티션으로 관리됨
  • RAM을 활용하면 속도는 빠르지만 장애 발생(Fault)하는 경우 수행한 작업이 전부 사라짐(휘발성) 
  • RDD(Resilient Distributed Datasets)라는 신규 개념 도입하여 RAM을 read-only로만 사용
  • 연산자 유형
    - Transaction : 실행 계획만 수립, map/filter/gropuby/union 등
    - Actioin : 수행결과를 제공하기 위해 작업 실행, count/take/collet 등
  • 데이터 처리 특징
    - Fault-tolerant : 어떻게 만들었는지 기록(Lineage)하여 장애에 문제가 없음
    - Lazy-Executioin : 지연 실행으로 자원의 배치를 최적화하여 분산 수행

http://aispiration.com/bigdata/bigdata-spark-mooc.html

ㅁ Dataframe / Dataset

https://www.databricks.com/glossary/what-is-rdd

  • 병렬 인메모리 처리를 위해 생성/엔진 로직도 사용자가 정의(논리적 이해 필요)
  • RDD 테이블 조인, 파티셔닝 등 효율을 사용자가 제어해야하므로 잘 모를경우 성능 저하 발생
  • RDD의 단점 보완을 위해 고안
Dataframe  - 사용자정의함수(UDF)를 사용 가능
 - 스키마를 가질 수 있게 자동화/최적화
 - Scala, Java, Python, R 지원
Dataset  - 스키마 필수
 - 사용자가 데이터를 객체화할 수있도록 하여 안전
 - Scala, java 지원

ㅁ RDD vs. Dataframe vs. Dataset

databricks.com


※ Resources
https://goeuntech.notion.site/1-Architecture-4221ac5dc585473eb568c68035885430
https://docs.microsoft.com/ko-kr/dotnet/spark/what-is-spark
databricks.com
https://www.interviewbit.com/blog/apache-spark-architecture/

 

반응형

+ Recent posts