반응형
/*
-- Title : [Spk] Apache Spark 아키텍처
-- Tag : aparch spark architecture 아파치 스파크 아키텍처
*/
■ Spark 프레임워크(Framework)
ㅁ Spark Core
- 스파크 전체의 기초가 되는 분산 작업 처리, 스케줄링, 입출력 기능
- API 인터페이스(자바, 스칼라, 파이썬, R 등) 기능 제공
- RDD 처리하는 로직 수행
Drive Program | - 클러스터 구조의 master - spark context에서 메인함수가 실행 - spark application의 정보 유지/관리 스케줄링 작업 |
Worker Node | - 클러스터 구조의 slave - 각 노드의 Executor가 작업 수행 - Task 단위 작업 |
ㅁ 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 아키텍처
ㅁ 드라이버(Driver)
- 드라이버는 C# 콘솔 앱과 같은 프로그램과 Spark 세션으로 구성
- Spark 세션은 프로그램을 가져와서 실행기에서 처리하는 더 작은 작업으로 분할됨
ㅁ 실행자(Executors)
- 각 실행기 또는 작업자 노드는 드라이버로부터 작업을 받고 해당 작업을 실행
- 실행기는 클러스터라는 엔터티에 상주
ㅁ 클러스터 관리자
- 클러스터 관리자는 드라이버 및 실행기 모두와 통신하여 다음을 수행
- 리소스 할당 관리
- 프로그램 분할 관리
- 프로그램 실행 관리
ㅁ 언어 지원
- Apache Spark에서 지원하는 프로그래밍 언어
- 스칼라
- Python
- Java
- SQL
- R
- .NET 언어(C#/F#)
ㅁ Spark API
- Apache Spark에서 지원하는 API
- Spark Scala API
- Spark Java API
- Spark Python API
- Spark R API
- Spark SQL, 기본 제공 함수
■ 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 : 지연 실행으로 자원의 배치를 최적화하여 분산 수행
ㅁ Dataframe / Dataset
- 병렬 인메모리 처리를 위해 생성/엔진 로직도 사용자가 정의(논리적 이해 필요)
- RDD 테이블 조인, 파티셔닝 등 효율을 사용자가 제어해야하므로 잘 모를경우 성능 저하 발생
- RDD의 단점 보완을 위해 고안
Dataframe | - 사용자정의함수(UDF)를 사용 가능 - 스키마를 가질 수 있게 자동화/최적화 - Scala, Java, Python, R 지원 |
Dataset | - 스키마 필수 - 사용자가 데이터를 객체화할 수있도록 하여 안전 - Scala, java 지원 |
ㅁ RDD vs. Dataframe vs. Dataset
※ 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/
반응형